swift-cli 설치 및 이용 가이드 - ncloud24.com · 1 / 41 swift-cli 설치 및 이용...

41
1 / 41 Swift-CLI 설치 및 이용 가이드 문서 이력 2011.12.22, v1.0, 최초 작성 2012.5.21, v1.1, swift-cli 기준으로 내용 변경 2015.4.07, v1.2, 컨테이너 관련기능 추가 목차 개요 .................................................................................. 3 설치 .................................................................................. 3 ) 기본 swift 툴과 swift-cli 구분 ....................................................... 4 ) 데비안(Debian) 계열 – Debian, Ubuntu ................................................. 4 ) 레드햇(Redhat) 계열 – CentOS, Feroda, Suse Linux ..................................... 7 ) 윈도우즈(Windows) 계열 .............................................................. 11 기본 사용법 - 기본 명령 옵션 ........................................................ 12 ) 커맨드 라인에서 swift-cli 명령을 실행 도움말 확인 .................................. 12 ) 기본 사용법 ......................................................................... 14 컨테이너/ 파일 목록 조회 - list 명령 ................................................... 17 ) 컨테이너 목록 조회 .................................................................. 17 ) 오브젝트 목록 조회 .................................................................. 18 정보/사용량 조회 - stat 명령........................................................... 18 ) 어카운트 정보 조회 .................................................................. 19 ) 컨테이너 정보 조회 .................................................................. 19 ) 파일정보 조회 ....................................................................... 20 파일 업로드 - upload 명령 ............................................................. 21 ) 단일 파일 업로드 .................................................................... 21 ) 여러 파일 업로드 .................................................................... 21 ) 디렉터리 업로드 ..................................................................... 21 ) 변경된 파일만 업로드 ................................................................ 22 ) 파일 분할 업로드 .................................................................... 22 파일 다운로드 - download 명령 ......................................................... 25 ) 개의 파일 다운로드................................................................ 25

Upload: others

Post on 30-Aug-2019

14 views

Category:

Documents


0 download

TRANSCRIPT

1 / 41

Swift-CLI 설치 및 이용 가이드

문서 이력

2011.12.22, v1.0, 최초 작성

2012.5.21, v1.1, swift-cli 기준으로 내용 변경

2015.4.07, v1.2, 컨테이너 관련기능 추가

목차

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

2 / 41

나) 다른 이름으로 다운로드 ............................................................... 25

다) 다운로드 한 파일을 표준 출력 (stdout) 으로 redirection ................................ 26

라) 여러 개의 파일 동시에 다운로드 ....................................................... 26

마) 특정 컨테이너에 포함된 파일 모두 다운로드 ............................................. 27

바) 특정 디렉터리 이름을 가진 파일 다운로드 ............................................... 28

8 메타정보 관리 - post 명령 ............................................................. 28

가) ACL(Access Control List) 설정 - 읽기 권한 ........................................... 29

나) ACL(Access Control List) 설정 - 쓰기 권한 ........................................... 30

다) 사용자 메타정보 기록 ................................................................ 31

9 파일 삭제 - delete 명령 ............................................................... 32

가) 특정 파일 삭제 ...................................................................... 32

나) 여러 파일 삭제 ...................................................................... 33

다) 컨테이너 삭제 ....................................................................... 33

라) 계정의 전체 데이터 삭제 .............................................................. 34

10 swift-cli에서 추가된 기능 활용....................................................... 34

가) 윈도우 환경 지원 .................................................................... 34

나) 상세 정보 출력 ...................................................................... 34

다) 원격 비교 명령 ...................................................................... 37

11 참고사항 ........................................................................... 39

3 / 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 설치

4 / 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 를 클릭한다.

5 / 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-latest-

release.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

6 / 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/packages-

latest-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:

7 / 41

stat [container] [object]

Displays information for the account, container, or object depending on the

args given (if any).

--- (중간 생략) ---

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

다) 레드햇(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

8 / 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 2 Package(s)

Update 0 Package(s)

Remove 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!

9 / 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-latest-

release.tar.gz <enter>

--2012-05-15 12:59:59-- https://github.com/downloads/jkyoung0/swift-cli-dist/packages-latest-

release.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>

10 / 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 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

위에서 설명한 내용은 CentOS 5.4를 기준으로 설명한 내용인데 기본 설치된 python 버전이 낮아서 다소

설치가 복잡 지는 경향이 있다. Fedora 13 배포판의 경우 기본 파이썬 버전이 2.6이므로 바로 swift-cli

를 다운로드 받아서 설치하면 된다. 필요한 커맨드만 나열하면 다음과 같다.

~# wget --no-check-certificate https://github.com/downloads/jkyoung0/swift-cli-dist/packages-latest-

release.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>

11 / 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를

12 / 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:

13 / 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 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-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에서 적용되는 값이 아니므로 무시한다.)

14 / 41

위의 인증 url과 관련된 정보은 http://developer.ucloudbiz.olleh.com/doc/guide/swift.html 에서

세부적인 내용을 확인할 수 있다.

나) 기본 사용법

먼저 사용량 정보를 조회하면서 기본 옵션 지정 방법을 확인해 본다.

~# swift-cli -A https://api.ucloudbiz.olleh.com/storage/v1/auth/ -U [email protected] -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 [email protected] <enter>

~# export ST_KEY=MTMyMzMyMTg2MTEzMjMzMTg2NDYzNjUa <enter>

* 윈도우 환경에서는 환경 변수를 아래와 같이 지정한다.

15 / 41

> set ST_AUTH=https://api.ucloudbiz.olleh.com/storage/v1/auth/ <enter>

> set [email protected] <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>

16 / 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>

17 / 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

18 / 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 명령은 전체 어카운트에 대한 사용량 조회 및 특정 컨테이너에 대한 사용량 조회, 특정 파일에 대한

19 / 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) 해당 컨테이너에 파일을 읽거나

쓸 수 있는 권한을 지정한다. 기본으로는 인증 받은 사용자만 토큰 값을 획득하고 이후 읽기/ 쓰기 요청에

토큰을 포함해서 요청을 보냄으로써 권한을 확인하고 해당 동작이 수행된다. 그러나 가령 불특정 다수가 해

20 / 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

21 / 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 명령으로 파일의 이름이 어떻게 저장되는지 확인

22 / 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

23 / 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 정보가 추가되어

있다. 해당 값은 이 파일의 실제 내용이 분할된 위치를 나타낸다.

24 / 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 명령을 제공하지 않으므로 파일 크기가 같은지 확인하는 정도로 넘어간다.

파일을 다운로드 할 때는 원래 파일을 업로드 한 컨테이너와 파일 이름을 적어준다. 그러면 서버 측에서 해

당 파일에 대한 메타데이터를 확인해서 조각들을 이어 붙여서 클라이언트 쪽으로 전송해 줌으로써 단일 파

일처럼 다운로드가 가능하다.

주의할 점은 이 분할하여 업로드 된 파일의 권한을 공개로 설정하면 다운로드 시에 401 에러가 발생한다.

이때에는 공개 설정한 컨테이너 뿐만 아니라 새로 생성된 컨테이너(컨테이너이름_segments)의 권한도 공개

로 설정해야 하며, 추가적으로 이 컨테이너 권한에는 “.rlistings” 까지도 넣어 주어야 한다.

앞에서도 언급했지만 swift 는 최대 파일 크기를 5GB 까지만 지원하므로 그 이상의 파일은 클라이언트에서

조각으로 분할해서 업로드 해야 한다. 이때 얼마의 크기로 자를지, 자른 파일을 어떻게 파일 이름을 붙여서

어느 컨테이너에 저장할지, 파일을 어떻게 다운로드 할 지 등의 규칙을 이용자가 직접 정해서 이용할 수 있

다. 그러나 swift-cli를 이용하면 여러 가지 번거로운 과정을 알아서 처리하므로 편하게 이용할 수 있다.

주의할 점은 컨테이너_segments 로 이름 지어진 컨테이너들은 분할된 조각들을 관리하고 있으므로 직접 삭

25 / 41

제/ 변경하지 말고 swift-cli를 이용해서 원래 파일에 대한 처리만 해야 한다.

주의할 점은 segmentation을 지원하지 않는 다른 환경 - 포탈이나 cyberduck 툴 등에서는 파일 이름을 보

면 용량이 0으로 출력된다. 이런 경우에 해당 툴에서 파일이 segment 형태로 분할 저장되었는지 별도로 확

인해야 한다.

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 옵션으로 저장될 파일

26 / 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

27 / 41

이 경우에 swift-cli 내부에서 여러 개의 스레드로 각각의 파일을 다운로드 받으므로 전체 다운로드 시간

이 단축되는 장점이 있다.

마) 특정 컨테이너에 포함된 파일 모두 다운로드

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 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에 포함된 모든 파일들을 다운로드 해서 디렉터리 구조에 맞게 저장한 것을 확인할 수

있다.

28 / 41

* 윈도우에서는 ‘ls -Ral’ 대신 ‘dir /s’ 명령을 사용해서 파일 리스트를 출력해 볼 수 있고, ‘rm -rf *’ 대

신 ‘rmdir /s .’ 명령을 사용해서 현재 디렉터리에 속한 파일들과 하위 디렉터리를 삭제한다. 삭제하기 전

에 미리 중요한 파일이 있는지 먼저 확인하고 삭제해야 한다.

바) 특정 디렉터리 이름을 가진 파일 다운로드

참고로, 현재 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) 와 사용자 정의 메타정보를 설정하고 읽는 방법을 알

아본다.

29 / 41

가) ACL(Access Control List) 설정 - 읽기 권한

ACL은 접근 권한 리스트라고 해석되는데, 특정 컨테이너에 대해 읽기/ 쓰기 권한을 지정하는 정보이다. 기

