지난주 U-File이 회원 가입을 개방했을 때 계정을 하나 등록해서, 무료로 무제한 저장 공간과 2T 트래픽을 제공하는 공간을 얻었습니다. 오랫동안 기다린 끝에 드디어 심사가 통과되어 콘솔에 접속해 확인해 보니, 아무래도 又拍云의 객체 스토리지를 사용하는 것 같았습니다. 又拍云에서 제공하는 도구 몇 가지를 테스트해 보았는데 모두 정상적으로 사용할 수 있었습니다.

유일하게 조금 아쉬운 점은 又拍云 스토리지가 아직 미러링 원본 가져오기를 지원하지 않는다는 것입니다. 말하자면 알리바바 OSS, 텐센트 COS, 바이두 BOS라는 세 대형 업체의 객체 스토리지와 七牛云 같은 소규모 업체도 모두 미러링 원본 가져오기를 지원하는데, 又拍云은 의외로 따라가지 않고 있습니다.

미러링 원본 가져오기를 지원하지 않는데, 저는 또 U-File을 사용해 이미지 호스팅을 미러링하고 가속해야 했기 때문에 다른 방법을 선택할 수밖에 없었습니다. 그래서 又拍云의 문서에서 UPX 명령줄 도구를 찾았고, 그중 sync를 사용하면 로컬 경로를 又拍云 객체 스토리지로 동기화할 수 있었습니다. 미러링 원본 가져오기를 구현할 수는 없지만, 클라우드 스토리지의 데이터와 로컬 데이터를 동기화할 수 있으니 미러링의 또 다른 형태라고 할 수 있습니다.

프로젝트 소개

UPX는 개발자를 위해 설계된 명령줄 기반 클라우드 스토리지 관리 도구입니다. 파일 업로드 및 다운로드, 증분 파일 동기화, 디렉터리 생성 및 삭제, 파일 삭제(비동기 파일 일괄 삭제 포함) 등을 수행할 수 있습니다.

오픈 소스 프로젝트: https://github.com/upyun/upx

자세한 소개는 프로젝트의 README에서 확인할 수 있습니다.

여기서는 주로 CentOS에서 upx를 사용해 로컬 파일을 又拍云 스토리지로 동기화하는 방법을 소개하겠습니다.

UPX 설치

# 64비트 시스템 다운로드
wget -O /usr/local/bin/upx http://collection.b0.upaiyun.com/softwares/upx/upx-linux-amd64-v0.2.6
# 32비트 시스템 다운로드
wget -O /usr/local/bin/upx http://collection.b0.upaiyun.com/softwares/upx/upx-linux-386-v0.2.6
# 권한 부여
chmod +x /usr/local/bin/upx

설치가 완료된 후 upx를 직접 입력해 설치가 성공했는지 확인할 수 있습니다.

명령어 소개

모든 명령어는 -h를 지원하여 사용 방법을 확인할 수 있습니다.

명령어설명
login又拍云 스토리지에 로그인
logout계정 로그아웃
sessions모든 세션 확인
switch세션 전환
info서비스명, 사용자명 등의 정보 표시
cd작업 디렉터리 변경(디렉터리로 이동)
pwd현재 디렉터리 표시
mkdir디렉터리 생성
ls현재 디렉터리의 파일 및 디렉터리 정보 표시
tree디렉터리 구조 표시
get파일 또는 디렉터리 다운로드
put파일 또는 디렉터리 업로드
rm디렉터리 또는 파일 삭제
sync디렉터리 증분 동기화, rsync와 유사
auth공간명, 운영자, 비밀번호 정보가 포함된 auth 문자열 생성
post비동기 처리 작업 제출
purgeCDN 캐시 새로 고침 작업 제출
global options설명
--quiet, -q정보 표시 안 함
--auth valueauth 문자열
--help, -h도움말 표시
--version, -v버전 번호 표시

又拍云 로그인

upx login 명령어를 입력하고 서비스명, 운영자, 운영자 비밀번호를 차례로 입력한 후 Enter 키를 누르면 로그인됩니다. Welcome to가 표시되면 로그인이 성공한 것입니다.

upx info를 입력해 정보를 확인할 수 있으며, CurrentDir은 현재 디렉터리이고 Usage는 사용 중인 공간입니다.

UPX는 여러 계정 로그인도 지원합니다. upx sessions를 사용해 모든 로그인 세션을 확인하고, upx switch를 사용해 세션을 전환할 수 있습니다. 저는 여분의 계정이 없기 때문에 여기서는 시연하지 않겠습니다.

파일 동기화

먼저 cd로 동기화할 디렉터리를 연 다음 upx sync를 사용해 동기화합니다.

예를 들어 제가 입력한 upx sync 2020/ /2020/는 현재 디렉터리 아래의 2020 폴더를 又拍云 스토리지 루트 디렉터리 아래의 2020 폴더로 동기화한다는 의미입니다.

동기화가 완료되면 위와 같은 메시지가 표시됩니다. FTP 도구로 U-File에 연결하면 2020 디렉터리가 이미 완전히 동기화된 것을 확인할 수 있습니다.

이 방법은 다른 웹사이트 프로그램의 정적 리소스를 동기화하는 데에도 사용할 수 있습니다.

WordPress

upx sync wp-content/uploads/ /wp-content/uploads/

Typecho

upx sync usr/uploads/ /usr/uploads/

Flarum

upx sync public/assets/ /public/assets/

웹사이트의 루트 디렉터리를 직접 동기화해서는 절대 안 됩니다. 루트 디렉터리 아래에는 WordPress의 wp-config.php 파일과 같은 config 설정 파일이 포함되어 있을 수 있기 때문입니다. 이러한 파일에는 데이터베이스 등 중요한 정보가 들어 있으며, 又拍云 스토리지에 업로드된 후에는 누구나 다운로드할 수 있어 보안에 심각한 영향을 줍니다.

정기 동기화

현재 upx sync는 증분 동기화 방식을 사용하며 실시간 동기화는 아직 지원하지 않으므로, 계획 작업 방식으로 정기 동기화를 구현할 수밖에 없습니다.

여기서는 Crontab보다 사용하기 간편한 宝塔 패널의 계획 작업을 사용합니다.

주의할 점은 계획 작업에서 upx sync를 실행할 때 동기화할 디렉터리를 시스템을 루트로 하는 경로로 변경해야 한다는 것입니다.

저는 1분마다 한 번씩 동기화하도록 설정했습니다. 1분 후 로그를 확인해 보니 동기화가 정상적으로 수행된 것을 볼 수 있습니다.

+=============+=========+===========+================+===========+=============+
| SYNC_EXISTS | SYNC_OK | SYNC_FAIL | SYNC_NOT_FOUND | DELETE_OK | DELETE_FAIL |
+-------------+---------+-----------+----------------+-----------+-------------+
|         571 |       0 |         0 |              0 |         0 |           0 |
+-------------+---------+-----------+----------------+-----------+-------------+
----------------------------------------------------------------------------
★[2020-05-30 13:50:04] Successful
----------------------------------------------------------------------------