TanStack Start가 어떤 프레임워크인지 알아보려다가 TanStack DB 문서로 로 넘어감. 문서를 읽다보니 실시간으로 데이터를 동기화하는 방법에서 ElectricSQL이라는 sync engine 라이브러리를 소개하는데, 이 라이브러리는 PostgreSQL을 기반으로 DB의 데이터 변화가 UI까지 실시간으로 쉽게 반영할 수 있게 해준다.
앱과 DB 사이에 일종의 middleware로 ElectricSQL 백엔드 서버가 있어야 하고, self-hosted로 운영할 수도 있고 cloud도 제공하는 모양. Cloud는 아직 beta, 비용은 받지 않는다.
DB의 변경사항을 실시간으로 읽어오고 여럿이 동시에 DB에 변경사항을 만드는 경우도 처리한다. 엔지니어라면 동시성 환경에서 발생하는 conflict를 어떻게 처리할지 당연히 궁금해 할 것. 찾아보니 어떤 식으로 처리하는지 간단하게 나와 있는데, 많은 경우 conflict를 고려하지 않아도 애플리케이션이 작동하는데 문제가 없다는 식으로 나와있다. 무슨소리야? (https://electric-sql.com/docs/guides/writes#yagni) 현실에서 conflict가 문제가 되는 순간이 거의 벌어지지 않는다는건가?
그러면서 컨퍼런스 영상을 하나 소개한다. ‘Muse’라는, Figma와 비슷하게 생긴 앱을 만든 Adam Winggins가 CRDTs(Conflict-free Replicated Data Types)를 적용해 사용자의 local에서 데이터를 처리하고 서버는 여러 device의 앱에서 데이터를 동기화하는 용도로만 사용한 경험을 소개한다.
그는 Local-first software라는 철학을 퍼트리는데 많은 에너지를 쓰는 것으로 보인다. 2019년 4월에 작성한 문서에 CRDTs에 대한 상세한 내용이 적혀있다: https://www.inkandswitch.com/essay/local-first/
사용자가 새로고침하지 않아도 실시간으로 데이터가 업데이트 되고, 오프라인 환경에서도 사용할 수 있는 앱을 만들어야 할 때 TanStack DB, ElectricSQL을 사용해서 만들어봐도 좋겠다.