Skip to content

[Feat] Room 도입과 계정 스코프 정리 #581

Description

@edv-Shin

어떤 기능인가요?

오프라인 캐시(타이머·운동 기록)의 바탕이 되는 Room 골격을 올립니다. Entity와 화면은 없고, 데이터베이스와 세션 정리 연결까지만 합니다.

  • Room 의존성은 이미 걸려 있습니다 (data/build.gradle.kts의 room-runtime, room-ktx, ksp compiler). 이 이슈는 UndabangDatabase 골격과 배선만 추가합니다
  • 계정 경계를 테이블보다 먼저 잠급니다. 로그아웃이나 계정 전환 때 이전 사용자의 데이터가 남으면 안 됩니다
  • 세션을 지우는 경로는 두 갈래입니다. MainViewModel.transitionToLogin()(강제 로그아웃·invalid_grant·회원ID 게이트)과 SettingFragmentclearLocalSession(). 둘 다 ClearSessionUseCase를 거치므로 삭제를 여기 한 곳에 연결합니다
  • domain은 Room을 모르게 합니다. FcmTokenSyncScheduler와 같은 패턴으로 domain에 SessionDataCleaner 인터페이스를 두고 data 구현이 지웁니다

테이블 규칙을 이 이슈에서 정합니다: 모든 테이블에 memberId 컬럼을 두고 조회에 계정 조건을 겁니다. 적용은 첫 Entity가 생기는 후속 이슈(운동 기록·타이머)부터입니다.

이 이슈만으로는 화면에 보이는 변화가 없습니다. Entity와 DAO, 캐시 표시는 후속 이슈에서 다룹니다.

작업 상세 내용

  • UndabangDatabase 골격 추가 (버전 1, exportSchema = true, 스키마 경로 설정)
  • data 모듈 Hilt 모듈에서 데이터베이스 제공
  • domain에 SessionDataCleaner 인터페이스, data 구현이 clearAllTables() 호출
  • ClearSessionUseCase가 세션 정리 시 SessionDataCleaner를 부르도록 추가
  • ClearSessionUseCaseTest에 삭제 호출 검증 추가
  • 로그아웃 후 재로그인 시 DB가 비어 있는지 수동 확인

참고할만한 자료(선택)

오프라인 1단계 디자인 문서의 로컬 저장 방식(Room 채택)과 위험 요소 1(계정 전환 시 이전 사용자 데이터 노출) 기준입니다. #562 후속.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions