데이터

로컬 저장·서버 동기화

Room 기록과 원격 전송 상태를 따로 확인합니다.

기준일
이 페이지에서

로컬 저장

Room은 앱 데이터의 로컬 기준 저장소입니다. 센서 배치, 건강 지표·세션, 설문 응답, 외부 지표는 각 저장 계층을 통해 기록됩니다. 설정과 일부 상태는 DataStore 등의 보조 저장소를 사용합니다.

네트워크가 없더라도 이미 저장된 로컬 기록과 서버에 반영된 기록은 구분할 수 있습니다. 다만 음성 업로드나 인증을 선행하는 제출 경로까지 모두 오프라인 완료가 보장되는 것은 아닙니다.

저장 모드와 백엔드

manifests/services/backend.json을 로더가 읽습니다. 파일 읽기·파싱 실패 시 코드 기본값은 backend="firebase", storageMode="local_and_server"입니다.

CODE
{
  "backend": "firebase",
  "storageMode": "local_only"
}

이 예제는 로컬 전용 저장 모드입니다. 서버와 함께 저장하려면 local_and_server를 사용합니다. Supabase 경로는 선택값 supabase와 해당 서버 설정을 사용합니다. 서버 키나 실제 참여자 정보를 문서 예제에 넣지 않습니다.

동기화 상태

상태해석
PENDING전송 대기 상태
SYNCED해당 저장 경로가 업로드 성공으로 표시한 상태
FAILED실패 또는 격리된 기록. 데이터 종류의 처리 정책 확인
SOFT_DELETED일부 설문 등에서 사용하는 삭제 상태

상태별 재시도·삭제 처리는 DAO와 데이터 소스마다 다릅니다. 모든 테이블이 동일한 상태 전이나 재시도 간격을 갖는다고 설명하지 않습니다. 네트워크 복구 후 실제 상태와 원격 기록을 함께 확인하세요.

연구·참여자 경로

Firestore 경로는 다음과 같은 연구·참여자 계층을 사용합니다. 식별자는 가상 예제입니다.

CODE
studies/demo-study/participants/demo-participant/
  sensor_batches/
  survey_responses/
  health_metrics/
  health_sessions/
  external_metrics/

등록 식별자가 없으면 전송을 보류하는 경로가 있습니다. Supabase는 별도 데이터 소스를 사용하므로 Firestore 경로를 그대로 적용하지 않습니다.

payload와 음성 파일

센서 Firestore 전송은 payloadJson을 우선 사용하고 크기에 따라 압축·생략 표시를 처리합니다. SYNCED만으로 전체 payload 보존을 판단하지 않습니다.

음성 응답의 파일 저장 정책은 별도로 적용됩니다. 로컬 파일 경로가 기록에 있다고 해서 원격 파일이 업로드된 것은 아닙니다. 반대로 서버 전용 정책은 성공 후 로컬 파일 정리 경로가 있습니다.

문서 근거

현재 작업 트리 기준 · 소스 경로 · HEAD 8213e6b7

  • app/src/main/java/com/hdil/datacollection/config/BackendConfig.kt
  • app/src/main/java/com/hdil/datacollection/config/BackendConfigLoader.kt
  • core/store/src/main/java/com/hdil/datacollection/store/sync/FirestorePaths.kt
  • core/store/src/main/java/com/hdil/datacollection/store/sync/SensorFirestoreDataSource.kt
  • core/store/src/main/java/com/hdil/datacollection/store/sync/api/BackendType.kt
  • app/src/main/java/com/hdil/datacollection/ingest/SurveyResponseSubmitterImpl.kt
  • core/db/src/main/java/com/hdil/datacollection/db/DataCollectionDatabase.kt
  • app/src/main/java/com/hdil/datacollection/di/RemoteDataSourceModule.kt
DTRAC Android연세대학교 · 이봉신 연구팀