- Reflect는 Figma, Notion, Google Sheets와 유사한 멀티플레이어 웹 애플리케이션을 구축하기 위한 새로운 프레임워크입니다.
- 이는 클라이언트 측 동기화 프레임워크인 Replicache의 발전 버전이며, 멀티플레이어 앱 개발을 더 쉽게 하기 위해 완전히 관리되는 서버를 추가했습니다.
- Reflect는 이제 처음으로 공개적으로 이용 가능합니다.
- 이 프레임워크는 협업 편집에서의 충돌 해결 문제를 다루며, 모든 사용자가 동일한 내용을 보고 충돌이 자연스럽게 해결되도록 합니다.
- CRDTs(Conflict-Free Replicated Data Types)와 같은 인기있는 웹 생태계 도구와 달리, Reflect는 비디오 게임 산업에서 인기 있는 Transactional Conflict Resolution 기술을 사용합니다.
- Reflect의 독특한 이점과 차이점은 이 동기화 엔진의 핵심 선택에서 비롯됩니다.
- Reflect는 mutators라는 JavaScript 함수를 사용하여 변경 사항을 구현하고, mutator가 호출되는 mutation record를 생성합니다.
- Mutation은 로컬에서 적용되고 서버로 스트리밍되며, 서버는 도착 시간에 따라 mutation을 선형화하여 다음 권한 있는 상태를 생성합니다.
- Reflect는 빠르게 움직이는 애플리케이션을 처리할 수 있으며, 이전 것들의 확인을 기다리는 동안 mutation을 추가합니다.
- 이 프레임워크는 되감기, 포크 및 브랜치 생성이 가능한 빠른 데이터 저장소와 들어오는 mutation을 따라잡을 수 있는 빠른 서버 측 저장소가 필요합니다.
- Reflect의 접근 방식은 잘 일반화되어, 산술 연산, 목록 작업, 고수준 불변성 강제 등 다양한 작업에 적합합니다.
- Reflect의 서버는 권한이 있으며, mutation의 결과를 자체적으로 다시 계산하고 모든 클라이언트가 그 결과를 볼 수 있습니다.
- 이 서버 권한은 세밀한 인증과 서버에서의 다른 코드 실행을 가능하게 합니다.
- Reflect는 또한 스키마 검증 및 마이그레이션과 같은 이점을 제공합니다.
- Reflect의 동기화 전략인 Transactional Conflict Resolution은 간단하고 유연하며 강력하여, 멀티플레이어 애플리케이션을 구축하기 위한 좋은 선택입니다.