Dropbox Started as a Python Script on a Bus Ride - https://www.youtube.com/watch?v=69HHFdoz34M 음, 저는 USB 드라이브를 자꾸 잊어버려서 Dropbox 개발을 시작했습니다. 결국 이 문제가 정말 싫어져서 영구적으로 해결하고 싶었어요. 처음엔 저를 위해서였지만, 다른 많은 사람들도 비슷한 문제를 겪고 있다는 것이 분명했습니다. 그래서 그 버스 안에서 USB 드라이브를 집에 두고 온 날이었죠. 2006년이었습니다. 노트북은 가지고 있었지만 USB 드라이브가 없다는 걸 깨달았고 정말 좌절스러웠어요. 아이폰이 나오기 전이었고, 버스에는 와이파이도 없었습니다. 그래서 약 4시간 정도 시간을 보내야 했어요. 그래서 에디터를 열고 파이썬 코드를 작성하기 시작했습니다. 회사를 차리려는 생각은 아니었고, 정말 단순히 USB 드라이브를 다시는 들고 다니지 않아도 되는 문제를 해결하고 싶었어요. 처음 몇 줄의 코드는 기본적으로 폴더나 디렉토리의 변화를 감시하고, 파일이 변경될 때마다 변경사항을 식별해서 서버로 차이점을 동기화하는 것이었습니다. Dropbox를 생각해보면, 이는 설계상 그리고 필요에 의해 크로스 플랫폼 소프트웨어입니다. Dropbox는 Windows, Mac, Linux에서 파일을 동기화해줍니다. 생각해보면, 일반적인 방식으로는 Windows 버전을 C로 만들고 Win32 API를 사용하고, Mac용으로는 다른 스택을, Linux용으로는 또 다른 스택을 사용했어야 했을 겁니다. 저는 그럴 시간이 없었어요. 그래서```vtt 어디서든 실행될 수 있는 앱의 한 가지 버전을 작성할 수 있기를 바라고 기도했습니다. 이는 주로 필요에 의한 것이었습니다. 저는 혼자였거든요. 그리고 얼마 후 공동 창업자와 파트너십을 맺었습니다. 그래서 두 명이 되었죠. 공동 창업자는 기본적으로 Dropbox의 서버를 작성하고 저는 클라이언트 소프트웨어를 작성했습니다. 기존 방식대로 했다면 모든 다른 플랫폼에서 매우 낮은 수준의 시스템 코드를 작성해야 했을 것입니다. 하지만 Python으로, 제가 희망했던 것은 약간의 경험을 통해 모든 주요 운영체제에서 Python을 사용해봤는데 대체로 같은 방식으로 작동했습니다. 일반적으로 Windows에서 스크립트를 작성하면 Linux에서도 실행되고 그 반대도 마찬가지였습니다. 하지만 Dropbox는 운영체제와 매우 밀접하게 통합되어 있어서 약간의 도전이 있었습니다. 여전히 성능과 기능, 그리고 운영체제와의 매우 긴밀한 통합이 필요했기 때문입니다. 하지만 저는 그냥 Python으로 작성하기 시작했고, 어떤 장애물도 저를 완전히 막지 않기를 바랐습니다. 기본 아키텍처는 앱의 메인 버전이 있었고 이는 OS에 구애받지 않았습니다. 기본 동기화 로직이 있었고 각 주요 운영체제별로 특화된 백엔드가 있었습니다. 하지만 저는 항상 걱정했습니다. 성능 문제가 있을까요? 인터프리터 언어이기 때문에 선례가 없었습니다. 당시에 Firefox 같은 것을 다운로드했다면 대체로 컴파일된 형태였을 것입니다. ``````vtt 또는 앱의 핵심은 운영체제 네이티브 언어나 C 또는 C++로 작성되어야 할 것입니다. 그리고 다른 과제들도 있었습니다. Dropbox는 멀티스레드여야 했는데 동시에 일어나는 일이 많았기 때문입니다. 한 스레드는 네트워크와 통신하고, 다른 스레드는 하드디스크를 읽고, 또 다른 스레드는 동기화 엔진 로직을 처리해야 했습니다. 다행히 Python은 이러한 문제들 각각에 대한 해결책을 가지고 있었습니다. 당시에는 몰랐지만, 일종의 정글 속으로 걸어들어가서 반대편으로 나올 수 있기를 바라야 했습니다. 하지만 언어 자체의 표현력 외에도 많은 이점이 있었습니다. 깔끔한 설계를 가능하게 하고, 또한 정말 성숙한 표준 라이브러리가 있었습니다. 그래서 다른 많은 프로그래머들이 여러 운영체제의 모든 특성을 파악해두었고, 모든 플랫폼에서 배터리가 포함된 상태였습니다. 그리고 멀티스레딩 주변의 까다로운 것들, 심지어 메모리 사용량이나 메모리 사용량 최적화, 그리고 깊은 OS 통합이나 CPU 집약적인 것들, 예를 들어 해싱 알고리즘이나 압축, 암호화 같은 것들도 사용할 수 있는 라이브러리가 있거나 이미 Python 바인딩이 있는 것들이 있었고, 또는 C로 된 것을 가져와서 Python 바인딩으로 감쌀 수 있었습니다. 그래서 다행히 우리는 그냥 나아가기 시작했고, 그 후에는 다양한 작은 것들을 탐색하는 일이 많았습니다. ``````구멍들이 있었지만, 결국 파이썬을 사용한 것이 우리가 내린 최고의 기술적 결정이었을 것입니다. 파이썬을 사용한 것 말이죠. ```