Linear라는 프로젝트 관리 툴을 사용하며, 로컬-퍼스트 방식의 탁월한 속도와 사용자 경험에서 큰 영감을 받음. 기존 웹 앱에서 흔히 겪던 네트워크 지연, 로딩 상태, 페이지 리프레시 등이 전혀 느껴지지 않은 점이 인상적이었음. 이러한 경험을 통해 로컬-퍼스트(local-first) 패러다임의 기술적인 원리와 실제 적용 사례를 깊이 탐구하게 되었음. Linear의 기술적 비밀을 파헤치면서, 그들은 브라우저의 IndexedDB를 실제 데이터베이스처럼 활용하고 있다는 사실을 알게 됨. 모든 변경은 로컬에서 먼저 즉시 처리되고, 이후 GraphQL과 Websockets를 이용해 백그라운드에서 동기화가 이루어짐. Linear의 방식을 직접 구현하려 시도해보니 복잡도가 상당함을 깨달음. 2025년 기준, 로컬-퍼스트 생태계에서는 여러 강력한 솔루션이 등장함. Jazz는 "로컬-퍼스트 앱을 상태 업데이트만큼 쉽게 만든다"는 고유한 약속으로 눈길을 끎. Jazz는 Collaborative Values(CoValues) 라는 실시간 협업 구조체를 도입함. Jazz의 내부 구조는 다음과 같음: 이 구조는 프로토타이핑 및 빠른 UI 개발에 매우 생산적임. 하지만 몇 가지 특성상 고려해야 할 부분이 있음: 종단간 암호화로 인해 서버는 사용자의 데이터를 읽을 수 없음. 사전에 서버가 접근이 필요한 데이터를 명확히 정의하지 않으면, 감시나 악성 저장 방지 등 관리에 제한이 발생함 이벤트 소싱으로 인해 모든 변경 이력이 영구 저장됨. 덕분에 Undo/Redo가 매우 편리하지만, GDPR 등 법적 요구사항 고려시 삭제가 어렵다는 단점이 있음 삭제가 이루어지지 않아 저장공간 사용량이 점점 증가함. 소규모 프로젝트는 괜찮지만, 대규모 SaaS에서는 저장 비용이 크게 증가할 수 있음 Passkeys를 중심으로 한 인증 방식이 기본인데, 자체 개발이나 로컬 환경에서는 HTTPS, 인증서 관리, 키 이전 등 개발 초기에 번거로움이 존재함. 다만 Better Auth 통합 등 개선 예정임 이러한 제약에도 불구하고, Jazz의 개발 경험과 생산성은 매우 인상적임. 아직 초기 버전이나, 앞으로 다양한 문제들이 점차 해결될 전망임 Jazz와 달리, Electric SQL과 Zero는 점진적 접근 방식을 취함. 로컬-퍼스트 패러다임이 적합한 상황과 도전적인 상황을 다음과 같이 정리함 적합함: 도전적임: 로컬-퍼스트는 웹 개발의 패러다임 전환을 의미함. Linear는 이미 사용자 경험에서 큰 효과를 증명함. 개발자는 이러한 구조적 트레이드오프가 자신의 프로젝트에 적합한지 판단해야 함. Jazz로 직접 퍼스널 앱을 제작하며 실제 장단점과 추상화의 한계를 체험 중임. 생태계는 아직 초기 단계로, 향후 도구와 패턴이 성숙하며 개선될 것임. 그러나 데이터를 로컬에 두는 방식의 이점은 명확하며, 이는 사라지지 않을 전망임. 새로운 프로젝트에서 제약을 수용할 수 있다면 로컬-퍼스트를 경험해볼 가치가 충분함. 최악의 경우 새로운 아키텍처 패턴을 학습하게 되고, 최선의 경우 불가능할 정도로 빠른 사용자 경험을 구현할 수 있음. 300ms 응답 경쟁에서 이는 중요한 이점이 됨.
개요
Down the Rabbit Hole
The Challenge: This Is Not Trivial
The Local-First Ecosystem in 2025
Deep Dive: Jazz
The Mental Model
How Jazz Achieves This
The Trade-offs
Your Server Is Blind
Time Travel Is Mandatory
Storage Goes Brrr
Local Dev Still Has Quirks
But Honestly? Still Worth It
Exploring: Electric SQL and Zero
When Does Local-First Make Sense?
Looking Forward