8P by neo 5달전 | favorite | 댓글 1개
  • Local-First 소프트웨어: 데이터를 주로 로컬에 저장하고, 필요할 때만 인터넷을 통해 동기화하거나 백업하는 소프트웨어
  • Local-First 의 문제점
    • 사용자가 데이터를 소유하고 통제할 수 있다는 점은 좋음
    • 하지만 여전히 여러 장치 간 온라인 동기화를 위해서는 동기화 서버가 필요함.
    • 회사가 망하면 동기화 서버도 사라지므로 동기화가 불가능해짐
    • 어떻게 해결해야 할까 ?

Dropbox를 이용한 해결책

  • 클라우드 동기화: Dropbox, iCloud Drive, OneDrive, Google Drive 등 다양한 클라우드 기반 파일 동기화 솔루션 사용 가능함
  • 장점: 많은 사람들이 이미 사용 중이고, 여러 구현체가 있어 대체 가능함
  • 단점: 파일 동기화는 단순한 프로토콜로, 동기화 이벤트나 충돌 해결 기능이 부족함

버전 1: 매우 단순한 방법

  • 상태를 파일에 저장하고 Dropbox로 동기화
  • 두 기기에서 상태를 변경하면 충돌 파일이 생김
  • CRDT(Conflict-free Replicated Data Types)를 사용하면 충돌 해결 가능
    • CRDT는 항상 병합할 수 있는 데이터 타입 모음
  • 충돌 파일을 열어 상태를 병합하고 다시 저장하는 방식으로 해결

버전 2: 클라이언트별 파일

  • 각 클라이언트에 고유 파일을 부여하여 충돌 방지
  • 다른 클라이언트의 파일이 변경되면 이를 감지하여 병합
  • 로컬에서만 수정하므로 Dropbox가 충돌을 보고하지 않음

버전 3: 연산 기반

  • CRDT가 Operation-based 라면 작업을 별도의 추가 전용 파일에 기록 가능
  • 각 클라이언트는 자신만의 파일에 기록하여 충돌 방지
  • 작업 로그가 길어지면 파일을 청크로 분할하여 동기화 효율성을 높임

결론

  • 사용자가 완전한 제어와 소유권을 가지는 로컬-퍼스트 애플리케이션을 구축하려면 데이터 동기화가 필요함
  • Dropbox와 같은 파일 동기화 서비스는 간단하지만 효과적인 동기화 방법을 제공
  • 맞춤형 솔루션만큼 실시간 동기화는 아니지만, 일상적인 동기화에는 충분함
  • 예를 들어, Apple Photos처럼 자신만의 사진을 하루 끝에 어디서든 볼 수 있는 정도로 충분함
  • 사용자가 자신의 클라우드를 사용하여 무료로 영구적인 동기화 가능

GN⁺의 의견

  • Local-First 소프트웨어의 중요성: 사용자가 데이터를 직접 소유하고 제어할 수 있어 개인정보 보호와 데이터 보안에 유리함.
  • 동기화 서비스의 한계: Dropbox와 같은 서비스는 기본적인 동기화는 가능하지만, 복잡한 동기화 시나리오에서는 한계가 있음.
  • CRDT의 활용: CRDT를 사용하면 충돌 해결이 용이해져 동기화의 신뢰성을 높일 수 있음.
  • 대체 솔루션: Syncthing과 같은 오픈 소스 동기화 솔루션도 고려해볼 만함.
  • 기술 도입 시 고려사항: Local-First 소프트웨어를 도입할 때는 동기화 서버의 안정성과 데이터 충돌 해결 방안을 충분히 검토해야 함.
Hacker News 의견
  • 로컬-퍼스트 애플리케이션의 백엔드 동기화 서버를 로컬에서 호스팅할 수 있게 하는 것이 중요함: 특정 기능을 제공하기 위해 단순 파일 동기화로는 충분하지 않음. 사용자가 언제든지 "workspace.zip"을 저장하고 "server.exe/.bin"을 다운로드하여 백엔드를 자체 호스팅할 수 있게 함.

  • 로컬-퍼스트 애플리케이션의 수익화 어려움: Obsidian 모델처럼 기본 앱은 무료로 제공하고 네트워크 기능에 대해 요금을 부과하는 방식이 있음. Yjs를 사용하여 로컬-퍼스트 + 협업 앱을 구축하는 것을 추천함.

  • CRDTs가 항상 최선의 선택은 아님: 파일 동기화에는 적합할 수 있지만, 중앙 서버가 비즈니스 로직을 검증하고 병합 충돌을 해결하는 것이 더 나을 수 있음. 분산 상태 기계 접근법은 복잡하고 유지보수가 어려울 수 있음.

  • RemoteStorage 프로토콜: 모든 애플리케이션이 이를 구현하고 사용자가 자신의 RemoteStorage URL을 제공할 수 있음. 그러나 대부분의 구현이 유지보수되지 않음.

  • 클라우드 기반 파일 동기화 솔루션의 한계: 협업 소프트웨어나 실시간 소프트웨어에는 적합하지 않음. 벤더 종속 없이 협업 기능을 제공하는 모델이 필요함.

  • 로컬-퍼스트 소프트웨어의 장점: 개발이 쉬워지고 사용자 경험이 향상됨. Nuxt나 Next와 비슷한 개발자 경험을 제공하는 로컬-퍼스트 프레임워크가 등장할 것으로 예상됨.

  • 클라우드 스토리지의 위험성: 클라우드 제공자가 데이터를 삭제하거나 접근을 차단할 수 있음. 로컬-퍼스트 클라우드 스토리지를 사용할 때는 모든 파일을 다운로드하도록 설정해야 함.

  • PWA를 사용한 동기화 경험: AWS와 WebDAV를 사용하여 동기화하는 PWA를 구축했음. 동기화 시간을 줄이기 위해 읽기 및 쓰기 시간을 최소화하는 것이 중요함.

  • 클라우드 퍼스트 아이디어의 한계: 대륙 규모의 네트워크 중단이 발생하면 클라우드 퍼스트 아이디어의 문제점이 드러날 것임.

  • 모바일에서 로컬-퍼스트 동기화의 어려움: iPhone은 Dropbox와 같은 파일 동기화를 백그라운드에서 처리하기 어려움.