2.1 KiB
2.1 KiB
| name | description | type |
|---|---|---|
| database | WatermelonDB 이중 DB 시스템 - 앱 DB와 서버별 DB | supporting |
Database Domain
목적 / 책임
WatermelonDB 기반 이중 데이터베이스를 관리한다. DatabaseManager 싱글톤, operator, 스키마, 모델을 담당한다.
포함 경로
app/database/(전체)app/database/manager/- DatabaseManager 싱글톤app/database/models/app/- 앱 전역 모델 (서버 목록 등)app/database/models/server/- 서버별 모델 (채널, 유저, 포스트 등)app/database/operator/- 데이터 쓰기 operatorapp/database/schema/- DB 스키마 정의
docs/database/- DB 스키마 문서
제외 경로
app/queries/(Query Layer는 별도 - 여기서 DB를 읽는다)
주요 구성 요소
- DatabaseManager: 모든 DB 인스턴스 관리 싱글톤 (
app/database/manager/index.ts) - App Database: 서버 목록 등 전역 앱 상태 (하나만 존재)
- Server Database: 서버별 채널/유저/포스트 데이터 (서버당 하나)
- Operators: transformer/handler/comparator 패턴으로 데이터 쓰기
- Schema: 테이블 정의 및 마이그레이션
유지할 패턴
- DB 경로: iOS는 App Group, Android는
${documentDirectory}/databases/ - Operator를 통해 batch 작업으로 데이터 쓰기
- Sync handler는 create/update/delete 전체 라이프사이클 처리 필수
- 스키마 변경 시 반드시 버전 번호 증가 + 문서(
docs/database/) 업데이트 - Query Layer(
app/queries/)는query*,observe*,get*,prepare*패턴
다른 도메인과의 경계
- 모든 도메인: DB 직접 접근보다 Query Layer(
app/queries/) 사용 권장 - network 도메인: remote action이 API 응답을 operator에 전달
금지 사항
- 스키마 변경 후
docs/database/문서 미업데이트 - Sync handler에서 stale 레코드 삭제 누락 (
prepareDestroyPermanently()필수) - 테스트에서
extraLokiOptions: {autosave: false}누락 (메모리 누수) - 테스트 후
DatabaseManager.destroyServerDatabase()cleanup 누락