# Local, first, forever

> Clean Markdown view of GeekNews topic #15520. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15520](https://news.hada.io/topic?id=15520)
- GeekNews Markdown: [https://news.hada.io/topic/15520.md](https://news.hada.io/topic/15520.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-06-26T09:42:23+09:00
- Updated: 2024-06-26T09:42:23+09:00
- Original source: [tonsky.me](https://tonsky.me/blog/crdt-filesync/)
- Points: 8
- Comments: 1

## Summary

Local-First 소프트웨어는 데이터를 주로 로컬에 저장하고, 필요할 때만 인터넷을 통해 동기화하거나 백업합니다. 사용자가 데이터를 직접 소유하고 제어할 수 있어 개인정보 보호와 데이터 보안에 유리합니다. 하지만 여러 장치에서 같이 사용하려면 동기화가 필요하며 이를 위해서는 별도의 서버가 필요합니다. 이럴때 Dropbox 같은 클라우드 동기화 서비스는 간단하고 효과적인 동기화 방법을 제공하지만, 복잡한 동기화 시나리오에서는 한계가 있습니다. CRDT를 활용하면 충돌 해결이 용이해져 동기화의 신뢰성을 높일 수 있으며, Syncthing과 같은 오픈 소스 동기화 솔루션도 고려해볼 만합니다.

## Topic Body

- 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 소프트웨어를 도입할 때는 동기화 서버의 안정성과 데이터 충돌 해결 방안을 충분히 검토해야 함.

## Comments



### Comment 26608

- Author: neo
- Created: 2024-06-26T09:42:23+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40786425) 
- **로컬-퍼스트 애플리케이션의 백엔드 동기화 서버를 로컬에서 호스팅할 수 있게 하는 것이 중요함**: 특정 기능을 제공하기 위해 단순 파일 동기화로는 충분하지 않음. 사용자가 언제든지 "workspace.zip"을 저장하고 "server.exe/.bin"을 다운로드하여 백엔드를 자체 호스팅할 수 있게 함.

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

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

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

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

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

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

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

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

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