오피스 문서를 백업하는 가장 좋은 방법은 Microsoft Office Live를 사용하는 것이다. 공유는 기본이고 이력 관리, 간단한 조회도 가능하다. 별도의 플러그인을 설치하면 웹 브라우저를 경유하지 않고 오피스에서 바로 읽기/저장이 가능하다.
결정적인 문제가 있다. 웹 상에서 수정이 불가능하다는 점이다. 반드시 오피스가 설치된 PC에서만 수정이 가능하다. 이 문제를 해결한, 웹에서 자유롭게 수정 가능한 것이 구글 Docs다. 그리고 오늘은 이 구글 Docs에 문서를 자동 백업하는 방법을 설명한다.
이 문서는 라이프해커 Back Up Your Files to Google Docs Automatically를 통해 Webmonkey에 올라온 Create Automated Backups in Google Docs Using the GData API를 번안한 것이다.
GData API 설치
구글 Docs는 웹 브라우저만 있으면 어디든 파일을 올릴 수 있고 자유롭게 수정할 수 있다. 여기에 파일당 용량제한이 있고 전체 파일 갯수 제한이 있다. 5,000개의 문서와 프리젠테이션 파일, 1,000개의 스프레드시트 제한이 있다. 더 자세한 사항은 Getting to know Google Docs: Size limits를 참조. 이 허용 제한내에서는 자유롭게 이용 가능하다. 오늘 만들 것은 자동 백업 스크립트다. 브라우저를 여는 불편함을 없앤 오픈API를 이용한 파이썬 스크립트다.
구글의 모든 데이타 저장은 GData API를 사용한다. 먼저, Python GData client를 설치한다. 그리고 테스트.
>>> import gdata.docs
>>> import gdata.docs.service
에러가 나지 않는다면 잘 설치된 것이다. 이제 본격적으로 시작해 보자.
지원 포맷, 인증
지원하는 파일 타입은 아래 명령으로 조회할 수 있다.
>>> from gdata.docs.service import SUPPORTED_FILETYPES
>>> SUPPORTED_FILETYPES
이제 gdata_upload.py를 만들고 아래 코드를 입력한다.
from gdata.docs import service
def create_client():
client = service.DocsService()
client.email = 'yourname@gmail.com'
client.password = 'password'
client.ProgrammaticLogin()
return client
로그인 함수를 만들었다. 로그인이 필요한 경우 언제든 create_client 함수를 호출하면 된다.
문서 업로드
문서 업로드를 구현할 차례다. 위에 작성한 파일 아래에 다음 코드를 추가한다.
def upload_file(file_path, content_type, title=None):
import gdata
ms = gdata.MediaSource(file_path = file_path, content_type = content_type)
client = create_client()
entry = client.UploadDocument(ms,title)
print 'Link:', entry.GetAlternateLink().href
쉘에서 잘 동작하는지 확인해보자.
>>> import gdata_upload
>>> gdata_upload.upload_file('path/to/file.txt','text/plain','Testing File Upload')
Link: http://docs.google.com/Doc?id=<random numbers of string>
>>>
자동 백업
업로드를 구현했으니 마지막으로 남은 것은 자동 백업 스크립트를 만드는 일이다.
import os
import gdata_upload
for root, dirs, files in os.walk('.'):
for name in files:
filename = os.path.join(root, name)
gdata_upload.upload_file(filename, 'text/plain', 'Testing File Backup')
이 코드를 backup_docs.py로 저장하자. 이 파일을 실행하면 현재 디렉토리의 모든 문서를 구글Docs에 저장한다. 자동 백업이 목적이니 자동으로 실행해야겠지. cronjob을 이용하면 된다.
0 21 * * * python path/to/backup_docs.py 2>&1
이제 매일 새벽 0시 21분에 해당 디렉토리의 모든 파일이 구글 Docs로 자동 백업된다. 특정 폴더에 자동으로 밀어넣는 기능이 있다면 좋을텐데 아직 API에서 그런 기능은 지원하지 않는다.
예전에 이 기능을 이용해 데스크탑 문서를 구글 Docs에 백업하는 DocSyncer라는 백업 서비스가 있었는데 망했다. 자동 백업하는 유일한 방법은 오늘 배운 스크립트를 사용하는 것이다.