본적으로 swift에 저장된 데이터는 인증을 통과한 해당 계정의 소유자만 읽고 쓰기가 가능하다. 그러나 가

령 특정 파일을 배포하려면 해당 파일에 대한 읽기 권한을 공개된 것으로 설정해야 할 필요도 있다. 실제로

는 파일단위로 설정하는 대신 컨테이너 단위로 접근 권한을 설정하게 된다.

먼저 설정할 컨테이너를 미리 조회해 본다.

$ 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:

30 / 41

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 <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는 다른 이용자에게 쓰기 권한을 부여하는 기능을 제공하지 않으므

로 동작하지 않는다.

비록 기능은 지원하지 않으나, 간단한 사용 방법을 보면 다음과 같다.

31 / 41

$ swift-cli post testcont1 -w‘account1’ <enter> ;; 메타 정보는 기록되나 동작 안함

현재는 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

32 / 41

Accept-Ranges: bytes

Connection: keep-alive

X-Trans-Id: txfb209f466df2417bb74c1a8cd3e78cc4

메타 정보가 기록되고 조회되는 것은 확인했으나 이 기능을 어디에 사용할 지는 이용자가 정해야 한다. 특

히 메타정보를 기반으로 특정 파일을 검색하는 등의 검색 기능이 제공되지 않기 때문에 메타정보는 검색용

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

33 / 41

나) 여러 파일 삭제

여러 개의 파일을 동시에 삭제하려면 공백으로 구분해서 파일 이름들을 적어준다.

$ swift-cli delete testcont1 testdir/test.file1 testdir/test.file2 <enter>

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 옵션을 주면 그에 따라 파일이 삭제되지 않고 남아있으므로 저장 공간을

더 사용하게 된다.

34 / 41

라) 계정의 전체 데이터 삭제

delete 명령 뒤에 -a 옵션을 주면, 해당 계정에 존재하는 모든 컨테이너 및 하부의 파일들을 일괄 삭제한

다. (segment 파일들도 포함해서 모두 삭제된다.) 삭제된 파일은 복구되지 않는다는 것을 고려해서 해당

명령은 신중하게 사용해야 한다.

$ 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

35 / 41

README

set_swift_env.sh

swift-cli

swift-cli.py

testdir/100MB.data

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 옵션을 주면 파일 단위로

전송 상태가 표시되므로 진행사항을 파악하는데 도움이 된다.

36 / 41

$ 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%)

.... 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%)

37 / 41

.... 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%)

.... 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 컨테이너를 삭제한다. 이때 컨테이너를 삭제하면 컨테이너 내부의 파일들을 삭

제한 후에 컨테이너도 함께 삭제된다.

38 / 41

$ swift-cli delete default <enter>

README

set_swift_env.sh

swift-cli.py

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

39 / 41

testdir/set_swift_env.sh

testdir/swift-cli

testdir/100MB.data

$ swift-cli rdiff default . <enter>

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

포탈 공지 및 게시판에서 해당 내용을 참고하시길 바랍니다.

40 / 41

3) swift-cli 는 Apache License v2.0으로 소스가 공개되어 있으며, github에서 해당 파일을 받거나 혹

은 자유롭게 수정 및 변경사항을 반영할 수 있습니다.

4) swift 툴 및 swift-cli 기능 quick reference

기능 swift 툴 주요 옵션 swift-cli 추가기능

리스트

조회

list

; 컨테이너 목록 조회

list [container]

; 컨테이너에 포함된 파일 목록 조회

-v 옵션 추가 시 상세정보 출력

컨테이너

/ 파일

정보 조

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 옵션으로 바이트 단위로 지정

-v 옵션 추가시 파일 단위로 업로드

진행상태 표시

파일

다운로드

download [container] [file]

; 컨테이너에 포함된 파일 다운로드

download [container] [file1] [file2] …

; 컨테이너에 포함된 여러 파일 다운로드

download [container]

; 컨테이너에 포함된 모든 파일 다운로드 - 다운로드

시에 파일이름에 따라 하위디렉터리 자동 생성

-v 옵션 추가시 파일 단위로 다운로드

진행상태 표시

41 / 41

파일

비교

rdiff [container] [dir]

; 현재 dir 및 하부 디렉터리에 존재

하는 파일들들을 기준으로 컨테이너에

파일이 존재하는지 여부 확인

파일/ 컨

테이너

삭제

delete [container] [file]

; 컨테이너에 포함된 특정 파일 삭제

delete [container]

; 컨테이너에 포함된 모든 파일을 삭제하고 컨테이너

도 삭제

* 문서의 내용을 포함해서 설정이나 사용, 기타 문의는 KT 포탈을 통해 문의해 주시길 요청 드립니다.

* 개발이나 패치 등의 작업이 필요하시면 github를 통해 의견 교환이나 패치 제출을 하실 수 있습니다.