Marco: 프라이버시 우선, 오프라인 우선 이메일 클라이언트 (IMAP 기반)
Source: Dev.to
How it started
나는 작년에 Android에서 iPhone으로 바꾸면서 커스텀 도메인 이메일을 Gmail에서 iCloud로 옮겼다. 그 결과 iOS와 macOS에서 Apple Mail 앱을 사용하게 되었다. 몇 주 동안 버그가 많은 UX를 겪고, iOS용 Apple Mail이 macOS와는 다른 글꼴 크기로 이메일을 전송한다는 사실(설정 불가)을 알게 된 뒤 대안을 찾기 시작했다. 두 주 동안 찾을 수 있는 모든 이메일 클라이언트를 평가했다. 모두 세 가지 범주에 들어갔다:
- 레거시이고 못생긴 것
- 무료지만 데이터를 판매하는 것
- 정말 훌륭하지만 연간 £250 이상 드는 것
Superhuman을 사용하고 싶지만 개인 이메일에 그 비용을 정당화할 수가 없다. 이 사이에 빈틈이 생겼고, 아직 그 빈틈을 메우는 사람은 없는 듯하다.
The email client graveyard
조사할수록 죽은 이메일 스타트업을 많이 발견했다—Tempo, Big Mail, Caley.io, 그리고 수많은 포기된 오픈소스 시도들. 대부분 1~2년 정도 지속되었다. 두 가지 이유가 그들을 무너뜨렸다:
- 이메일 클라이언트를 만드는 일은 터무니없이 복잡하다.
- Google의 이메일 스코프에 대한 OAuth 보안 검토는 눈에 보일 정도로 비용이 많이 든다.
Why IMAP‑first matters
거의 모든 이메일 스타트업이 Gmail API 위에 구축한다. 편리하지만 Google에 종속된다. 우리는 IMAP‑first 접근을 선택했으며, 이는 전 세계 거의 모든 이메일 제공자와의 상호 운용성을 보장한다. IMAP은 또한 오래되고, 이상하고, 엣지 케이스가 많아—재미있는 시간이며 배울 것이 많다.
The offline‑first odyssey
여기가 바로 내가 거의 미쳐버릴 뻔한 부분이다. 우리는 초기부터 완전한 오프라인 지원을 약속했다(Wi‑Fi가 없는 비행기에서도 읽고, 답장하고, 삭제하고, 이메일을 정리한다). 간단해 보이지만 Marco는 수십만 개의 엔터티와 계정당 100 MB 이상의 데이터를 다룬다.
우리는 약 3개월 동안 다섯 가지 오프라인‑first 솔루션을 시도했다:
WatermelonDB
- 처음엔 잘 작동했지만, IndexedDB 성능 문제를 우회하기 위해 인‑메모리 JS 데이터베이스(LokiJS)를 사용한다.
- 100 MB 이상의 데이터베이스를 메모리에 올려두는 것은… 그리 좋지 않다.
- 유지보수가 느려졌다.
Triplit
- 최고의 개발자 경험, 정말 멋진 API.
- 10만 개 미만의 엔터티에서 구독이 타임아웃되고, 서버를 여러 번 다운시켰다.
- 이 팀을 응원한다.
InstantDB
- TypeScript 타입이 없고, 정렬/순서 기능이 없으며, 웹훅도 없다.
- WatermelonDB에서 2
5 ms 걸리던 쿼리가 여기서는 200500 ms가 걸렸다. - 이후 제품이 많이 개선됐으며, 많은 문제가 해결된 듯 보인다.
PowerSync
- 문서상 가장 성숙한 옵션.
- 자체 호스팅하려면 Postgres WAL 통합 위에 MongoDB 레플리카 셋을 구축해야 한다.
- 프론트엔드가 모든 것을 스레드 간에 JSON으로 직렬화하기 때문에, 50개의 이메일을 렌더링하는 데 200 ms 이상이 걸렸다.
Replicache
- 마침내 적합한 선택. IndexedDB 위에 KV 스토어만 올린 형태—관계형 레이어도 그래프 모델도 없다.
- 번개처럼 빠르다. 우리는 쿼리를 위해 인‑메모리 인덱스 레이어를 직접 구축했다.
- 완전 오픈소스로 전환했으며, 개념적으로는 RAM 문제를 겪지 않는 WatermelonDB와 비슷하다.
Root cause: 모든 오프라인‑first 웹 솔루션은 결국 IndexedDB 위에 얹은 해킹이다. IndexedDB는 단순히 키‑값 저장소일 뿐이다. KV 스토어에 관계형 모델을 얹으면 10~50 k 행 정도에서 한계가 생기는데, 우리는 수백만 행을 다루고 있다.
Where we are now
- 2,000명 이상의 자연 사용자
- 부트스트랩(VC 없음)
- iOS, macOS, 웹에서 동작
- 스택: React Native, Expo, TanStack DB/Query, 백엔드 Postgres
- 프라이버시‑first: 데이터를 판매하지 않으며, 광고를 위해 이메일을 스캔하지 않는다
나는 세 번의 창업 경험이 있는 전 CTO다. 제품을 만들고 확장한 경험은 있지만, 이메일은 내가 작업해 본 분야 중 가장 어려운 도메인이다. 이메일 커뮤니티의 누군가가 내게 이렇게 말했듯이: “이메일에 대해 일하는 사람은 매우 적지만, 누군가가 이메일에 대해 일하기를 원하는 사람은 많다.”
IMAP, 오프라인‑first 아키텍처, 이메일 클라이언트 현황 혹은 다른 어떤 주제든 질문이 있으면 언제든 물어보라.