mattermost-mobile/agent-ops/rules/domain/database/rules.md
toki f013531d65
Some checks failed
ci / test (push) Has been cancelled
Update project configuration and add agent-ops skills
2026-03-21 13:05:45 +09:00

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/ - 데이터 쓰기 operator
    • app/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 누락