Rev. 2.73

클로즈 베타를 앞두고 있는 코드명 벨록스 프로젝트에 킬러 피쳐를 추가하는 과제를 두고 고민하다가 개발자 답게 드랍박스와 연동하여 기존 사용자들을 흡수하는 방향으로 진행하기로 했습니다. 테스터들에게는 빠른 속도와 용량 제한 없는 공간을 무료로 제공할 수 있게 되고, uCloudDaum클라우드, NDrive 등의 유사 서비스도 오픈 API가 있는 지는 모르겠습니다만 있는 족족 흡수할 생각에서 였습니다. Node.JS와 드랍박스를 연동하는 구현 사례나 관련 문서가 전무하여 며칠동안 삽질하면서 만들어야 했는데, 그 구현 과정을 예방 차원에서 기록합니다.

# npm search dropbox

NAME              DESCRIPTION
arca              little tool to download files from a public dropbox folder
dbox              NodeJS SDK for the Dropbox API
dropbox           A node.js client module for the official Dropbox API
dropbox-sdk       An alternative Dropbox SDK for nodejs
everyauth         Auth solution (password, facebook, & more) for your node.js Conn
passport-dropbox  Dropbox authentication strategy for Passport.
symbox            Simplifies symlinking folders in Dropbox

Node.JS에서 사용할 수 있는 드랍박스 클라이언트가 있나 찾아봤더니 여러개가 있더군요. 이 중에도 dropbox-node 모듈이 간결하면서도 인지도가 있어 보여 이것을 선택했습니다만, 초장부터 화근이었습니다. 드랍박스의 API는 크게 두가지로 나눌 수 있는데 모바일 디바이스를 위한 SDK와 그리고 웹앱을 위한 OAuth v1의 인증 명세를 따르는 SDK입니다. 이 둘 모두 OAuth 방식 인증을 사용합니다만, 차이점은 사용자 인증할 때 모바일용 SDK에서는 드랍박스 사용자 아이디와 암호를 직접 요구하며 웹용 SDK에서는 OAuth기반의 웹 인증(트위터와 같은)을 수행한다는 것입니다. 또한 개발하려는 애플리케이션의 용도에 따라 드랍박스 전체 파일에 접근하게 할 것인지 기존 파일에 접근하지 않고 클라우드로 사용할 것인지에 따라서도 사용법이 달라집니다.(검증필요)

벨록스는 당연히 드랍박스에 존제하는 파일에 흥미가 있고 웹용이기 때문에 웹용 SDK를 선택해야 했지만 dropbox-node 모듈은 사용자의 아이디와 암호를 요구하는 인증방식이었습니다.(헐~) 그래서 웹인증 부분을 해결하려고 passport-dropbox모듈을 설치했는데 이녀석 때문에 본격적인 삽질이 시작될 줄은 꿈에도 몰랐던 거죠...

주말에 마음을 비우고 출근해서 드랍박스의 개발자 문서를 차근차근 살피다 보니 Node.JS용 공식 서드파티 SDK는 dbox였더군요! 개삽질한 코드들은 모두 지우고 metadata를 긁어와서 폴더 단위로 파일을 정렬하는 것 까지 단숨에 해결했습니다. 개발인란게 참 허무하네요.

Comments

Got something to add? You can just leave a comment.

Your Reaction Time!

captcha

avatar