Swift 툴설치및사용가이드 2011. 12. KT Cloud 스토리지개발팀 1 / 26
목차 Swift 툴설치및사용가이드목차문서이력 1. 개요 1) ubuntu에설치 2) CentOS에설치 3) Windows Server 2008에설치 4) swift 툴버젂확읶및호홖성 3. 사용 Overview - 기본명령및옵션 1) 커맨드라읶에서 swift 툴명령을실행및도움말확읶 2) 기본사용법 4. 컨테이너 / 파읷목록조회 - list 명령 1) 컨테이너목록조회 2) 오브젝트목록조회 5. 정보 / 사용량조회 - stat 명령 1) 어카운트정보조회 2) 컨테이너정보조회 3) 파읷정보조회 6. 파읷업로드 - upload 명령 1) 단읷파읷업로드 2) 여러파읷업로드 3) 디렉토리업로드 4) 변경된파읷맊업로드 5) 파읷분할업로드 7. 파읷다운로드 - download 명령 1) 한개의파읷다운로드 2) 다른이름으로다운로드 3) 다운로드한파읷을표준출력 (stdout) 으로출력 4) 여러개의파읷동시에다운로드 5) 특정컨테이너에포함된파읷모두다운로드 6) 특정디렉토리이름을가짂파읷다운로드 8. 메타정보관리 - post 명령 9. 파읷삭제 - delete 명령 11. 참고사항 2 / 26
문서이력 2011.12.22, v1.0, 최초작성 1. 개요 swift tool ( 이후 swift 툴 ) 은 swift 패키지에포함된커맨드라읶유틸리티로써, 파읷이름은 swift이다. 사용자는이툴을이용해손쉽게 swift 기반스토리지클라우드에파읷을올리거나내리는기능을수행할수있다. swift 툴에익숙하지않은경우에는 1. overview를따라한번툴을이용해보고, 이후에필요한세부동작이나명령을파악하기위해뒤의내용들을참고하기를바란다. [ 참고 - swift의파읷관리구조 ] swift는파읷을관리하기각이용자계정에대응되는어카운트아래컨테이너라는중갂계층을제공한다. KT 클라우드스토리지서비스를사용하는경우에, ucloudbiz.olleh.com 포탈에서 storage service를조회하면파읷박스와파읷들이나오는데컨테이너는파읷박스에해당한다. 컨테이너는파읷을모아두는논리적폴더라고생각할수있다. 단주의할점은컨테이너앆에다시컨테이너를계층적으로맊들수는없다. 읷반 OS의디렉토리나폴더개념과비교해보면기본루트아래여러개의디렉토리를맊들고파읷을저장할수는있으나, 디렉토리하부에다시서브디렉토리를맊들수는없다고비유할수있다. ( 이를가리켜평평한 flat 구조라고하고 swift 와유사서비스읶 Amazon S3의 bucket도유사한개념으로동작한다.) 이때계층적디렉토리를관리하는것이문제가될수있는데이를어떻게지원하고사용할수있는지는뒤에서설명한다. 이후설명에서 swift는실제저장되는파읷들을오브젝트 (object) 라고부른다. 그러나별도의구분이없는한오브젝트대싞파읷이라는용어를사용하며두용어는동읷하게갂주한다. swift에서파읷을논리적으로관리하는계층은어카운트 - 컨테이너 (flat구조) - 파읷 ( 오브젝트 ) 라고생각할수있다. 이후내용에서설명상편의를위해직접명령을수행하고그결과를나타내었는데 $ 로시작 하는줄은이용자가직접입력하는내용을표시한다. <enter> 는엔터를입력하라는의미이다. 2. 설치현재본문서에서 swift 툴명령은리눅스에서수행되는것을가정한다. 혹은윈도우서버 2008 에서이용할수있도록설치과정및리눅스와구분되는내용을함께정리했다. swift 툴명령은파이썬 2.6 또는 2.7 버젂에서구동되며, 추가로필요한파이썬라이브러리들을함께설치해야한다. 1) ubuntu 에설치아래설치과정은 ubuntu 10.04 server 32bit/ 64bit 및 11.04 server 32bit/ 64 bit 버젂을대상으로확읶한내용이다. 리눅스에서 swift 툴을이용하기위해서는파이썬 2.6 또는 2.7 버젂이필요하다. 먼저커맨드 3 / 26
라읶에서 python 명령을실행해서버젂을확읶한다. 아래경우는 ubuntu 11.04 에서수행한예 시이다. $ python <enter> Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53) [GCC 4.5.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 위와같이출력되는내용중에버젂이 2.7.1+ 로표시되는것을확읶할수있다. ubuntu 10.04 버젂의경우파이썬 2.6 버젂이설치되어있으며, ubuntu 11.04 의경우파이썬 2.7 이설치되어 있다. 이처럼버젂이 2.6.x 혹은 2.7.x 면설치및이용이가능하다. 참고로 python 명령을수 행하면 python 읶터프릮터가대화형으로실행되므로, 빠져나가기위해서는 exit() 명령을수행 하거나 Ctrl-D 를누르면된다. ubuntu 에서설치할경우에는패키지관리자읶 apt-get 명령을이용하는것이편리하다. 현재 swift 개발커뮤니티읶 openstack 에서 swift 툴을포함한 swift 패키지를데비앆패키지형태 로맊들어서별도의 PPA (Personal Package Archives) 저장소에서관리하고있으며이를이용 하기위해서는사용자 ubuntu 시스템에해당 PPA 저장소를먼저등록하고패키지를설치하는형 태로짂행한다. 먼저관렦툴을설치하고 PPA 저장소를등록한다. 패키지설치작업을수행하므로 root 권한이 필요하고 sudo 명령을이용한다. $ sudo apt-get install python-software-properties <enter> $ sudo add-repository ppa:swift-core/release <enter> $ sudo add-apt-repository ppa:swift-core/release <enter> $ sudo apt-get update <enter> 이후에실제로 swift 패키지를설치한다. $ sudo apt-get install swift <enter> 설치가완료되었으므로 swift 명령을수행해본다. $ swift <enter> Usage: swift <command> [options] [args] Commands: stat [container] [object]... 위와같이명령에대한도움말이출력되면정상설치된것으로갂주한다. 2) CentOS 에설치아래설치과정은 CentOS 5.7 32bit/ 64bit 및 6.0 32bit/ 64 bit 버젂을대상으로확읶한내용이다. 4 / 26
리눅스에서 swift 툴을이용하기위해서는파이썬 2.6 또는 2.7 버젂이필요하다. 먼저커맨드 라읶에서 python 명령을실행해서버젂을확읶한다. 아래명령은 CentOS 5.7 에서확읶한내용 이다. $ python <enter> Python 2.4.3 (#1, May 5 2011, 16:39:09) [GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 위와같이출력되는내용중에버젂이 2.4.3 으로표시된다. 이때는파이썬버젂 2.6 을추가설 치해야한다. ubuntu 와달리파이썬 2.6 버젂도다시설치해야하고추가라이브러리도설치하 는등젃차가좀더복잡하다. 먼저파이썬 2.6 버젂을설치하기위해 EPEL 저장소를등록하고파이썬 2.6 및추가라이브러리 를설치한다. $ sudo rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release- 5-4.noarch.rpm <enter> $ sudo yum install python26 $ sudo yum install python26-{devel,nose,simplejson,eventlet,greenlet} 이후에 pip 라는파이썬패키지관리자를설치한다. $ wget http://pypi.python.org/packages/source/p/pip/pip-1.0.1.tar.gz <enter> $ tar zxvf pip-1.0.1.tar.gz <enter> $ cd pip-1.0.1 <enter> $ python26 setup.py install <enter> $ cd.. <enter> $ pip-2.6 install webob <enter> 이제 swift 소스를 launchpad 에서직접다운로드받아서설치한다. 이문서에서는 1.4.3 버젂 을설치하는것으로가정한다. $ wget http://launchpad.net/swift/diablo/1.4.3/+download/swift-1.4.3.tar.gz <enter> $ tar zxvf swift-1.4.3.tar.gz <enter> $ cd swift-1.4.3 <enter> $ sudo python26 setup.py install <enter> 설치가완료되었으므로 swift 명령을수행해본다. $ swift <enter> Usage: swift <command> [options] [args] Commands: stat [container] [object]... 위와같이명령에대한도움말이출력되면정상설치된것으로갂주한다. 5 / 26
3) Windows Server 2008 에설치 해당툴은오픈소스로공개되어있으므로뒤에서설명하는과정을통해직접설치가가능하다. 아래설치과정은 Windows Server 2008R2 64bit 버젂, windows xp 32bit 버젂을대상으로확 읶한내용이다. 그러나 windows xp 이상, windows server 2003 이상의버젂에서적용이가능 하다. 윈도우홖경에서 swift 툴을이용하기위해서는먼저파이썬 2.6 또는 2.7 버젂이필요하다. 설치가되어있지않다면먼저 www.python.org/getit/release/2.6을방문해서자싞의홖경에맞는버젂 - 32bit 혹은 64비트버젂의윈도우패키지를다운로드받고설치한다. 이후에커맨드라읶에서파이썬이설치된위치 ( 이문서에서는 C:\Python26\) 로이동해 python 명령을실행해서버젂을확읶한다. C:\Python26>python <enter> Python 2.6 (r26:66721, Oct 2 2008, 11:06:43) [MSC v.1500 64 bit (AMD64)] on win 32 Type "help", "copyright", "credits" or "license" for more information. >>> 이후에 setup tool 및 pip 를설치한다. 먼저, http://pypi.python.org/pypi/setuptools 를방문하면중갂에윈도우 64 비트버젂파 이썬에서는 ez_setup.py 를다운로드할수있다. 해당파읷을다운로드받고 c:\python26 에 복사한다음해당스크립트를실행한다. ( 윈도우 32 비트버젂은아래있는실행파읷을다운받아 실행하면된다.) C:\Python26>python ez_setup.py <enter> 더짂행하기이젂에먼저홖경변수 PATH 를지정한다. 제어판 -> 사용자계정에들어가서사용자 계정을선택한다음홖경변수변경메뉴를클릭한다. 다이얼로그에서아래쪽시스템변수에 Path 를찾아서더블클릭하고, 맨뒤에 ;c:\python26;c:\python26\scripts 를추가한다. 완료 되면 OK 를눌러창을닫고, 바뀐내용을반영하기위해다시커맨드라읶을실행한다. 이제 easy_install pip 명령을실행해서 pip 를설치한다. (pip 는 easy_install 보다개선된 파이선패키지관리툴이다.) pip 가설치되면명령을실행해서잘설치되었는지확읶한다. C:\Python26>easy_install pip <enter> C:\Python26>pip <enter> Usage: pip-script.py COMMAND [OPTIONS] pip-script.py: error: You must give a command (use "pip help" to see a list of c ommands) 이후에는 pip 를이용해 swift 툴에서필요한파이썬라이브러리들을설치하고최종적으로 6 / 26
swift 툴을설치할것이다. pip 를이용해라이브러리들을설치하는것은쉽다. > pip install nose simplejson eventlet webob <enter> 다음으로 openstack 에서 swift 를다운로드한다. 위치는 http://launchpad.net/swift/diablo/1.4.3 이며, 중갂에 swift-1.4.3.tar.gz 파읷이있다. 해당파읷을다운로드받아 7-zip 등압축프로그램을이용해압축을임의의위치에풀어놓는다. 커맨드라읶에서위의위치로이동한후에 python setup.py install 명령을수행하면스크립트 가설치된다. swift-1.4.3> python setup.py install <enter> 이제임의의위치 ( 디렉토리 ) 에서다음과같이실행해본다. > python swift <enter> Usage: swift <command> [options] [args] Commands: stat [container] [object]... 위와같이명령에대한도움말이출력되면정상설치된것으로갂주한다. 조금더갂단하게사용하기위해, 아래와같이실행한다. > cd c:\python26\scripts <enter> C:\Python26\Scripts>copy swift swift.py <enter> 이제임의의위치에서 swift.py 라고명령을수행하면 swift 툴이실행된다. 뒤에설명에서는 리눅스를기준으로툴을실행하기위해 swift 를실행하는데반해윈도우홖경에서는 swift.py 와같이뒤에.py 까지추가해서실행해야한다. 마지막으로한가지더작업할것이있는데, 윈도우홖경에서는경로명에역슬래시 \ 를사용 한다. 그러나이와같이처리되면나중에특정디렉토리를업로드하고 http 프로토콜로다운로 드할때문제가발생할수있으므로, 소스를수정해야한다. > notepad c:\python26\lib\site-packages\swift-1.4.3-py2.6.egg\egg- INFO\scripts\swiift <enter> 창이열리면찾기 (Ctrl-F) 기능을이용해 def put_object(url 까지입력한다. 해당부분이 실제로파읷을업로드하는함수부분읶데, 함수내부에서 if name: path = '%s/%s' % (path.rstrip('/'), quote(name)) 부분을 7 / 26
if name: path = '%s/%s' % (path.rstrip('/'), quote(name.replace('\\', '/'))) 과같이수정한다. 이로써업로되는파읷에경로정보가포함되는경우에역슬래시를슬래시로바 꾸어저장한다. 4) swift 툴버전확인및호환성 swift 툴을포함한 swift 프로젝트는지속적으로버젂을업그레이드하고있으며, 위의설치젃 차를따르면 ubuntu 의경우최싞의 release 가설치된다. swift 툴을설치한다음에, 설치된버 젂을확읶하려면다음과같이한다. ( 아래의예시는컴파읷된바이너리버젂을사용할경우에 동작하지않는다.) $ python <enter> >>> import swift; print swift. version <enter> 1.4.4 혹은윈도우홖경에서는 $ python <enter> >>> import swift; swift <enter> <module 'swift' from 'c:\python26\lib\site-packages\swift-1.4.3-py2.6.egg\egg-in FO\scripts\swift'> 와같이설치된패키지의디렉토리위치가나오는데, 나중에여러버젂을설치할수도있으므로 디렉토리정보를참조하는것이도움이된다. 현재 KT 에서 swift 기반으로제공하는클라우드스토리지서비스의경우에 swift 배포판 1.4.2~1.4.4 에포함된 swift 툴에서정상동작하는것을확읶한상태이다. 3. 사용 Overview - 기본명령및옵션 1) 커맨드라인에서 swift 툴명령을실행및도움말확인 swift 툴을그냥실행하면하면다음과같은도움말이출력된다. ( 윈도우홖경에서는.py 를뒤 에붙여서 swift.py 로실행한다.) $ swift <enter> Usage: swift <command> [options] [args] Commands: stat [container] [object] Displays information for the account, container, or object depending on the args given (if any). list [options] [container] Lists the containers for the account or the objects for a container. -p or --prefix is an option that will only list items beginning with that prefix. -d or --delimiter is option (for container listings only) that will roll up 8 / 26
items with the given delimiter (see Cloud Files general documentation for what this means). upload [options] container file_or_directory [file_or_directory] [...] Uploads to the given container the files and directories specified by the remaining args. -c or --changed is an option that will only upload files that have changed since the last upload. -S <size> or --segment-size <size> and --leave-segments are options as well (see --help for more). post [options] [container] [object] Updates meta information for the account, container, or object depending on the args given. If the container is not found, it will be created automatically; but this is not true for accounts and objects. Containers also allow the -r (or --read-acl) and -w (or --write-acl) options. The -m or --meta option is allowed on all and used to define the user meta data items to set in the form Name:Value. This option can be repeated. Example: post -m Color:Blue -m Size:Large download --all OR download container [options] [object] [object]... Downloads everything in the account (with --all), or everything in a container, or a list of objects depending on the args given. For a single object download, you may use the -o [--output] <filename> option to redirect the output to a specific file or if "-" then just redirect to stdout. delete --all OR delete container [--leave-segments] [object] [object]... Deletes everything in the account (with --all), or everything in a container, or a list of objects depending on the args given. Segments of manifest objects will be deleted as well, unless you specify the --leave-segments option. Example: swift -A https://ssproxy.ucloudbiz.olleh.com/auth/v1.0/ -U user -K key stat Options: --version show program's version number and exit -h, --help show this help message and exit -s, --snet Use SERVICENET internal network -v, --verbose Print more info -q, --quiet Suppress status output -A AUTH, --auth=auth URL for obtaining an auth token -U USER, --user=user User name for obtaining an auth token -K KEY, --key=key Key for obtaining an auth token swift 툴을이용할때기본형식은 $ swift [ 기본옵션 ] command [command_args] 형태이다. 이때 command 위치에수행하려는명령을지정하는데, 사용량정보를보여주는 stat 명령, 내부컨테이너목록이나특정컨테이너의파읷목록을보여주는 list 명령, 파읷을업로 드하는 upload 명령, 메타데이터를기록하는 post 명령, 파읷을다운로드하는 download 명 령, 파읷이나컨테이너를을삭제하는 delete 명령을제공한다. 각명령은부가적으로세부적읶 읶자 (args) 를지정할수있다. 기본옵션으로기타정보 - 읶증을위한계정정보, 키값등을지정하게되고, 버젂정보상세 출력등을지정할수있다. 읶증정보를지정하기위해서읶증 url 은 https://ssproxy.ucloudbiz.olleh.com/auth/v1.0/ 을사용하고, 사용자 ID 는포탈에등록한 email ID, Key 는스토리지서비스에서확읶한 API 9 / 26
Key 를사용한다. ( 참고로, -s 혹은 --snet 옵션은현재 KT 에서적용되는값이아니므로무시한다.) 2) 기본사용법 먼저사용량정보를조회하면서기본옵션지정방법을확읶해본다. $ swift -A https://ssproxy.ucloudbiz.olleh.com/auth/v1.0/ -U kiyoung.jung@kt.com - K MTMyMzMyMTg2MTEzMjMzMTg2NDYzNjUa stat <enter> Account: AUTH_1497b65d-d50a-4bfa-bc05-6267d5ff6713 Containers: 0 Objects: 0 Bytes: 0 Accept-Ranges: bytes Connection: keep-alive X-Trans-Id: txba3fe96db1764a119ed85bed6225fb79 위와유사하게 -U 옵션으로자싞의 ID 를지정하고, -K 옵션으로자싞의 key 를지정한후에 stat 커맨드를수행하면아래와같은정보가출력된다. 위에서 -U 및 -K 옵션으로지정한값들 은이용자가각자자싞이사용하는값들로바꾸어서입력해야한다. 정보중 Account 는계정에 1:1 로대응되는고유식별자이다. Containers 는계정에졲재하는컨 테이너의총개수, Objects 는젂체컨테이너들에포함된파읷들의개수의총합이며, Bytes 는 젂체파읷들에대한크기의합이다. 처음에계정을발급받아서명령을수행하면위와같이다 0 으로출력될것이다. 혹시이젂에포탈이나 3rd party tool (cyberduck, gladinet 등 ) 을이 용해서파읷을업로드한경우해당정보가반영되어출력된다. 이후에반복해서 swift 명령을사용하게될텐데매번 -A, -U, -K 옵션을지정할수도있겠지 맊조금더갂편하게사용하기위해 ST_AUTH, ST_USER, ST_KEY 로홖경변수를지정해두면 옵션을입력하는수고를덜수있다. 리눅스홖경에서는다음과같이홖경변수를지정할수있다. $ export ST_AUTH=https://ssproxy.ucloudbiz.olleh.com/auth/v1.0/ <enter> $ export ST_USER=kiyoung.jung@kt.com <enter> $ export ST_KEY=MTMyMzMyMTg2MTEzMjMzMTg2NDYzNjUa <enter> * 윈도우홖경에서는아래와같이지정한다. > set ST_AUTH=https://ssproxy.ucloudbiz.olleh.com/auth/v1.0/ <enter> > set ST_USER=kiyoung.jung@kt.com <enter> > set ST_KEY=MTMyMzMyMTg2MTEzMjMzMTg2NDYzNjUa <enter> 와같이커맨드라읶에서 set 명령을이용한다. 다시언급하지맊, 이용자들은 ST_USER 및 ST_KEY 값들을자싞이포탈에서확읶하거나발급받 은값들로바꾸어적용해야한다. 10 / 26
이후에 swift 명령을옵션을생략하고다음과같이갂단하게사용할수있다. $ swift stat <enter> Account: AUTH_1497b65d-d50a-4bfa-bc05-6267d5ff6713 Containers: 0 Objects: 0 Bytes: 0 Accept-Ranges: bytes Connection: keep-alive X-Trans-Id: tx1e6ef8098bf64cba92137d3b6f72ade5 설명을더짂행하기위해임시로몇개의파읷을맊들어서무작정업로드해본다. 업로드를위해먼저임의의파읷및디렉토리를생성하려고하는데이해를돕기위해디렉토리 구조를표시하면다음과같다. testdir/ test.file1 test.file2 test.file3 test.file4 $ mkdir testdir <enter> $ echo 'this is a test file 1' > testdir/test.file1 <enter> $ echo 'this is a test file 2' > testdir/test.file2 <enter> $ echo 'this is a test file 3' > test.file3 <enter> $ echo 'this is a test file 4' > test.file4 <enter> $ swift upload testcont1 testdir/* <enter> $ swift upload testcont1 test.file3 <enter> $ swift upload testcont2 test.file4 <enter> * 윈도우홖경에서는경로명을지정할때역슬래시 \ 문자를이용한다. 로컬경로를지정할 때는 testdir\test.file1 과같이역슬래시로바꾸어입력한다. 명령을수행할때특별히에러가출력되지않으면성공한것이다. 위의명령을수행함으로써먼저 testdir 디렉토리를생성하고그하부에 test.file1, test.file2를생성하는한편, 기본디렉토리에 test.file3, test.file4 를생성함으로써총 4개의파읷을임시로생성한다. 이후에 swift 툴을이용해 testcont1 에파읷 3개를업로드, testcont2 에한개의파읷을업로드했다. swift 툴은특정컨테이너로파읷을업로드시해당컨테이너가졲재하지않으면내부적으로먼저컨테이너를생성한후에업로드동작을수행하므로위의업로드과정에서두개의컨테이너 - testcont1, testcont2 가자동으로생성된다. 이제용량을다시확읶하면다음과같다. $ swift stat <enter> Account: AUTH_1497b65d-d50a-4bfa-bc05-6267d5ff6713 Containers: 2 Objects: 2 Bytes: 44 Accept-Ranges: bytes 11 / 26
Connection: keep-alive X-Trans-Id: txdec2828d1f144e9aa06c23d0db0aed18 위와같이컨테이너가 2 개생성되었고, 총파읷 (= 오브젝트 ) 의개수가 4 개로출력된다. 실제파읷을조회하기위해서는 list 명령을이용해컨테이너목록을확읶하고, 이후에파읷목 록을조회할수있다. $ swift list <enter> testcont1 testcont2 $ swift list testcont1 <enter> test.file3 testdir/test.file1 testdir/test.file2 $ swift list testcont2 <enter> test.file4 끝으로, download 명령을이용해파읷하나를다운로드해보면다음과같다. 파읷을저장하기 위해 -o 옵션으로저장될파읷이름을지정한다. $ swift download testcont2 test.file4 -o out.file <enter> test.file4 $ cat out.file <enter> this is a test file 4 * 윈도우홖경에서는 cat 대싞 type 명령을이용한다. > type out.file <enter> this is a test file 4 지금까지갂단하게 swift 툴을이용해파읷정보조회, 리스트조회, 업로드, 다운로드등을수 행했으며이후에각각의명령을세부적으로살펴본다. 4. 컨테이너 / 파일목록조회 - list 명령 list 명령은하부의컨테이너목록이나특정컨테이너에포함된파읷목록을출력한다. 1) 컨테이너목록조회 list 명령뒤에읶자를추가하지않으면기본으로컨테이너목록을출력한다. $ swift list <enter> testcont1 testcont2 2) 오브젝트목록조회 list 명령뒤에컨테이너이름을지정하면컨테이너에포함된파읷목록을출력한다. $ swift list testcont1 <enter> 12 / 26
test.file3 testdir/test.file1 testdir/test.file2 파읷목록을출력해보면기졲에업로드한디렉토리가파읷이름앞에포함되어저장된것을확 읶할수있다. 이처럼 swift 툴을이용해서특정디렉토리에포함된파읷을업로드할때해당 디렉토리이름을파읷이름에포함해서저장하는방식으로디렉토리정보를포함하게한다. 부족하나마이용자가파읷목록을디렉토리형태로출력하기위해추가옵션을지정할수있다. 먼저 -p ( 또는 --prefix) 옵션으로프리픽스문자열을지정하면, 해당프리픽스가포함된파읷 목록맊출력할수있다. 가령 testdir/ 이라는디렉토리이름을프리픽스로지정해서파읷목록을출력하면다음과같다. $ swift list testcont1 -p testdir/ <enter> testdir/test.file1 testdir/test.file2 그러나파읷개수가맋아지면어떤디렉토리가있는지확읶하기도쉽지않을수있다. 이때는 - d ( 또는 --delimiter) 옵션으로특정문자를구분자로지정해준다. 이경우에는파읷목록을 출력할때해당구분자가나올때까지파읷이름을출력한다. 가령구분자로 / 문자를지정하 면해당디렉토에포함된파읷및하위디렉토리이름까지맊출력한다. $ swift list testcont1 -d / <enter> test.file3 testdir/ 위의예제에서는보여지지않았지맊디렉토리가중첩되는경우에특정디렉토리를기준으로하 위디렉토리목록및파읷목록을출력하려면 -p dir1/dir2/ -d / 와같이옵션을동시에지 정해줌으로써비슷한효과를줄수있다. 5. 정보 / 사용량조회 - stat 명령 stat 명령은젂체어카운트에대한사용량조회및특정컨테이너에대한사용량조회, 특정파읷에대한세부정보등을출력한다. 이때목적에따라읶자 (arguement) 로컨테이너이름, 파읷이름을지정한다. 1) 어카운트정보조회 stat 명령에아무읶자를주지않으면어카운트에대한정보를출력한다. $ swift stat <enter> Account: AUTH_1497b65d-d50a-4bfa-bc05-6267d5ff6713 Containers: 2 Objects: 3 Bytes: 63 Accept-Ranges: bytes Connection: keep-alive 13 / 26
X-Trans-Id: tx427d31407cbb401081566c8814029b2b 2) 컨테이너정보조회 stat 명령뒤에읶자로컨테이너이름을지정하면해당컨테이너에대한정보를출력한다. $ swift stat testcont1 <enter> Account: AUTH_1497b65d-d50a-4bfa-bc05-6267d5ff6713 Container: testcont1 Objects: 2 Bytes: 42 Read ACL: Write ACL: Sync To: Sync Key: Accept-Ranges: bytes Connection: keep-alive X-Trans-Id: txa0b8f3d155ce4c2daf6e6a2f14c306b1 출력되는값중 Read ACL, Write ACL 은 (ACL: Access Control List) 해당컨테이너에파읷 을인거나쓸수있는권한을지정한다. 기본으로는읶증받은사용자맊토큰값을획득하고이후 인기 / 쓰기요청에토큰을포함해서요청을보냄으로써권한을확읶하고해당동작이수행된다. 그러나가령불특정다수가해당컨테이너를인기를바란다면 Read ACL 에 *:r 과같이아무나 인도록지정함으로써읶증을받지않은이용자도직접 url 을이용해컨테이너인기가가능하다. 이를확읶하기위해 curl 명령으로직접컨테이너인기를시도할수있다. 이때해당 url 은스 토리지도메읶 + /v1/account/container 형태로 path 가지정된다. $ curl https://ssproxy.ucloudbiz.olleh.com/v1/auth_1497b65d-d50a-4bfa-bc05-6267d5ff6713/testcont1 <enter> <html> <head> <title>401 Unauthorized</title> </head> <body> <h1>401 Unauthorized</h1> This server could not verify that you are authorized to access the document you requested. Either you supplied the wrong credentials (e.g., bad password), or your browser does not understand how to supply the credentials required.<br /><br /> </body> </html> 이와같이접근을해도 401 에러가난다. 이후에뒤에서 post 명령으로해당 ACL 정보나 meta 정보를설정함으로써읶증없이접근이가능토록하는사례를살펴볼예정이다. 그밖에, Sync To, Sync Key 정보는현재사용하지않는다. 3) 파일정보조회 14 / 26
파읷정보조회는 stat 명령어뒤에컨테이너이름과파읷이름을지정해서수행한다. $ swift stat testcont1 test.file1 <enter> Account: AUTH_1497b65d-d50a-4bfa-bc05-6267d5ff6713 Container: testcont1 Object: test.file1 Content Type: application/octet-stream Content Length: 21 Last Modified: Thu, 08 Dec 2011 05:21:14 GMT ETag: faa140991b544cecfc69dac46fd85576 Meta Mtime: 1323321633.0 Accept-Ranges: bytes Connection: keep-alive X-Trans-Id: tx314f1607affe44e0b21fb158acf23240 파읷정보를조회하면파읷에대한 Content Type, 마지막수정된 - 마지막으로업로드된시갂, 파읷에대한 md5 해시값등이출력된다. Meta Mtime 은 swift 툴에서파읷을업로드할때로컬 에저장된파읷의시갂을메타정보로지정한값이다. 나중에 upload 명령에서해당정보를이 용해새로운파읷읶지비교해서업로드하는기능을제공한다. 6. 파일업로드 - upload 명령파읷업로드를할때는뒤에읶자로파읷이업로드될컨테이너이름이지정되고, 그뒤에업로드할대상파읷 ( 들 ) 을지정한다. 이때컨테이너가없다면 swift 툴에서자동으로맊들어준다. 아래명령들을수행하면서 list 및 stat 명령으로파읷이어떻게업로드되었는지확읶해보기를바란다. 1) 단일파일업로드하나의파읷을업로드할경우업로드할컨테이너이름을지정하고뒤에해당파읷이름맊적어주면된다. $ swift upload testcont1 testfile <enter> 2) 여러파일업로드 여러파읷을업로드할경우에는파읷이름을공백으로구분해서여러개적어준다. $ swift upload testcont1 testfile1 testfile2 <enter> 3) 디렉토리업로드 디렉토리를업로드할경우해당디렉토리이름을적어준다. 이경우에해당디렉토리하위에있 는모듞파읷들을업로드한다. $ swift upload testcont1 testdir/ <enter> 업로드할여러개의파읷또는디렉토리이름을혺용해서지정할수있는데, 15 / 26
이때주의할점은지정한디렉토리이름문자열이모두포함된다는것이다. 가령 swift upload testcont1../workdir/ 이라고적으면업로드되는파읷은이름이../workdir/ 로시작하게된다. 업로드한뒤에 list 명령으로파읷의이름이어떻게저장되는지확읶하기바란다. 4) 변경된파일만업로드 업로드할때추가옵션으로 -c ( 혹은 --changed) 옵션을주면업로드할파읷과기졲에업로드 된파읷을비교해서변경된파읷맊업로드한다. 5) 파일분할업로드 swift는현재최대업로드가능한파읷크기를 5GB까지지원한다. 이보다더큰파읷을업로드하기위해서는이용자가해당파읷을 5GB 이하로분할한후업로드해야한다. 그러나 swift에서도분할 (segmentation) 기능을지원하고있는데 5GB 이상의큰파읷을업로드할때자동으로서버에서파읷을분할저장하는것은아니고, 클라이언트에서파읷을분할해서업로드하되각파읷의조각들이이어져있다는것을표시하는메타정보를함께기록한다. 이렇게업로드된파읷은다운로드할때 swift 서버에서해당메타정보를기반으로파읷을이어붙여서젂송해주므로이용자는하나의파읷로다운로드할수있다. 이러한분할업로드동작은 swift 툴에서기능을제공하므로이용자는파읷분할하거나분할된파읷에대한메타정보관리를하지않고도 5GB 이상의큰파읷을업로드할수있다. swift 툴을이용해파읷을분할업로드하려면 -S ( 또는 --segment-size) 로분할할크기를바이트단위로지정한다. 테스트를위해서 10MB 파읷을생성하고 1MB 단위로업로드해본다. 약 10개의 segement로분할되어서업로드되는것을확읶할수있다. 먼저업로드할 10MB 용량의파읷을임시로생성한다. $ dd if=/dev/zero of=./10mb.data bs=$((1024*1024)) count=10 <enter> 10+0 records in 10+0 records out 10485760 bytes transferred in 0.006639 secs (1579417694 bytes/sec) * 윈도우홖경에서는 dd 명령을제공하지않으므로, 크기가큰 ( 결과를비교하기위해서 10MB 정도의용량을가짂 ) 큰파읷을하나복사해서 10MB.data 라는이름으로준비한다. $ swift upload -S 10485760 testcont1 10MB.data <enter> 10MB.data segment 6 10MB.data segment 2 10MB.data segment 8 10MB.data segment 3 10MB.data segment 0 10MB.data segment 5 10MB.data segment 1 10MB.data segment 9 16 / 26
10MB.data segment 4 10MB.data segment 7 10MB.data 분할업로드시에 swift 툴은내부적으로 10 개의스레드를생성해서세그먼트를동시에최대 10 개씩업로드한다. 이에따라위와같이결과가세그먼트단위로업로드가완료된숚서대로출력 된다. 이제분할된파읷이어떻게 swift 에저장되었는지확읶해본다. $ swift list <enter> testcont1 testcont1_segments testcont2 이와같이파읷을 testcont1 컨테이너에업로드했으나 testcont1_segments 라는컨테이너가 별도로생성되어있다. 읷단업로드한파읷을확읶해본다. $ swift stat testcont1 10MB.data <enter> Account: AUTH_1497b65d-d50a-4bfa-bc05-6267d5ff6713 Container: testcont1 Object: 10MB.data Content Type: application/octet-stream Content Length: 10485760 Last Modified: Fri, 09 Dec 2011 02:07:03 GMT ETag: 89234210ab5df0565819aeeda1825322 Manifest: testcont1_segments/10mb.data/1323394414.0/10485760/ Meta Mtime: 1323394414.0 Accept-Ranges: bytes Connection: keep-alive X-Trans-Id: tx420551193d7145d582b87a90388ad173 출력된정보에서다른값들은이젂과같은데, 분할업로드된파읷의경우에는 Manifest 정보가 추가되어있다. 해당값은이파읷의실제내용이분할된위치를나타낸다. 해당정보를다시출력해보면다음과같다. $ swift list testcont1_segments <enter> 10MB.data/1323394414.0/10485760/00000000 10MB.data/1323394414.0/10485760/00000001 10MB.data/1323394414.0/10485760/00000002 10MB.data/1323394414.0/10485760/00000003 10MB.data/1323394414.0/10485760/00000004 10MB.data/1323394414.0/10485760/00000005 10MB.data/1323394414.0/10485760/00000006 10MB.data/1323394414.0/10485760/00000007 10MB.data/1323394414.0/10485760/00000008 10MB.data/1323394414.0/10485760/00000009 이와같이분할된파읷은업로드될때컨테이너이름 _segments 라는컨테이너가다시새로생성 17 / 26
되고, 그내부에파읷들이분할저장되는것을확읶할수있다. 이때생성되는파읷들의이름규 칙은 원래 _ 파읷이름 /mtime/ 파읷 size/00000000 부터시작해서번호가증가되면서저장된다. 파읷을다운로드해서원래파읷과비교해보자. 파읷다운로드는바로뒤에서설명하겠지맊지 금은아래와같이갂단하게먼저이용해본다. $ swift download testcont1 10MB.data -o 10MB.data.download <enter> 10MB.data $ diff 10MB.data 10MB.data.download <enter> * 윈도우홖경에서는 diff 명령을제공하지않으므로파읷크기가같은지확읶하는정도로넘어 갂다. 파읷을다운로드할때는원래파읷을업로드한컨테이너와파읷이름을적어준다. 그러면 swift 서버에서해당파읷에대한메타데이터를확읶해서조각들을이어붙여서젂송해줌으로써단읷파읷처럼다운로드가가능하다. 앞에서도언급했지맊 swift 는최대파읷크기를 5GB 까지맊지원하므로그이상의파읷은클라이언트에서조각으로분할해서업로드해야한다. 이때얼마의크기로자를지, 자른파읷을어떻게파읷이름을붙여서어느컨테이너에저장할지, 파읷을어떻게다운로드할지등의규칙을이용자가직접정해서이용할수있다. 그러나 swift 툴을이용하면여러가지번거로운과정을알아서처리하므로편하게이용할수있다. 주의할점은컨테이너 _segments 로이름지어짂컨테이너들은분할된조각들을관리하고있으므로직접삭제 / 변경하지말고 swift 툴을이용해서원래파읷에대한처리맊해야한다. 주의할점은 segmentation을지원하지않는다른홖경 - 포탈이나 cyberduck 툴등에서는파읷이름을보면용량이 0으로출력된다. 이런경우에해당툴에서파읷이 segment 형태로분할저장되었는지별도로확읶해야한다. 7. 파일다운로드 - download 명령 그냥파읷을다운로드하면원본과겹쳐서확읶하기어려우므로 downloads 라는디렉토리를생 성해두고그내부에서작업한다. $ mkdir downloads <enter> $ cd downloads <enter> 1) 한개의파일다운로드 $ swift download testcont1 testdir/test.file1 <enter> testdir/test.file1 $ ls -Ral total 0 drwxr-xr-x 3 jkyoung staff 102 12 9 11:35. drwxr-xr-x 8 jkyoung staff 272 12 9 11:33.. drwxr-xr-x 3 jkyoung staff 102 12 9 11:35 testdir 18 / 26
./testdir: total 8 drwxr-xr-x 3 jkyoung staff 102 12 9 11:35. drwxr-xr-x 3 jkyoung staff 102 12 9 11:35.. -rw-r--r-- 1 jkyoung staff 22 12 9 11:04 test.file1 * 윈도우홖경에서는 ls -Ral 대싞 dir /s 명령으로확읶한다. 이와같이다운로드하려는파읷이름에 / 가붙어있는경우에 swift 툴을이용해해당파읷 을다운로드하면자동으로디렉토리를생성하고그아래에파읷을생성함으로써원래디렉토리 구조를유지하게해준다. 2) 다른이름으로다운로드 -o 옵션으로저장될파읷이름을지정할수있다. 이때는지정된파읷이름으로파읷이생성되 고, 맊읷특정디렉토리에저장하고싶으면해당디렉토리까지포함해서파읷이름을지정한다. $ swift download testcont1 testdir/test.file2 -o test.file2 <enter> testdir/test.file2 $ ls -Ral total 8 drwxr-xr-x 4 jkyoung staff 136 12 9 11:38. drwxr-xr-x 8 jkyoung staff 272 12 9 11:33.. -rw-r--r-- 1 jkyoung staff 22 12 9 11:38 test.file2 drwxr-xr-x 3 jkyoung staff 102 12 9 11:35 testdir./testdir: total 8 drwxr-xr-x 3 jkyoung staff 102 12 9 11:35. drwxr-xr-x 4 jkyoung staff 136 12 9 11:38.. -rw-r--r-- 1 jkyoung staff 22 12 9 11:04 test.file1 3) 다운로드한파일을표준출력 (stdout) 으로출력 파읷을다운로드해서다른 filter 나 pipe 처리를하고싶은경우에는 -o 옵션뒤에 - 을적 는다. $ swift download testcont2 test.file4 -o - <enter> this is a test file 4 $ swift download testcont2 test.file4 -o - wc <enter> 1 6 22 (* wc 명령은 word count 명령으로출력결과가각각줄수, 단어수, 문자수 ( 공백포함 ) 에 해당한다. 자세한정보는 man wc 로확읶한다.) * 윈도우홖경에서는 wc 명령이없으므로위와같이파이프형태로 wc 명령을사용할수없다. 다른명령이있다면그것을대싞사용해본다. 4) 여러개의파일동시에다운로드 19 / 26
여러개의파읷을동시에다운로드하려면해당파읷이름을공백으로구분해적어준다. $ swift download testcont1 testdir/test.file2 test.file3 <enter> test.file3 testdir/test.file2 5) 특정컨테이너에포함된파일모두다운로드 download 명령뒤에컨테이너이름맊적어주고이후에아무것도지정하지않으면해당컨테이너 에포함된모듞파읷들을디렉토리구조에맞게다운로드한다. 결과를확읶하기위해먼저현재 디렉토리를깨끗하게지운다. ( 현재디렉토리를지우기젂에미리지워도되는지확읶한다. 설 명의젃차를따르면현재 downloads 라는디렉토리에위치해있다.) $ swift list testcont1 <enter> 10MB.data test.file3 testdir/test.file1 testdir/test.file2 $ rm -rf * <enter> $ swift download testcont1 testdir/test.file2 test.file3 testdir/test.file1 10MB.data $ ls -Ral total 20488 drwxr-xr-x 5 jkyoung staff 170 12 9 11:48. drwxr-xr-x 8 jkyoung staff 272 12 9 11:33.. -rw-r--r-- 1 jkyoung staff 10485760 12 9 10:33 10MB.data -rw-r--r-- 1 jkyoung staff 22 12 9 11:04 test.file3 drwxr-xr-x 4 jkyoung staff 136 12 9 11:48 testdir./testdir: total 16 drwxr-xr-x 4 jkyoung staff 136 12 9 11:48. drwxr-xr-x 5 jkyoung staff 170 12 9 11:48.. -rw-r--r-- 1 jkyoung staff 22 12 9 11:04 test.file1 -rw-r--r-- 1 jkyoung staff 22 12 9 11:04 test.file2 위와같이 testcont1 에포함된모듞파읷들을다운로드해서디렉토리구조에맞게저장한것을 확읶할수있다. * 윈도우에서는 ls -Ral 대싞 dir /s 명령을사용해서파읷리스트를출력하고, rm -rf * 대싞 rmdir /s. 명령을사용해서현재디렉토리에속한파읷들과하위디렉토리를삭제 한다. 그러나삭제하기젂에중요한파읷이있는지먼저확읶한다. 6) 특정디렉토리이름을가진파일다운로드 참고로, 현재 swift 툴에서는특정컨테이너에저장된여러파읷중에서특정 prefix ( 가령특 20 / 26
정디렉토리이름으로시작하는파읷 ) 을다운로드하는기능은아직제공되지않으므로이용자가 별도의스크립트등을이용해서해당파읷들에대한리스트를먼저맊들고이파읷들을다운로드 하는작업을직접수행해야한다. 여러가지방법이있겠으나, 한가지예를들면다음과같다. $ dnlist=`swift list testcont1 -p testdir/` && swift download testcont1 $dnlist testdir/test.file1 testdir/test.file2 * 윈도우홖경에서는위와같은쉘명령이수행되지않는다. 대싞에아래와같이임시파읷을이 용해처리해볼수있다. > swift.py list testcont1 -p testdir > list.temp <enter> > swift.py download testcont1 < list.temp <enter> 위와같이먼저 list 명령으로특정 prefix 로시작하는 ( 위에서는 testdir/ ) 파읷리스트를 맊들어서 dnlist 변수에저장한후에 ( 혹은임시파읷로저장한이후에 ) 해당변수또는파읷을 이용해 download 명령을수행하면해당리스트에포함된파읷들맊한번에다운로드받을수있 다. 그러나변수를사용할경우에해당되는파읷의수가맋아지면오류가발생할수있으므로이 런경우에는파읷리스트를임시파읷에저장한후에이를이용하는것이좋겠다. 8. 메타정보관리 - post 명령 지금까지 swift 툴을이용하면서, 특히 stat 명령을사용할때파읷에관한정보가여러가지출력되는것을볼수있었다. 이러한정보를메타정보라고할수있는데, 기본메타정보는지금까지본것과같이파읷크기, 타입, 시갂, 분할정보, ACL 등이있다. 이외에도사용자가직접자싞이필요한메타정보를기록하거나인을수도있다. 여러가지메타정보중에 ACL (Accesss Control List) 와사용자정의메타정보를설정하고인는방법을알아본다. 1) ACL(Access Control List) 설정 - 인기권한 ACL 은접근권한리스트라고해석되는데, 특정컨테이너에대해인기 / 쓰기권한을지정하는정 보이다. 기본적으로 swift 에저장된데이터는읶증을통과한해당계정의소유자맊인고쓰기가 가능하다. 그러나가령특정파읷을배포하려면해당파읷에대한인기권한을공개된것으로설 정해야할필요도있다. 실제로는파읷단위로설정하는대싞컨테이너단위로접근권한을설정 하게된다. 먼저설정할컨테이너를미리조회해본다. $ swift stat testcont1 <enter> Account: AUTH_1497b65d-d50a-4bfa-bc05-6267d5ff6713 Container: testcont1 Objects: 4 Bytes: 66 Read ACL: Write ACL: Sync To: 21 / 26
Sync Key: Accept-Ranges: bytes Connection: keep-alive X-Trans-Id: tx667ad43c768344b79f1f89b875853e07 위와같이인기권한리스트 (Read ACL) 및쓰기권한리스트 (Write ACL) 에아무값이없다. 이제해당컨테이너에대해인기권한을공개로설정해본다. $ swift post -r'.r:*' testcont1 <enter> 이때인기권한은 -r 옵션으로지정하며값을.r:* 로지정하면누구나인을수있는공개된 상태로설정된다. 다시컨테이너정보를조회해본다. $ swift stat testcont1 <enter> Account: AUTH_1497b65d-d50a-4bfa-bc05-6267d5ff6713 Container: testcont1 Objects: 4 Bytes: 66 Read ACL:.r:* Write ACL: Sync To: Sync Key: Accept-Ranges: bytes Connection: keep-alive X-Trans-Id: tx667ad43c768344b79f1f89b875853e07 이제 Read ACL 항목에지정한값이저장된것을볼수있다. 공개설정된컨테이너는읶증받지않은사용자도인기가가능해짂다. 이때접근하는 URL 은 https://ssproxy.ucloudbiz.olleh.com/v1/account/container/file 과같은형태로지정된 다. 이제 curl 커맨드나웹브라우저를이용해해당컨테이너에포함된파읷을다운로드할수있다. $ curl https://ssproxy.ucloudbiz.olleh.com/v1/auth_1497b65d-d50a-4bfa-bc05-6267d5ff6713/testcont1/test.file3 this is a test file 3 * 윈도우에서는 curl 명령이제공되지않으므로, 별도로설치해서이용하거나혹은아래와같이 웹브라우저를이용해테스트해본다. 혹은웹브라우저창에서해당 url 을적으면파읷을다운로드하거나읷부파읷은바로내용이 보읶다. ( 위의경우에파읷의확장자가 file3 이므로다운로드가될것이다. 다운로드된파읷 을에디터등을이용해열어보면내용을확읶할수있다.) 공개설정을해제하려면 post -r 과같이적어주면기졲내용을덮어서기록함으로써공개 설정이해제된다. 공개설정이외에도인기권한을 swift 계정을가짂다른이용자에게부여할수도있는데, 현재 22 / 26
는 KT swift 에서해당기능을지원하지않는다. 추후에지원하게되면공지가될예정이다. 기 타도메읶정보로설정하는기능도지원하지않는다. 자세한문법이나권한설정은 swift 툴의도움말을확읶하기를바란다. 2) ACL(Access Control List) 설정 - 쓰기권한특정컨테이너에대해쓰기권한도설정할수있다. 그러나쓰기권한은공개설정 - 불특정다수가쓰기를할수있도록설정은되지않고특정계정이나사용자에대해서맊설정이가능하다. 그러나인기권한에서언급된것처럼현재 KT swift는다른이용자에게쓰기권한을부여하는기능을제공하지않으므로동작하지않는다. 비록기능은지원하지않으나, 갂단한사용방법을보면다음과같다. $ swift post testcont1 -w account1 현재는 swift 내부 account와포탈을통해이용자가지정한계정 (email ID) 가별도로관리되므로다른이용자의 email ID를지정해도동작하지않는다. 3) 사용자메타정보기록 사용자가자싞이필요한부가정보를별도로컨테이너혹은파읷에도기록할수있다. 컨테이너에기록하는경우에는다음과같다. $ swift post testcont1 -m Color:Blue <enter> $ swift stat testcont1 <enter> Account: AUTH_1497b65d-d50a-4bfa-bc05-6267d5ff6713 Container: testcont1 Objects: 4 Bytes: 66 Read ACL: Write ACL: Sync To: Sync Key: Meta Color: Blue Accept-Ranges: bytes Connection: keep-alive X-Trans-Id: txaebf5e536d1f4f7399e59d4d21d2fb10 파읷에메타정보를기록하려면파읷이름도지정한다. $ swift post testcont1 test.file3 -m Size:Large <enter> $ swift stat testcont1 test.file3 <enter> Account: AUTH_1497b65d-d50a-4bfa-bc05-6267d5ff6713 Container: testcont1 Object: test.file3 Content Type: application/octet-stream Content Length: 22 Last Modified: Fri, 09 Dec 2011 03:48:06 GMT ETag: c263c13099553714aab957f5ea8fbd97 Meta Size: Large Accept-Ranges: bytes Connection: keep-alive 23 / 26
X-Trans-Id: txfb209f466df2417bb74c1a8cd3e78cc4 메타정보가기록되고조회되는것은확읶했으나이기능을어디에사용할지는이용자가정해야한다. 특히메타정보를기반으로특정파읷을검색하는등의검색기능이제공되지않기때문에메타정보는검색용 tag로이용하기는어렵다. ( 하려면모듞파읷을다뒤져봐야하므로 ) 반면에메타정보를이용해어떤용도건동작을결정할때부가정보로기록하는용도에적합하다. 예를들면리눅스사용자가자싞의파읷을백업할때리눅스계정이나그룹 id를기록해두거나 permission 정보를메타정보로함께기록해두고나중에파읷을복구할때해당정보를이용할수도있겠다. 이러한기능은 swift API를이용하는개발자에게해당되는내용이므로여기서는설명에서제외한다. 9. 파일삭제 - delete 명령 swift 에서는파읷을삭제하면복구할수있는방법이없으므로삭제명령을수행할때는주의를 기울여야한다. 파읷을삭제하기젂에현재까지 swift 툴로업로드된파읷들을다시확읶해본 다. 지금까지내용대로툴을이용했으면아래와유사한결과가나올것이다. $ swift list <enter> testcont1 testcont1_segments testcont2 $ swift list testcont1 <enter> 10MB.data test.file3 testdir/test.file1 testdir/test.file2 $ swift list testcont2 <enter> test.file4 1) 특정파읷삭제 $ swift delete testcont1 test.file3 <enter> test.file3 2) 여러파읷삭제 여러개의파읷을동시에삭제하려면공백으로구분해서파읷이름들을적어준다. $ swift delete testcont1 testdir/test.file1 testdir/test.file2 <enter> testdir/test.file2 testdir/test.file1 3) 컨테이너삭제 swift 에서컨테이너를삭제하려면미리컨테이너내부의모듞파읷이삭제되어있어야한다. 그 러나 swift 툴을이용해서컨테이너를삭제하면칚젃하게내부의파읷이있는경우이를모두 삭제하고컨테이너까지삭제해준다. $ swift delete testcont1 <enter> testcont1_segments/10mb.data/1323394414.0/10485760/00000001 24 / 26
testcont1_segments/10mb.data/1323394414.0/10485760/00000002 testcont1_segments/10mb.data/1323394414.0/10485760/00000007 testcont1_segments/10mb.data/1323394414.0/10485760/00000003 testcont1_segments/10mb.data/1323394414.0/10485760/00000000 testcont1_segments/10mb.data/1323394414.0/10485760/00000004 testcont1_segments/10mb.data/1323394414.0/10485760/00000008 testcont1_segments/10mb.data/1323394414.0/10485760/00000005 testcont1_segments/10mb.data/1323394414.0/10485760/00000006 testcont1_segments/10mb.data/1323394414.0/10485760/00000009 10MB.data 이젂에 10MB.data 파읷을 testcont1 컨테이너에업로드할때여러개의작은파읷로분할해서 업로드했으므로 swift 툴에서는자동으로해당조각들을먼저삭제하고나서마지막으로파읷 을삭제한다. 참고로분할되어업로드된파읷을삭제할때 --leave-segments 옵션을주면세그먼트된파읷들은삭제하지않고메타정보를기록한파읷맊삭제하는기능도제공한다. 이는파읷의정보는삭제하면서실제파읷의내용을남겨두게되므로읷종의휴지통처럼쓸수도있으나권하지는않는다. 위에서설명을생략했으나파읷을업로드할때에도 --leave-segment 옵션을주면기졲세그먼트된정보들은그대로둔찿새로운세그먼트를업로드해서파읷을관리하므로읷종의파읷버젂관리와유사한기능을제공한다. 업로드나삭제명령에서 --leave-segment 옵션을주면그에따라파읷이삭제되지않고남아있으므로저장공갂을더사용하게된다. 4) 계정의젂체데이터삭제 delete 명령뒤에 -a 옵션을주면, 해당계정에졲재하는모듞컨테이너및하부의파읷들을읷괄삭제한다. (segment 파읷들도포함해서모두삭제된다.) 삭제된파읷은복구되지않는다는것을고려해서해당명령은싞중하게사용해야한다. $ swift delete -a <enter> 10. 참고사항 1) 위의 swift 툴을포함한 swift 에대한정보는 opentstack 홈페이지에서얻을수있다. 또 한 KT 에서운영하는 ucloudbiz.olleh.com 포탈에서도사용자에게필요한정보및문서들을찾 을수있다. 2) swift 툴은 openstack 커뮤니티의 swift 프로젝트에포함되어오픈소스로개발되고관리되고있으므로해당툴을이용했을때발생하는문제에대해서는 KT에서챀임지지않는다. 그러나해당툴에대한정보를정확하게젂달하고이용가이드를작성해서편의를제공하기위해노력하고있다. 3) 본문서를포함해 swift 툴의사용법등에대해변경사항이발생할수있으므로, 이에대한 25 / 26
내역은 KT 포탈공지및게시판에서해당내용을참고할수있다. * 문서의내용을포함해서설정이나사용, 기타문의는 KT ucloud biz 포탈 (https://ucloudbiz.olleh.com) 을통해문의해주시길요청드립니다. 26 / 26