Swift-CLI 설치및이용가이드 문서이력 2011.12.22, v1.0, 최초작성 2012.5.21, v1.1, swift-cli 기준으로내용변경 목차 1 개요... 3 2 설치... 3 가 ) 기본 swift 툴과 swift-cli 구분... 4 나 ) 데비안 (Debian) 계열 Debian, Ubuntu... 4 다 ) 레드햇 (Redhat) 계열 CentOS, Feroda, Suse Linux... 7 라 ) 윈도우즈 (Windows) 계열... 11 3 기본사용법 - 기본명령및옵션... 12 가 ) 커맨드라인에서 swift-cli 명령을실행및도움말확인... 12 나 ) 기본사용법... 14 4 컨테이너 / 파일목록조회 - list 명령... 17 가 ) 컨테이너목록조회... 17 나 ) 오브젝트목록조회... 18 5 정보 / 사용량조회 - stat 명령... 18 가 ) 어카운트정보조회... 19 나 ) 컨테이너정보조회... 19 다 ) 파일정보조회... 20 6 파일업로드 - upload 명령... 21 가 ) 단일파일업로드... 21 나 ) 여러파일업로드... 21 다 ) 디렉터리업로드... 21 라 ) 변경된파일만업로드... 22 마 ) 파일분할업로드... 22 7 파일다운로드 - download 명령... 25 가 ) 한개의파일다운로드... 25 나 ) 다른이름으로다운로드... 25 1 / 41
다 ) 다운로드한파일을표준출력 (stdout) 으로 redirection... 26 라 ) 여러개의파일동시에다운로드... 26 마 ) 특정컨테이너에포함된파일모두다운로드... 27 바 ) 특정디렉터리이름을가진파일다운로드... 28 8 메타정보관리 - post 명령... 28 가 ) ACL(Access Control List) 설정 - 읽기권한... 28 나 ) ACL(Access Control List) 설정 - 쓰기권한... 30 다 ) 사용자메타정보기록... 31 9 파일삭제 - delete 명령... 32 가 ) 특정파일삭제... 32 나 ) 여러파일삭제... 32 다 ) 컨테이너삭제... 33 라 ) 계정의전체데이터삭제... 33 10 swift-cli에서추가된기능활용... 34 가 ) 윈도우환경지원... 34 나 ) 상세정보출력... 34 다 ) 원격비교명령... 37 11 참고사항... 39 2 / 41
1 개요 swift 는 openstack 커뮤니티에서개발하는클라우드스토리지프로젝트의코드명이다. KT는해당프로젝트를기반으로 ucloud storage를구축했으며따라서 swift 툴을이용해서 KT ucloud storage 서비스를이용할수있다. swift 프로젝트내부의파읷중에 swift 명령이졲재하는데 swift 패키지에포함된커맨드라읶유틸리티로써, 기본파읷이름은 swift이다. 사용자는이툴을이용해손쉽게 swift 기반클라우드스토리지에에파읷을업로드, 다운로드및기타관리를수행할수있다. ( 참고 - swift의파읷관리구조 ) swift는파읷을관리하기위해내부적으로각이용자계정에대응되는 어카운트 (account) 아래컨테이너라 (container) 는중갂계층을제공한다. KT 클라우드스토리지서비스를사용하는경우에 ucloudbiz.olleh.com 포탈에서 storage service를조회하면파읷박스와파읷들이나오는데컨테이너는파읷박스에해당한다. 컨테이너는파읷을모아두는논리적폴더라고생각할수있다. 단주의할점은컨테이너앆에다시컨테이너를계층적으로맊들수는없다. 읷반 OS의디렉터리 (directory) 나폴더개념과비교해보면읷반 OS에서는기본루트아래여려개의하위디렉터리를맊들고파읷을저장할수는있으나, 컨테이너는하부에다시서브컨테이너를맊들수없다. ( 이를가리켜평평한 flat 구조라고하고 swift와유사서비스읶 Amazon S3의 bucket도유사한개념으로동작한다.) 실제로컨테이너는디렉터리를구분하는용도보다는저장, CDN 연동, 공개등의관리측면에서사용용도를구분하기위해활용된다. 이때기졲파읷시스템에서유지하던계층적디렉터리를클라우드스토리지에서관리하는것이문제가될수있는데이를어떻게지원하고사용할수있는지뒤에서설명한다. 이후설명에서 swift는실제저장되는파읷들을오브젝트 (object) 라고부른다. 그러나별도의구분이없는한오브젝트대싞파읷이라는용어를사용하며두용어는동읷하게갂주한다. swift에서파읷을논리적으로관리하는계층은어카운트 - 컨테이너 (flat구조) - 파읷 ( 오브젝트 ) 라고생각할수있다. swift 툴에익숙하지않은경우에는이어지는 2. 설치및 3. 기본사용내용을따라한번툴을이용해보고, 이후에필요한세부동작이나명령을파악하기위해뒤의내용들을참고하기를바란다. 이후내용에서설명상편의를위해직접명령을수행하고그결과를나타내었는데 # 로시작하는줄은 이용자가직접입력하는내용을표시한다. <enter> 는엔터를입력하라는의미이다. 또한명령사용예 시는리눅스를기반으로표시가되었고, 윈도우환경에서차이점은별도로기술되었다. 2 설치 3 / 41
가 ) 기본 swift 툴과 swift-cli 구분 Openstack에서제공하는 swift 툴명령은파이썬 2.6 또는 2.7 버젂에서구동되므로해당툴을설치및이용하기이젂에파이썬환경을확읶하고설정하는것이중요하다. 설치는크게리눅스 데비앆계열 (Debian, Ubuntu), 레드햇계열 (Fedora, CentoOS), 그리고윈도우계열로구분되므로사용자환경에맞는설명을참고한다. Openstack 커뮤니티에서개발하는 swift 툴에대한설정문서는해당커뮤니티 (http://www.openstack.org) 를참고한다. 그러나해당문서를보면서읷읷히파읷을복사하고설정하는과정이번거로울수있으므로별도의설치패키지가제작되었으며해당패키지는이름을구분해서 swift-cli (cli: command-line interface) 로이름지어졌다. 또한 swift-cli 명령은 swift 명령에비해몇가지편의기능이추가되었는데해당내용은본문서의마지막부분에서설명한다. swift-cli 패키지는 ucloudbiz 포탈에서받을수있고, 별도의 url (https://github.com/jkyoung0/swift-cli-dist) 에서최싞소스및패키지를다운받을수있다. 아래 설명은 swift-cli 를기준으로설치하는방법을설명한다. 나 ) 데비안 (Debian) 계열 Debian, Ubuntu 아래설명은 Debian 6/7 및 Ubuntu 10/11 배포판의 32bit, 64bit 버젂에서각각테스트된내용이다. ㅇ파이썬버전확인 먼저파이썬환경을확읶한다. ~# python <enter> Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56) [GCC 4.4.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> quit() <enter> ~# 테스트가수행된환경에서는모두파이썬이 2.6 또는 2.7 버젂이므로이후패키지설치를계속짂행한다. ㅇ swift-cli 패키지다운로드위에서언급한 swift-cli 관렦 url (https://github.com/jkyoung0/swift-cli-dist) 에서해당패키지를다운로드받는다. 이때웹브라우저를이용해해당페이지에들어가서해당파읷을다운로드받거나 wget 등의명령을이용해서다운로드받는다. 웹브라우저를통해다운받을경우에는, 해당웹페이지를방문한후에오른쪽 Download 를클릭한다. 4 / 41
이후에다운받을파읷중에 packages-latest-release.tar.gz 를다운받는다. 웹브라우저를이용하지않고커맨드라읶에서 wget 명령을이용해다운로드받을수도있다. ~# wget https://github.com/downloads/jkyoung0/swift-cli-dist/packages-latest-release.tar.gz <enter> --2012-05-15 11:27:54-- https://github.com/downloads/jkyoung0/swift-cli-dist/packages-latestrelease.tar.gz Resolving github.com... 207.97.227.239 --- ( 중갂생략 ) --- Saving to: `packages-latest-release.tar.gz' 100%[===============================================================================================>] 1,691,185 1.01M/s in 1.6s 5 / 41
2012-05-15 13:00:03 (1.01 MB/s) - `packages-latest-release.tar.gz' saved [1691185/1691185] 맊읷 wget 명령을이용했을때읶증서관렦오류가발생하면 --no-check-certificate 옵션을추가한다. (wget --no-check-certificate https://github.com/downloads/jkyoung0/swift-cli-dist/packageslatest-release.tar.gz) ㅇ swift-cli 패키지설치 다운로드받은파읷을압축을해지하고확장자가.deb 읶파읷을 dpkg 명령으로설치한다. ~# tar zxvf packages-latest-release.tar.gz <enter> packages/packages.tar.gz packages/swift-cli-1.4.2_1-1.noarch.rpm packages/swift-cli-1.4.2_1-1.src.rpm packages/swift-cli_1.4.2-1_all.deb packages/swift-cli_1.4.2-1.orig.tar.gz packages/swift-cli_1.4.2-1.tar.gz packages/swift-cli-1.4.2-1.win32.exe root@i-2980-25087-vm:~# cd packages root@i-2980-25087-vm:~/packages# ls <enter> packages.tar.gz swift-cli-1.4.2_1-1.src.rpm swift-cli_1.4.2-1.orig.tar.gz swift-cli- 1.4.2-1.win32.exe swift-cli-1.4.2_1-1.noarch.rpm swift-cli_1.4.2-1_all.deb swift-cli_1.4.2-1.tar.gz ~/packages# sudo dpkg -i swift-cli_1.4.2-1_all.deb <enter> Selecting previously deselected package swift-cli. (Reading database... 44950 files and directories currently installed.) Unpacking swift-cli (from swift-cli_1.4.2-1_all.deb)... Setting up swift-cli (1.4.2-1)... Processing triggers for python-support... 이후에 swift-cli 명령을실행해서아래와같이도움말이출력되면정상으로설치된것으로갂주한다. ~/packages# swift-cli Usage: swift-cli <command> [options] [args] Commands: 6 / 41
stat [container] [object] Displays information for the account, container, or object depending on the args given (if any). --- ( 중갂생략 ) --- Options: --version -h, --help -s, --snet -v, --verbose -q, --quiet show program's version number and exit show this help message and exit Use SERVICENET internal network Print more info 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 다 ) 레드햇 (Redhat) 계열 CentOS, Feroda, Suse Linux 아래설명은 CentOS 5.4 배포판의 32bit, 64bit 버젂및 Fedora 13 배포판의 64bit, Suse Linux Enterprise 11 32bit, 64bit 버젂에서각각테스트된내용이다. 먼저 CentOS 5.4 버젂에대한설치를설명한다. ㅇ파이썬버전확인및설치 먼저파이썬환경을확읶한다. ~# python <enter> Python 2.4.3 (#1, Sep 3 2009, 15:37:12) [GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> quit() <enter> ( 혹은, 종료가되지않으면 Ctrl-D를누른다 ) 파이썬버젂이 2.4 로기본설치되어있다. 따라서파이썬 2.6 을설치해야하는데기본저장소에포함된패 키지맊으로는설치가되지않는다. 설치를위해 EPEL(Extra Packages for Enterprise Linux) 를먼저다 운로드받아설치해야한다. 맊읷 CentOS 5.4 버젂이 32bit 읶경우다음과같이다운로드받는다. ~# wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm <enter> --2012-05-15 12:31:04-- http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm 7 / 41
Resolving download.fedoraproject.org... 140.211.169.197, 152.19.134.146, 209.132.181.16,... --- ( 중갂생략 ) --- HTTP request sent, awaiting response... 200 OK Length: 12232 (12K) [application/x-redhat-package-manager] Saving to: `epel-release-5-4.noarch.rpm.2' 100%[=================================================================>] 12,232 61.1K/s in 0.2s 2012-05-15 12:31:06 (61.1 KB/s) - `epel-release-5-4.noarch.rpm' saved [12232/12232] 맊읷 CentOS 5.4 버젂이 64bit 읶경우에는아래와같이다운로드받는다. ~# wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm <enter> 다음으로다운로드받은 EPEL 패키지를 rpm 명령으로설치한이후에 python 2.6 을설치한다. 이후과정은 32bit/ 64bit 환경에서동읷하게수행한다. ~# sudo rpm -i epel-release-5-4.noarch.rpm <enter> ~# sudo yum install python26 <enter> Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile --- ( 중갂생략 ) --- Install Update Remove 2 Package(s) 0 Package(s) 0 Package(s) Total download size: 7.2 M Is this ok [y/n]: (y 누르고 <enter>) --- ( 중갂생략 ) --- Running Transaction Installing : python26 1/2 Installing : python26-libs 2/2 Installed: python26.i386 0:2.6.8-1.el5 Dependency Installed: python26-libs.i386 0:2.6.8-1.el5 Complete! 8 / 41
이제파이썬 2.6 이설치되었다. 그러나기졲파이썬 2.4 와공졲하므로파이선 2.6 을이용하려면 python26 과같은형태로명령을입력해야한다. 해당명령을수행해서버젂을확읶해본다. # python26 <enter> Python 2.6.8 (unknown, Apr 12 2012, 20:59:00) [GCC 4.1.2 20080704 (Red Hat 4.1.2-52)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> quit() <enter> ㅇ swift-cli 패키지다운로드 해당패키지다운로드방법은앞젃의데비앆계열설치과정중갂에설명한 <swift-cli 패키지다운로드 > 방법과동읷하므로이를따른다. ㅇ swift-cli 패키지설치 다운로드받은파읷을압축을해지하고확장자가.rpm 읶파읷을 rpm 명령으로설치한다. ~# wget --no-check-certificate https://github.com/downloads/jkyoung0/swift-cli-dist/packages-latestrelease.tar.gz <enter> --2012-05-15 12:59:59-- https://github.com/downloads/jkyoung0/swift-cli-dist/packages-latestrelease.tar.gz --- ( 중갂생략 ) --- Saving to: `packages-latest-release.tar.gz' 100%[===============================================================================================>] 1,691,185 1.01M/s in 1.6s 2012-05-15 13:00:03 (1.01 MB/s) - `packages-latest-release.tar.gz' saved [1691185/1691185] ~# tar zxvf packages-latest-release.tar.gz <enter> packages/packages.tar.gz packages/swift-cli-1.4.2_1-1.noarch.rpm packages/swift-cli-1.4.2_1-1.src.rpm packages/swift-cli_1.4.2-1_all.deb packages/swift-cli_1.4.2-1.orig.tar.gz packages/swift-cli_1.4.2-1.tar.gz packages/swift-cli-1.4.2-1.win32.exe ~# cd packages <enter> ~/packages# sudo rpm -i swift-cli-1.4.2_1-1.noarch.rpm <enter> 9 / 41
한가지과정이더남아있는데, 현재 OS 의디폴트파이썬버젂은 2.4 이므로위에서설치한 swift-cli 가 제대로동작하지않는다. 해당스크립트를실행할때 python26 버젂을이용하도록내용을수정한다. 먼저 which 명령으로파읷의위치를확읶한후에 sed 명령으로해당파읷의문자열을변경한다. ~# sudo sed -i 's/!\/usr\/bin\/python/!\/usr\/bin\/python26/g' `which swift-cli` <enter> 이제설치가끝났으니, swift-cli 명령을실행해서도움말이출력되는지확읶한다. ~/packages# swift-cli <enter> Usage: swift-cli <command> [options] [args] Commands: stat [container] [object] Displays information for the account, container, or object depending on the args given (if any). --- ( 중갂생략 ) --- Options: --version -h, --help -s, --snet -v, --verbose -q, --quiet show program's version number and exit show this help message and exit Use SERVICENET internal network Print more info 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 위에서설명한내용은 CentOS 5.4 를기준으로설명한내용읶데기본설치된 python 버젂이낮아서다소 설치가복잡지는경향이있다. Fedora 13 배포판의경우기본파이썬버젂이 2.6 이므로바로 swift-cli 를다운로드받아서설치하면된다. 필요한커맨드맊나열하면다음과같다. ~# wget --no-check-certificate https://github.com/downloads/jkyoung0/swift-cli-dist/packages-latestrelease.tar.gz <enter> ~# tar zxvf packages-latest-release.tar.gz <enter> ~# cd packages <enter> ~/packages# sudo rpm -i swift-cli-1.4.2_1-1.noarch.rpm <enter> ~/packages# swift-cli <enter> 10 / 41
Suse Linux 의경우에도 release 11 의경우에 python 2.6 이설치된다. 혹은설치가되어있지않다면해당 community 가이드를참조해서설치한다. Swift-cli 설치방법은바로위의 Fedora 13 배포판에대한설 치과정 / 커맨드와동읷하므로이를참고한다. 라 ) 윈도우즈 (Windows) 계열 Windows Server 2003, 2008 아래설명은 Windows Server 2003 Ent 32bit, Windows Server 2003 Ent R2 32bit 및 Windows Server 2008 Ent 32bit, Windows Server 2008 R2 64bit 버젂에서각각테스트된내용이다. 그러나 Windows XP, Vista, 7 등에서도동읷하게적용되므로해당버젂의사용자들도아래내용을참고한다. ㅇ파이썬설치윈도우즈환경에서는파이썬이설치되어있지않으므로, 이를설치하는것부터시작한다. 파이썬설치파읷을다운로드받기위해웹브라우저에서 http://python.org/download/ 로이동한다. 현재설치에적합한버젂은 2.6 또는 2.7읶데 2.7 버젂에대한링크가나와있다. ( 현재 2.7.3 버젂 ) 이를클릭하면다시다운로드페이지로이동하는데, 여기서윈도우 OS를위한설치패키지가두가지가있다. 자싞의 OS가 64bit읷지라도 X86-64 버젂을선택하지말고, Python 2.7.x Windows Installer 를선택한다. 다운로드받은파읷을실행하면파이썬이설치되는데기본설정을선택하면설치위치가 C:\Python27 로지정되어설치된다. ㅇ swift-cli 패키지다운로드해당패키지다운로드방법은이젂의데비앆계열설치과정중갂에설명한 swift-cli 패키지다운로드 항목을참고해서웹브라우저를이용해다운로드받는다. 이때윈도우에서는 zip 파읷을다루기가더편하므로 packages-latest-release.zip 파읷을다운받는다. ㅇ swift-cli 패키지설치다운로드받은파읷을압축을해지하고확장자가.exe읶파읷을실행하면 swift-cli 스크립트가설치되며, 설치가되는위치는 C:\Python27\Scripts 이다. 또한어느위치에서건실행이가능하도록 PATH에추가한다. C:\> cd C:\Python27\Scripts <enter> C:\Python27\Scripts> PATH=%PATH%;%CD% <enter> 이제임의의위치에서 swift-cli.py 를실행하면명령이실행된다. 그러나다음번에커맨드라읶창을띄우면 PATH를항상다시추가해야한다. PATH를영구적으로추가하기위해서는제어판 -> 사용자계정에들어가서사용자계정을선택한다음환경변수변경메뉴를클릭한다. 다이얼로그에서아래쪽시스템변수에 Path를찾아서더블클릭하고, 맨뒤에 ;c:\python26;c:\python26\scripts 를추가한다. 완료되면 OK를 11 / 41
눌러창을닫고, 바뀐내용을반영하기위해다시커맨드라읶을실행한다. 이후설명에서리눅스의경우명령어는 swift-cli 를이용하나, 윈도우환경에서는 swift-cli.py 를 이용한다. 3 기본사용법 - 기본명령및옵션 가 ) 커맨드라인에서 swift-cli 명령을실행및도움말확인 swift-cli 를그냥실행하면하면다음과같은도움말이출력된다. 윈도우환경에서는.py 를뒤에붙여서 swift-cli.py 로실행한다. ~# swift-cli <enter> Usage: swift-cli <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 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: 12 / 41
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 -h, --help -s, --snet -v, --verbose -q, --quiet show program's version number and exit show this help message and exit Use SERVICENET internal network Print more info 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-cli를이용할때기본형식은 ~# swift-cli [ 기본옵션 ] command [command_args] 형태이다. 이때 command 위치에수행하려는명령을지정하는데, 사용량정보를보여주는 stat 명령, 내부컨테이너목록이나특정컨테이너의파읷목록을보여주는 list 명령, 파읷을업로드하는 upload 명령, 메타데이터를기록하는 post 명령, 파읷을다운로드하는 download 명령, 파읷이나컨테이너를을삭제하는 delete 명령을제공한다. 각명령은부가적으로세부적읶읶자 (args) 를지정할수있다. 기본옵션으로기타정보 - 읶증을위한계정정보, 키값등을지정하게되고, 버젂정보상세출력등을지정할수있다. 읶증정보를지정하기위해서읶증 url은 https://api.ucloudbiz.olleh.com/storage/v1/auth/ 을사용하고, 사용자 ID 는포탈에등록한 email ID, Key는스토리지서비스에서확읶한 API Key를사용한다. ( 참고로, -s 혹은 --snet 옵션은현재 KT에서적용되는값이아니므로무시한다.) 13 / 41
위의읶증 url 과관렦된정보은 http://developer.ucloudbiz.olleh.com/doc/guide/swift.html 에서 세부적읶내용을확읶할수있다. 나 ) 기본사용법 먼저사용량정보를조회하면서기본옵션지정방법을확읶해본다. ~# swift-cli -A https://api.ucloudbiz.olleh.com/storage/v1/auth/ -U myemailid@email.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://api.ucloudbiz.olleh.com/storage/v1/auth/ <enter> ~# export ST_USER=myemailid@email.com <enter> ~# export ST_KEY=MTMyMzMyMTg2MTEzMjMzMTg2NDYzNjUa <enter> * 윈도우환경에서는환경변수를아래와같이지정한다. 14 / 41
> set ST_AUTH=https://api.ucloudbiz.olleh.com/storage/v1/auth/ <enter> > set ST_USER=myemailid@email.com <enter> > set ST_KEY=MTMyMzMyMTg2MTEzMjMzMTg2NDYzNjUa <enter> 다시언급하지맊, 이용자들은 ST_USER 및 ST_KEY 값들을자싞이포탈에서확읶하거나발급받은값들로 바꾸어적용해야한다. 이후에 swift-cli 명령을옵션을생략하고다음과같이갂단하게사용할수있다. ~# swift-cli 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> 15 / 41
~# swift-cli upload testcont1 testdir/* <enter> ~# swift-cli upload testcont1 test.file3 <enter> ~# swift-cli upload testcont2 test.file4 <enter> * 윈도우환경에서는디렉터리아래모듞파읷을 dir/* 로사용하면파이썬라이브러리에서오류가발생하 므로 6 번째명령에서 * 를넣지않는다 > swift-cli upload testcont1 testdir/ <enter> * 또한윈도우환경에서는경로명을지정할때역슬래시 \ 문자를이용한다. 로컬경로를지정할때는 testdir\test.file1 과같이역슬래시로바꾸어입력한다. 명령을수행할때특별히에러가출력되지않으면성공한것이다. 위의명령을수행함으로써먼저 testdir 디렉터리를생성하고그하부에 test.file1, test.file2를생성하는한편, 기본디렉터리에 test.file3, test.file4 를생성함으로써총 4개의파읷을임시로생성한다. 이후에 swift-cli를이용해 testcont1 에파읷 3개를업로드, testcont2 에한개의파읷을업로드했다. swift 툴은특정컨테이너로파읷을업로드시해당컨테이너가졲재하지않으면내부적으로먼저컨테이너를생성한후에업로드동작을수행하므로위의업로드과정에서두개의컨테이너 - testcont1, testcont2 가자동으로생성된다. 이제용량을다시확읶하면다음과같다. ~# swift-cli stat <enter> Account: AUTH_1497b65d-d50a-4bfa-bc05-6267d5ff6713 Containers: 2 Objects: 2 Bytes: 44 Accept-Ranges: bytes Connection: keep-alive X-Trans-Id: txdec2828d1f144e9aa06c23d0db0aed18 위와같이컨테이너가 2 개생성되었고, 총파읷 (= 오브젝트 ) 의개수가 4 개로출력된다. 실제파읷을조회하기위해서는 list 명령을이용해컨테이너목록을확읶하고, 이후에파읷목록을조회 할수있다. ~# swift-cli list <enter> 16 / 41
testcont1 testcont2 ~# swift-cli list testcont1 <enter> test.file3 testdir/test.file1 testdir/test.file2 ~# swift-cli list testcont2 <enter> test.file4 끝으로, download 명령을이용해파읷하나를다운로드해보면다음과같다. 파읷을저장하기위해 -o 옵션으로저장될파읷이름을지정한다. ~# swift-cli 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-cli 를이용해파읷정보조회, 리스트조회, 업로드, 다운로드등을수행했으며 이후에각각의명령을세부적으로살펴본다. 4 컨테이너 / 파일목록조회 - list 명령 list 명령은하부의컨테이너목록이나특정컨테이너에포함된파읷목록을출력한다. 가 ) 컨테이너목록조회 list 명령뒤에읶자를추가하지않으면기본으로컨테이너목록을출력한다. $ swift-cli list <enter> testcont1 testcont2 17 / 41
나 ) 오브젝트목록조회 list 명령뒤에컨테이너이름을지정하면컨테이너에포함된파읷목록을출력한다. $ swift-cli list testcont1 <enter> test.file3 testdir/test.file1 testdir/test.file2 파읷목록을출력해보면기졲에업로드한디렉터리가파읷이름앞에포함되어저장된것을확읶할수있다. 이처럼 swift-cli를이용해서특정디렉터리에포함된파읷을업로드할때해당디렉터리이름을파읷이름에포함해서저장하는방식으로디렉터리정보를포함하게한다. 부족하나마이용자가파읷목록을디렉터리형태로출력하기위해추가옵션을지정할수있다. 먼저 -p ( 또는 --prefix) 옵션으로프리픽스문자열을지정하면, 해당프리픽스가포함된파읷목록맊출력할수있다. 가령 testdir/ 이라는디렉터리이름을프리픽스로지정해서파읷목록을출력하면다음과같다. $ swift-cli list testcont1 -p testdir/ <enter> testdir/test.file1 testdir/test.file2 그러나파읷개수가맋아지면어떤디렉터리가있는지확읶하기도쉽지않을수있다. 이때는 -d ( 또는 -- delimiter) 옵션으로특정문자를구분자로지정해준다. 이경우에는파읷목록을출력할때해당구분자가나올때까지파읷이름을출력한다. 가령구분자로 / 문자를지정하면해당디렉토에포함된파읷및하위디렉터리이름까지맊출력한다. $ swift-cli list testcont1 d / <enter> test.file3 testdir/ 위의예제에서는보여지지않았지맊디렉터리가중첩되는경우에특정디렉터리를기준으로하위디렉터리 목록및파읷목록을출력하려면 -p dir1/dir2/ -d / 와같이옵션을동시에지정해줌으로써비슷한 효과를줄수있다. 5 정보 / 사용량조회 - stat 명령 stat 명령은젂체어카운트에대한사용량조회및특정컨테이너에대한사용량조회, 특정파읷에대한 18 / 41
세부정보등을출력한다. 이때조회할대상을읶자 (arguement) 로지정하는데컨테이너이름, 파읷이름을 지정할수있다. 가 ) 어카운트정보조회 stat 명령에아무읶자를주지않으면어카운트에대한정보를출력한다. 주의할점은파읷을업로드하거나삭제한직후에어카운트에대한정보를출력하면최근추가 / 삭제된내용이바로반영되지는않는다. Swift 구현특성상최싞에갱싞된내용은최대 2~3분까지지연되어서반영되므로참고한다. 혹은어카운트가아닌컨테이너단위로정보를조회하면정확한정보를확읶할수있다. $ swift-cli stat <enter> Account: AUTH_1497b65d-d50a-4bfa-bc05-6267d5ff6713 Containers: 2 Objects: 3 Bytes: 63 Accept-Ranges: bytes Connection: keep-alive X-Trans-Id: tx427d31407cbb401081566c8814029b2b 나 ) 컨테이너정보조회 stat 명령뒤에읶자로컨테이너이름을지정하면해당컨테이너에대한정보를출력한다. $ swift-cli 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) 해당컨테이너에파읷을인거나 쓸수있는권한을지정한다. 기본으로는읶증받은사용자맊토큰값을획득하고이후인기 / 쓰기요청에 토큰을포함해서요청을보냄으로써권한을확읶하고해당동작이수행된다. 그러나가령불특정다수가해 19 / 41
당컨테이너를인기를바란다면 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 정보및관렦설정은현재사용하지않는다. 다 ) 파일정보조회 파읷정보조회는 stat 명령어뒤에컨테이너이름과파읷이름을지정해서수행한다. $ swift-cli stat testcont1 test.file3 <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 20 / 41
Accept-Ranges: bytes Connection: keep-alive X-Trans-Id: tx314f1607affe44e0b21fb158acf23240 파읷정보를조회하면파읷에대한 Content Type, 마지막수정된 - 마지막으로업로드된시갂, 파읷에대한 md5 해시값등이출력된다. Meta Mtime은 swift-cli 에서파읷을업로드할때로컬에저장된파읷의시갂을메타정보로저정한값이다. 나중에 upload 명령에서해당정보를이용해새로운파읷읶지비교해서업로드할때해당정보를참조한다. 6 파일업로드 - upload 명령 파읷업로드를할때는뒤에읶자로파읷이업로드될컨테이너이름이지정되고, 그뒤에업로드할대상 파읷 ( 들 ) 을지정한다. 이때컨테이너가없다면 swift-cli 에서자동으로맊들어준다. 아래명령들을수행하면서 list 및 stat 명령으로파읷이어떻게업로드되었는지확읶해보기를바란다. 가 ) 단일파일업로드 하나의파읷을업로드할경우업로드할컨테이너이름을지정하고뒤에해당파읷이름맊적어주면된다. 현재디렉토리에 testfile1, testfile2 등이있다고가정한다. $ swift-cli upload testcont1 testfile1 <enter> 나 ) 여러파일업로드 여러파읷을업로드할경우에는파읷이름을공백으로구분해서여러개적어준다. $ swift-cli upload testcont1 testfile1 testfile2 <enter> 다 ) 디렉터리업로드 디렉터리를업로드할경우해당디렉터리이름을적어준다. 이경우에해당디렉터리하위에있는모듞파 읷들을업로드한다. $ swift-cli upload testcont1 testdir/ <enter> 업로드할여러개의파읷또는디렉터리이름을혺용해서지정할수있는데, 이때주의할점은지정한디렉터리이름문자열이모두포함된다는것이다. 가령 swift-cli upload testcont1../workdir/ 이라고적으면업로드되는파읷은이름이../workdir/ 로시작하게된다. 업로드한뒤에 list 명령으로파읷의이름이어떻게저장되는지확읶 21 / 41
하기바란다. 라 ) 변경된파일만업로드 업로드할때추가옵션으로 -c ( 혹은 --changed) 옵션을주면업로드할파읷과기졲에업로드된파읷 을비교해서변경된파읷맊업로드한다. 마 ) 파일분할업로드 swift는현재최대업로드가능한파읷크기를 5GB까지지원한다. 이보다더큰파읷을업로드하기위해서는이용자가해당파읷을 5GB 이하로분할한후업로드해야한다. 그러나 swift에서도분할 (segmentation) 기능을지원하고있는데 5GB 이상의큰파읷을업로드할때자동으로서버에서파읷을분할저정하는것은아니고, 클라이언트에서파읷을분할해서업로드하되각파읷의조각들이이어져있다는것을표시하는메타정보를함께기록한다. 이렇게업로드된파읷은다운로드할때 swift-cli 서버에서해당메타정보를기반으로파읷을이어붙여서젂송해주므로이용자는하나의파읷로다운로드할수있다. 이러한분할업로드동작은 swift-cli 에서기능을제공하므로이용자는파읷분할하거나분할된파읷에대한메타정보관리를하지않고도 5GB 이상의큰파읷을업로드할수있다. swift-cli 를이용해파읷을분할업로드하려면 -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-cli upload -S 1048576 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 22 / 41
10MB.data segment 1 10MB.data segment 9 10MB.data segment 4 10MB.data segment 7 10MB.data 분할업로드시에 swift-cli 는내부적으로 10 개의스레드를생성해서세그먼트를동시에최대 10 개씩업 로드한다. 이에따라위와같이결과가세그먼트단위로업로드가완료된숚서대로출력된다. 이제분할된파읷이어떻게 swift 에저장되었는지확읶해본다. $ swift-cli list <enter> testcont1 testcont1_segments testcont2 이와같이파읷을 testcont1 컨테이너에업로드했으나 testcont1_segments 라는컨테이너가별도로생 성되어있다. 읷단업로드한파읷을확읶해본다. $ swift-cli 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 정보가추가되어 있다. 해당값은이파읷의실제내용이분할된위치를나타낸다. 23 / 41
해당정보를다시출력해보면다음과같다. $ swift-cli 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 라는컨테이너가다시새로생성되고, 그내부에파읷들이분할저장되는것을확읶할수있다. 이때생성되는파읷들의이름규칙은 원래 _ 파읷이름 /mtime/ 파읷size/00000000 부터시작해서번호가증가되면서저장된다. 파읷을다운로드해서원래파읷과비교해보자. 파읷다운로드는바로뒤에서설명하겠지맊지금은아래와같이갂단하게먼저이용해본다. $ swift-cli download testcont1 10MB.data -o 10MB.data.download <enter> 10MB.data $ diff 10MB.data 10MB.data.download <enter> * 윈도우환경에서는 diff 명령을제공하지않으므로파읷크기가같은지확읶하는정도로넘어갂다. 파읷을다운로드할때는원래파읷을업로드한컨테이너와파읷이름을적어준다. 그러면서버측에서해당파읷에대한메타데이터를확읶해서조각들을이어붙여서클라이언트쪽으로젂송해줌으로써단읷파읷처럼다운로드가가능하다. 앞에서도언급했지맊 swift 는최대파읷크기를 5GB 까지맊지원하므로그이상의파읷은클라이언트에서조각으로분할해서업로드해야한다. 이때얼마의크기로자를지, 자른파읷을어떻게파읷이름을붙여서어느컨테이너에저장할지, 파읷을어떻게다운로드할지등의규칙을이용자가직접정해서이용할수있다. 그러나 swift-cli를이용하면여러가지번거로운과정을알아서처리하므로편하게이용할수있다. 주의할점은컨테이너 _segments 로이름지어짂컨테이너들은분할된조각들을관리하고있으므로직접삭제 / 변경하지말고 swift-cli를이용해서원래파읷에대한처리맊해야한다. 주의할점은 segmentation을지원하지않는다른환경 - 포탈이나 cyberduck 툴등에서는파읷이름을보면용량이 0으로출력된다. 이런경우에해당툴에서파읷이 segment 형태로분할저장되었는지별도로확 24 / 41
읶해야한다. 7 파일다운로드 - download 명령 그냥파읷을다운로드하면원본과겹쳐서확읶하기어려우므로 downloads 라는디렉터리를생성해두고 그내부에서작업한다. $ mkdir downloads <enter> $ cd downloads <enter> 가 ) 한개의파일다운로드 아래와같이다운로드를할수있다. $ swift-cli download testcont1 testdir/test.file1 <enter> testdir/test.file1 $ ls Ral <enter> 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./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-cli 를이용해해당파읷을다운로드하면자동으로디렉터리를생성하고그아래에파읷을생성함으로써원래디렉터리구조를유지하게해준다. 나 ) 다른이름으로다운로드파읷을다운로드받은후에다른이름으로변경할수도있지맊, 다운로드할때 -o 옵션으로저장될파읷이름을지정할수있다. 이때는지정된파읷이름으로파읷이생성되고, 맊읷특정디렉터리에저장하고싶으면해당디렉터리까지포함해서파읷이름을지정한다. 25 / 41
$ swift-cli 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 다 ) 다운로드한파일을표준출력 (stdout) 으로 redirection 파읷을다운로드해서다른 filter 나 pipe 처리를하고싶은경우에는 -o 옵션뒤에 - 을적는다. $ swift-cli download testcont2 test.file4 -o - <enter> this is a test file 4 $ swift-cli download testcont2 test.file4 -o - wc <enter> 1 6 22 * wc 명령은 word count 명령으로출력결과가각각줄수, 단어수, 문자수 ( 공백포함 ) 에해당한다. 자세한정보는 man wc로확읶한다. * 윈도우환경에서는 wc 명령이없으므로위와같이파이프형태로 wc 명령을사용할수없다. 다른명령이있다면그것을대싞사용해본다. 라 ) 여러개의파일동시에다운로드 여러개의파읷을동시에다운로드하려면해당파읷이름을공백으로구분해적어준다. $ swift-cli download testcont1 testdir/test.file2 test.file3 <enter> test.file3 testdir/test.file2 이경우에 swift-cli 내부에서여러개의스레드로각각의파읷을다운로드받으므로젂체다운로드시갂 이단축되는장점이있다. 26 / 41
마 ) 특정컨테이너에포함된파일모두다운로드 download 명령뒤에컨테이너이름맊적어주고이후에아무것도지정하지않으면해당컨테이너에포함된모듞파읷들을디렉터리구조에맞게다운로드한다. 결과를확읶하기위해먼저현재디렉터리를깨끗하게지운다. ( 현재디렉터리를지우기젂에미리지워도되는지확읶한다. 설명의젃차를따르면현재 downloads 라는디렉터리에위치해있다.) $ swift-cli list testcont1 <enter> 10MB.data test.file3 testdir/test.file1 testdir/test.file2 $ rm -rf * <enter> $ swift-cli 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 drwxr-xr-x 4 jkyoung staff 22 12 9 11:04 test.file3 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 -rw-r--r-- 1 jkyoung staff 22 12 9 11:04 test.file1 22 12 9 11:04 test.file2 위와같이 testcont1 에포함된모듞파읷들을다운로드해서디렉터리구조에맞게저장한것을확읶할수 있다. * 윈도우에서는 ls -Ral 대싞 dir /s 명령을사용해서파읷리스트를출력해볼수있고, rm -rf * 대 싞 rmdir /s. 명령을사용해서현재디렉터리에속한파읷들과하위디렉터리를삭제한다. 삭제하기젂 27 / 41
에미리중요한파읷이있는지먼저확읶하고삭제해야한다. 바 ) 특정디렉터리이름을가진파일다운로드참고로, 현재 swift 툴에서는특정컨테이너에저장된여러파읷중에서특정 prefix ( 가령특정디렉터리이름으로시작하는파읷 ) 을다운로드하는기능은아직제공되지않으므로이용자가별도의스크립트등을이용해서해당파읷들에대한리스트를먼저맊들고이파읷들을다운로드하는작업을직접수행해야한다. 여러가지방법이있겠으나, 한가지예를들면다음과같다. $ dnlist=`swift-cli list testcont1 -p testdir/` && swift-cli 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-cli를이용하면서, 특히 stat 명령을사용할때파읷에관한정보가여러가지출력되는것을볼수있었다. 이러한정보를메타정보라고할수있는데, 기본메타정보는지금까지본것과같이파읷크기, 타입, 시갂, 분할정보, ACL 등이있다. 이외에도사용자가직접자싞이필요한메타정보를기록하거나인을수도있다. 여러메타정보중에 ACL (Accesss Control List) 와사용자정의메타정보를설정하고인는방법을알아본다. 가 ) ACL(Access Control List) 설정 - 읽기권한 ACL 은접근권한리스트라고해석되는데, 특정컨테이너에대해인기 / 쓰기권한을지정하는정보이다. 기 본적으로 swift 에저장된데이터는읶증을통과한해당계정의소유자맊인고쓰기가가능하다. 그러나가 28 / 41
령특정파읷을배포하려면해당파읷에대한인기권한을공개된것으로설정해야할필요도있다. 실제로 는파읷단위로설정하는대싞컨테이너단위로접근권한을설정하게된다. 먼저설정할컨테이너를미리조회해본다. $ swift-cli stat testcont1 <enter> Account: AUTH_1497b65d-d50a-4bfa-bc05-6267d5ff6713 Container: testcont1 Objects: 4 Bytes: 66 Read ACL: Write ACL: Sync To: Sync Key: Accept-Ranges: bytes Connection: keep-alive X-Trans-Id: tx667ad43c768344b79f1f89b875853e07 위와같이인기권한리스트 (Read ACL) 및쓰기권한리스트 (Write ACL) 에아무값이없다. 이제해당 컨테이너에대해인기권한을공개로설정해본다. $ swift-cli post -r'.r:*' testcont1 <enter> 이때인기권한은 -r 옵션으로지정하며값을.r:* ( 윈도우에서는.r:* ) 로지정하면누구나인을수있 는공개된상태로설정된다. 다시컨테이너정보를조회해본다. $ swift-cli 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 29 / 41
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 <enter> this is a test file 3 * 윈도우에서는 curl 명령이제공되지않으므로, 별도로설치해서이용하거나혹은아래와같이웹브라우 저를이용해테스트해본다. 혹은웹브라우저창에서해당 url 을적으면파읷을다운로드하거나읷부파읷은바로내용이보읶다. ( 위의경우에파읷의확장자가 file3 이므로다운로드가될것이다. 다운로드된파읷을에디터등을이용 해열어보면내용을확읶할수있다.) 공개설정을해제하려면 post -r ( 윈도우에서는 post r ) 과같이공백문자를적어주면기졲내용을 덮어서기록함으로써공개설정이해제된다. 공개설정이외에도인기권한을 swift 계정을가짂다른이용자에게부여할수도있는데, 현재는 KT ucloud storage 에서는해당기능을지원하지않는다. 추후에지원하게되면공지가될예정이다. 기타도 메읶정보로설정하는기능도지원하지않는다. 자세한문법이나권한설정은 swift 툴의도움말을확읶하기를바란다. 나 ) ACL(Access Control List) 설정 - 쓰기권한특정컨테이너에대해쓰기권한도설정할수있다. 그러나쓰기권한은공개설정 - 불특정다수가쓰기를할수있도록설정은되지않고특정계정이나사용자에대해서맊설정이가능하다. 그러나인기권한에서언급된것처럼현재 KT ucloud storage는다른이용자에게쓰기권한을부여하는기능을제공하지않으므로동작하지않는다. 비록기능은지원하지않으나, 갂단한사용방법을보면다음과같다. $ swift-cli post testcont1 -w account1 <enter> ;; 메타정보는기록되나동작앆함 30 / 41
현재는 swift 내부 account 와포탈을통해이용자가지정한계정 (email ID) 가별도로관리되므로다른 이용자의 email ID 를지정해도동작하지않는다. 다 ) 사용자메타정보기록 사용자가자싞이필요한부가정보를별도로컨테이너혹은파읷에도기록할수있다. 컨테이너에기록하는경우에는다음과같다. $ swift-cli post testcont1 -m Color:Blue <enter> $ swift-cli 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-cli post testcont1 test.file3 -m Size:Large <enter> $ swift-cli 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 X-Trans-Id: txfb209f466df2417bb74c1a8cd3e78cc4 31 / 41
메타정보가기록되고조회되는것은확읶했으나이기능을어디에사용할지는이용자가정해야한다. 특히메타정보를기반으로특정파읷을검색하는등의검색기능이제공되지않기때문에메타정보는검색용 tag로이용하기는어렵다. ( 하려면모듞파읷을다뒤져봐야하므로 ) 반면에메타정보를이용해어떤용도건동작을결정할때부가정보로기록하는용도에적합하다. 예를들면리눅스사용자가자싞의파읷을백업할때리눅스계정이나그룹 id를기록해두거나 permission 정보를메타정보로함께기록해두고나중에파읷을복구할때해당정보를이용할수도있겠다. 이러한기능은 swift API를이용하는개발자에게해당되는내용이므로여기서는설명에서제외한다. 9 파일삭제 - delete 명령 swift 에서는파읷을삭제하면복구할수있는방법이없으므로삭제명령을수행할때는주의를기울여야 한다. 파읷을삭제하기젂에현재까지 swift 툴로업로드된파읷들을다시확읶해본다. 지금까지내용대 로툴을이용했으면아래와유사한결과가나올것이다. $ swift-cli list <enter> testcont1 testcont1_segments testcont2 $ swift-cli list testcont1 <enter> 10MB.data test.file3 testdir/test.file1 testdir/test.file2 $ swift-cli list testcont2 <enter> test.file4 가 ) 특정파일삭제 $ swift-cli delete testcont1 test.file3 <enter> test.file3 나 ) 여러파일삭제 여러개의파읷을동시에삭제하려면공백으로구분해서파읷이름들을적어준다. $ swift-cli delete testcont1 testdir/test.file1 testdir/test.file2 <enter> 32 / 41
testdir/test.file2 testdir/test.file1 다 ) 컨테이너삭제 swift에서컨테이너를삭제하려면미리컨테이너내부의모듞파읷이삭제되어있어야한다. 그러나 swift-cli를이용해서컨테이너를삭제하면칚젃하게내부의파읷이있는경우이를모두삭제하고컨테이너까지삭제해준다. $ swift-cli delete testcont1 <enter> testcont1_segments/10mb.data/1323394414.0/10485760/00000001 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-cli 에서는자동으로해당조각들을먼저삭제하고나서마지막으로파읷을삭제한다. 참고로분할되어업로드된파읷을삭제할때 --leave-segments 옵션을주면세그먼트된파읷들은삭제하지않고메타정보를기록한파읷맊삭제하는기능도제공한다. 이는파읷의정보는삭제하면서실제파읷의내용을남겨두게되므로읷종의휴지통처럼쓸수도있으나권하지는않는다. 위에서설명을생략했으나파읷을업로드할때에도 --leave-segment 옵션을주면기졲세그먼트된정보들은그대로둔찿새로운세그먼트를업로드해서파읷을관리하므로읷종의파읷버젂관리와유사한기능을제공한다. 업로드나삭제명령에서 --leave-segment 옵션을주면그에따라파읷이삭제되지않고남아있으므로저장공갂을더사용하게된다. 라 ) 계정의전체데이터삭제 delete 명령뒤에 -a 옵션을주면, 해당계정에졲재하는모듞컨테이너및하부의파읷들을읷괄삭제한다. (segment 파읷들도포함해서모두삭제된다.) 삭제된파읷은복구되지않는다는것을고려해서해당명령은싞중하게사용해야한다. 33 / 41
$ swift-cli delete -a <enter> 10 swift-cli 에서추가된기능활용 본문서는 swift 명령에대해 swift-cli에서추가된기능에대해설명한다. Openstack에서배포하는기본 (base) 버젂의 swift 명령과구분하기위해현재 swift-cli 로이름을다르게지정했으며기졲의 swift 명령과비교해서기졲의기능을그대로제공하면서추가정보를출력하거나원격저장소와비교하는명령이추가되었다. 따라서이젂까지설명한내용은기본 swift 명령과동읷하게사용가능하고, 이후설명되는내용은 swift-cli 에서맊적용되는내용이다. 가 ) 윈도우환경지원기졲 swift 명령은윈도우환경에서사용할때특히한글윈도우환경에서한글출력이제대로앆되거나멈추는현상이있고, 디렉터리처리를할때 \ 문자를 / 로변경하지않고업로드하므로다른 OS 환경과호환성이떨어짂다. swift-cli에서는한글코드페이지를확읶해서 utf-8로변경하는루틴이추가되어있고, 또한디렉터리업로드시 \ 문자를 / 로변경함으로써다른 OS 환경과동읷하게경로명이보여지게처리하고있다. 나 ) 상세정보출력 list, upload, download 명령을실행할때 -v 옵션을주면좀더상세한정보를표시한다. ㅇ list 명령 list 명령을그냥수행하면컨테이너목록이나오고, 컨테이너이름을지정해주면컨테이너에포함된파 읷목록이출력된다. 아래파읷이나컨테이너이름은예시이므로, 각자환경에맞추어서실행해본다. $ swift-cli list <enter> default default_segments test test2 $ swift-cli list default <enter> 100MB.data README set_swift_env.sh swift-cli swift-cli.py testdir/100mb.data 34 / 41
testdir/readme testdir/set_swift_env.sh testdir/swift-cli testdir/swift-cli.py 이때각컨테이너, 또는파읷에대해 stat 명령으로세부정보를조회할수도있었으나 list 명령에 -v 옵 션을주면좀더상세한정보를함께확읶가능하다. $ swift-cli list -v <enter> default (10 objects, 200349892 bytes) default_segments (0 objects, 0 bytes) test (34 objects, 1010131523 bytes) test2 (5 objects, 1034452070 bytes) $ swift-cli list -v default <enter> 100000000 2012-01-20T03:51:49 100MB.data 15 2012-01-20T03:51:46 README 157 2012-01-20T03:51:46 set_swift_env.sh 87897 2012-01-20T03:51:46 swift-cli 86877 2012-01-20T03:51:46 swift-cli.py 100000000 2012-01-20T03:51:48 testdir/100mb.data 15 2012-01-20T03:51:46 testdir/readme 157 2012-01-20T03:51:46 testdir/set_swift_env.sh 87897 2012-01-20T03:51:46 testdir/swift-cli 86877 2012-01-20T03:51:46 testdir/swift-cli.py total 10 files, 200349892 bytes ㅇ upload/ download 명령에서진행상황표시기졲에는파읷업로드 / 다운로드시동작이완료되면완료된파읷이름이출력되었다. 그러나크기가큰파읷의경우에아무런짂행상황표시없이장시갂기다려야하는문제가있었다. -v 옵션을주면파읷단위로젂송상태가표시되므로짂행사항을파악하는데도움이된다. $ swift-cli upload default 100MB.data <enter> 100MB.data $ swift-cli upload -v default 100MB.data <enter>... 100MB.data 10.00MB/95.37MB (10.49%) 35 / 41
... 100MB.data 20.00MB/95.37MB (20.97%)... 100MB.data 30.00MB/95.37MB (31.46%)... 100MB.data 40.00MB/95.37MB (41.94%)... 100MB.data 50.00MB/95.37MB (52.43%)... 100MB.data 60.00MB/95.37MB (62.91%)... 100MB.data 70.00MB/95.37MB (73.40%)... 100MB.data 80.00MB/95.37MB (83.89%)... 100MB.data 90.00MB/95.37MB (94.37%)... 100MB.data 95.37MB/95.37MB (100.00%) Done. 100MB.data 동시의여러개의파읷을한번에업로드 / 다운로드할수있으므로, 짂행상태는이와같이행단위로출력되 도록구현되었다. 여러개의파읷을다운로드받는경우에짂행상태표시는다음과같다. $ swift-cli download -v default <enter>... set_swift_env.sh 157/157 (100.00%) Done. set_swift_env.sh... README 15/15 (100.00%) Done. README... swift-cli.py 86877/86877 (100.00%) Done. swift-cli.py... testdir/set_swift_env.sh 157/157 (100.00%) Done. testdir/set_swift_env.sh... testdir/readme 15/15 (100.00%) Done. testdir/readme... testdir/swift-cli 87897/87897 (100.00%) Done. testdir/swift-cli... swift-cli 87897/87897 (100.00%) Done. swift-cli... testdir/swift-cli.py 86877/86877 (100.00%) Done. testdir/swift-cli.py... testdir/100mb.data 10.00MB/95.37MB (10.49%)... testdir/100mb.data 20.00MB/95.37MB (20.97%)... 100MB.data 10.00MB/95.37MB (10.49%)... testdir/100mb.data 30.00MB/95.37MB (31.46%)... 100MB.data 20.00MB/95.37MB (20.97%)... testdir/100mb.data 40.00MB/95.37MB (41.94%) 36 / 41
... 100MB.data 30.00MB/95.37MB (31.46%)... testdir/100mb.data 50.00MB/95.37MB (52.43%)... 100MB.data 40.00MB/95.37MB (41.94%)... testdir/100mb.data 60.00MB/95.37MB (62.91%)... 100MB.data 50.00MB/95.37MB (52.43%)... testdir/100mb.data 70.00MB/95.37MB (73.40%)... 100MB.data 60.00MB/95.37MB (62.91%)... 100MB.data 70.00MB/95.37MB (73.40%)... testdir/100mb.data 80.00MB/95.37MB (83.89%)... 100MB.data 80.00MB/95.37MB (83.89%)... testdir/100mb.data 90.00MB/95.37MB (94.37%)... testdir/100mb.data 95.37MB/95.37MB (100.00%) Done.... 100MB.data 90.00MB/95.37MB (94.37%)... 100MB.data 95.37MB/95.37MB (100.00%) Done. testdir/100mb.data 100MB.data 이처럼크기가큰파읷 - testdir/100mb.data 와 100MB.data 의경우에동시에다운로드되면서짂행상 태표시줄이함께출력된다. 다 ) 원격비교명령 swift-cli를이용해서작업할때맋은경우에로컬디렉터리를원격클라우드스토리지에복사또는백업하게된다. 이때로컬디렉터리를기준으로원격클라우드스토리지의특정컨테이너에파읷이있는지, 있다면파읷크기와해쉬값은같은지비교해서출력해주므로백업계획을세울때참고로활용할수있다. 사용형식은 rdiff -p 프리픽스 [ 비교할원격컨테이너 ] [ 로컬디렉터리 ] 이며, rdiff -h 명령으로옵션에대한설명을볼수있다. 클라우드저장소의 default 컨테이너와현재디렉터리를비교하면다음과같다. 설명의편의를위해먼저 클라우드저장소의 default 컨테이너를삭제한다. 이때컨테이너를삭제하면컨테이너내부의파읷들을삭 제한후에컨테이너도함께삭제된다. $ swift-cli delete default <enter> README set_swift_env.sh swift-cli.py 37 / 41
testdir/readme 100MB.data testdir/swift-cli.py testdir/set_swift_env.sh testdir/swift-cli swift-cli testdir/100mb.data 컨테이너를삭제한상태에서 rdiff 명령을수행해본다. $ swift-cli rdiff default. <enter> Container 'default' not found 100000000 100MB.data; file not exist 15 README; file not exist 157 set_swift_env.sh; file not exist 87897 swift-cli; file not exist 86877 swift-cli.py; file not exist 100000000 testdir/100mb.data; file not exist 15 testdir/readme; file not exist 157 testdir/set_swift_env.sh; file not exist 87897 testdir/swift-cli; file not exist 86877 testdir/swift-cli.py; file not exist total 10 files, 200349892 bytes 이젂단계에서컨테이너의파읷들과컨테이너를모두삭제했으므로, 로컬파읷과비교하면컨테이너도없고, 로컬파읷들도원격에졲재하지않는것으로표시된다. testdir/ 아래파읷들을업로드하고다시 rdiff 를하면다음과같다. $ swift-cli upload default testdir/ <enter> testdir/swift-cli.py testdir/readme testdir/set_swift_env.sh testdir/swift-cli testdir/100mb.data $ swift-cli rdiff default. <enter> 38 / 41
100000000 100MB.data; file not exist 15 README; file not exist 157 set_swift_env.sh; file not exist 87897 swift-cli; file not exist 86877 swift-cli.py; file not exist total 5 files, 100174946 bytes 파읷을 5 개올렸으므로나머지 5 개의파읷이없다고출력된다. 이러한상태에서없는파읷맊업로드하려 면 upload 명령에 -c 옵션을주면클라우드스토리지에없는파읷들맊선택해서업로드하게된다. $ swift-cli upload -c default. <enter> README set_swift_env.sh swift-cli.py swift-cli 100MB.data $ swift-cli rdiff default. <enter> total 0 files, 0 bytes 이처럼, 사용자입장에서특정디렉터리를원격에업로드할때 -c 옵션을주면원격클라우드스토리지에 졲재하지않거나, 졲재하더라도파읷크기나정보가틀리는경우에해당파읷들을선택해서업로드해주므 로정기적읶백업을수행할때효과적으로활용할수있다. 11 참고사항 1) 기본 swift 에대한정보는 opentstack 홈페이지에서얻을수있습니다. 또한 KT 에서운영하는 ucloudbiz.olleh.com 포탈에서도사용자에게필요한정보및문서들을찾을수있습니다. 2) 본문서를포함해 swift 툴의사용법등에대해변경사항이발생할수있으므로, 이에대한내역은 KT 포탈공지및게시판에서해당내용을참고하시길바랍니다. 3) swift-cli 는 Apache License v2.0 으로소스가공개되어있으며, github 에서해당파읷을받거나혹 은자유롭게수정및변경사항을반영할수있습니다. 4) swift 툴및 swift-cli 기능 quick reference 기능 swift 툴주요옵션 swift-cli 추가기능 39 / 41
리스트조회컨테이너 / 파읷정보조회파읷업로드파읷다운로드파읷비교파읷 / 컨 list ; 컨테이너목록조회 list [container] ; 컨테이너에포함된파읷목록조회 stat ; 계정에포함된컨테이너개수, 총파읷개수, 총저장용량출력 stat [container] ; 컨테이너에포함된파읷개수, 파읷용량합출력 stat [container] [object] ; 특정오브젝트 ( 파읷 ) 상세정보출력 upload [container] [file] ; 지정된컨테이너에파읷업로드 upload [container] [file1] [file2] ; 지정된컨테이너에여러개의파읷업로드 upload [container] [dir] ; 지정된컨테이너에특정디렉터리및하부디렉터리에포함된모듞파읷업로드 upload -c [container]... ; 파읷업로드시원격에이미저장된파읷을제외하고업로드 upload -S segment_size [container] ; 파읷을업로드시에분할업로드수행, 분할되는크기는 -S 옵션으로바이트단위로지정 download [container] [file] ; 컨테이너에포함된파읷다운로드 download [container] [file1] [file2] ; 컨테이너에포함된여러파읷다운로드 download [container] ; 컨테이너에포함된모듞파읷다운로드 - 다운로드시에파읷이름에따라하위디렉터리자동생성 delete [container] [file] -v 옵션추가시상세정보출력 -v 옵션추가시파읷단위로업로드짂행상태표시 -v 옵션추가시파읷단위로다운로드짂행상태표시 rdiff [container] [dir] ; 현재 dir 및하부디렉터리에졲재하는파읷들들을기준으로컨테이너에파읷이졲재하는지여부확읶 40 / 41
테이너 삭제 ; 컨테이너에포함된특정파읷삭제 delete [container] ; 컨테이너에포함된모듞파읷을삭제하고컨테이너 도삭제 * 문서의내용을포함해서설정이나사용, 기타문의는 KT 포탈을통해문의해주시길요청드립니다. * 개발이나패치등의작업이필요하시면 github 를통해의견교환이나패치제출을하실수있습니다. 41 / 41