본문으로 건너뛰기

TimeMachine 도메인 이벤트 스토밍

개요

본 문서는 TimeMachine 도메인의 이벤트 스토밍 워크샵 결과를 정리한 것입니다. TimeMachine 도메인은 불면증 디지털 치료제 서비스에서 시간을 가상으로 조작하여 테스트를 용이하게 하는 지원 도메인입니다. 사용자가 90일간의 프로그램을 진행하며 시간의 흐름에 따라 개인화된 치료 프로그램을 제공받는 시스템을 효과적으로 테스트하기 위해 필요합니다. 이 구현에서는 시간 변경의 기준으로 사용자의 치료 주기 일차(dayIndex)를 사용합니다.

바운디드 컨텍스트 참조

TimeMachine 도메인과 다른 도메인 간의 협력 관계는 독립적인 지원 도메인으로서 시간 조작 기능을 제공합니다. 시스템 복잡도를 낮추기 위해 Backend는 하나의 모놀리식 아키텍처로 우선 개발될 예정이지만, 도메인 경계는 논리적으로 명확히 구분하여 설계합니다. 이 문서에서는 주로 TimeMachine 도메인 내부의 이벤트와 명령에 집중합니다.

참고: 도메인 개념과 용어에 대한 자세한 내용은 domain-model.md 문서를 참조하세요.

도메인 이벤트

도메인에서 발생하는 중요한 변화나 사실을 나타내는 이벤트들입니다.

1. 시간 관리 이벤트

1.1 백엔드 이벤트

이벤트설명트리거
VirtualTimeCreated사용자의 가상 시간이 최초 생성됨CreateVirtualTime
VirtualTimeQueried가상 시간이 조회됨GetCurrentTime
VirtualTimeChanged가상 시간이 변경됨 (dayIndex 변경 포함)SetVirtualTimeByDayIndex, ResetVirtualTime
VirtualTimeDateChanged가상 시간의 날짜가 변경됨 (주로 dayIndex 변경 결과)날짜가 변경되는 시간 변경
UserVirtualDayChanged특정 사용자의 가상 날짜가 변경됨 (TimeMachine으로 인한)dayIndex 이동, 일시정지 기간 날짜 이동, 수동 시간 설정
SystemDayChanged시스템 전체의 날짜가 변경됨 (실제 자정 도달 등)실제 시간의 자정 도달, 시스템 시간 조정
VirtualTimeResetToReal가상 시간이 실제 시간으로 재설정됨ResetVirtualTime, DisableTimeMachine
MovedToDayIndex특정 치료 주기 일차(dayIndex)로 시간이 이동됨SetVirtualTimeByDayIndex
MovedToSuspensionDay특정 일시 정지 기간 내 날짜로 시간이 이동됨SetVirtualTimeBySuspensionDay
UserVirtualTimeChanged특정 사용자의 가상 시간이 변경됨 (VirtualTimeChanged로 통합 가능)SetUserVirtualTimeByDayIndex, SetUserVirtualTimeBySuspensionDay
TimeMachineEnabled사용자의 TimeMachine 기능이 활성화됨EnableTimeMachine
TimeMachineDisabled사용자의 TimeMachine 기능이 비활성화됨DisableTimeMachine
ProdTimeMachineActivationAttemptedPROD 환경에서 TimeMachine 활성화 시도 감지됨EnableTimeMachine in PROD
TimeSettingAuthorizationFailed권한 없는 사용자의 시간 설정 시도 차단됨권한 검증 실패
InvalidDayIndexRequested유효하지 않은 dayIndex (예: 1 이하)로 시간 설정 시도SetVirtualTimeByDayIndex
InvalidSuspensionSequenceRequested유효하지 않은 일시 정지 기간 순서로 시간 설정 시도SetVirtualTimeBySuspensionDay
InvalidDayWithinSuspensionRequested일시 정지 기간 내 유효하지 않은 날짜로 시간 설정 시도SetVirtualTimeBySuspensionDay

1.2 프론트엔드 이벤트

이벤트설명트리거
DayIndexSettingRequested사용자가 dayIndex 기반 시간 변경을 요청함dayIndex 변경 UI 조작
SuspensionDaySettingRequested사용자가 일시 정지 기간 내 날짜 기반 시간 변경을 요청함정지 기간 날짜 변경 UI 조작
TimeResetRequested사용자가 실제 시간으로 재설정을 요청함재설정 버튼 클릭
TimeMachineToggleRequested사용자가 TimeMachine 기능 활성화/비활성화 토글을 요청함토글 버튼 클릭
VirtualTimeHistoryRequested사용자가 가상 시간 변경 이력 조회를 요청함이력 조회 UI 접근
UserVirtualTimeSelectionChanged테스터가 다른 사용자의 가상 시간 선택을 변경함사용자 선택 UI 조작
ProdTimeMachineAccessCodeEnteredPROD 환경에서 TimeMachine 접근을 위한 코드가 입력됨비밀 코드 입력

2. 데이터 정합성 이벤트

2.1 백엔드 이벤트

이벤트설명트리거
FutureDataRolledBack과거 시점 (낮은 dayIndex)으로 이동 시 미래 데이터가 롤백됨과거 dayIndex로의 시간 이동
RollbackCompleted데이터 롤백 작업이 완료됨롤백 처리 완료
RollbackFailed데이터 롤백 작업이 실패함롤백 처리 중 오류 발생
FutureDataCleanedAfterDisableTimeMachine 비활성화 후 미래 데이터가 정리됨DisableTimeMachine
DataDeletionRequested다른 도메인에 데이터 삭제 요청이 발행됨 (cutoff time 이후 데이터 삭제)TimeMachine 비활성화, 과거로 시간 이동
UserDataCleanupInitiated특정 사용자의 데이터 정리 작업이 시작됨데이터 삭제 요청 처리 시작
TimeBasedDataDeletionCompleted각 도메인에서 시간 기반 데이터 삭제가 완료됨도메인별 데이터 삭제 완료
RollbackHistoryRecorded롤백 이력이 기록됨롤백 작업 완료
SameUserDataRollbackInitiated특정 사용자의 데이터만 롤백 시작됨사용자별 시간 변경
RollbackTransactionInitiated데이터 일관성을 위한 롤백 트랜잭션 시작됨롤백 작업 시작
RollbackTransactionCompleted롤백 트랜잭션이 완료됨롤백 트랜잭션 완료

2.2 프론트엔드 이벤트

이벤트설명트리거
LocalCacheCleared로컬 캐시가 초기화됨시간 변경 이벤트 수신
CacheInvalidationStarted캐시 무효화 작업이 시작됨시간 변경 감지
CacheInvalidationCompleted캐시 무효화 작업이 완료됨캐시 무효화 완료
TimeTravelLoadingStarted시간 이동 처리 중 로딩 UI 표시 시작dayIndex 변경 요청
TimeTravelLoadingCompleted시간 이동 처리 완료 및 로딩 UI 종료처리 완료
DisableConfirmationRequestedTimeMachine 비활성화 전 사용자 확인 요청됨비활성화 요청
DisableDataDeletionWarningDisplayed비활성화 시 데이터 삭제 경고 표시됨비활성화 확인 과정
DataDeletionProgressUpdated데이터 삭제 진행 상태 업데이트됨삭제 작업 진행 중

3. 이벤트 관리 이벤트

3.1 백엔드 이벤트

이벤트설명트리거
PublishTimeChangeEvent시간 변경 이벤트 발행TimeChangeEventPublished 이벤트 발생
PublishUserVirtualDayChangeEvent사용자 가상 날짜 변경 이벤트 발행 (사용자별 일차별 로직 트리거용)UserVirtualDayChanged 이벤트를 GCP Pub/Sub에 발행
PublishSystemDayChangeEvent시스템 날짜 변경 이벤트 발행 (전역 일차별 로직 트리거용)SystemDayChanged 이벤트를 GCP Pub/Sub에 발행
RetryEventPublish이벤트 발행 재시도EventPublishRetried 이벤트 발생
LogEventHistory이벤트 발행 로그 기록EventLogRecorded 이벤트 발생
SubscribeToTimeEvents시간 변경 이벤트 구독이벤트 구독 설정
ProcessSubscribedEvent구독한 이벤트 처리EventPushedToEndpoint 이벤트 발생
PublishStatusChangeEvent상태 변경 이벤트 발행TimeMachineStatusChangeEventPublished 이벤트 발생
SendProdActivationAlertPROD 활성화 알림 발송ProdActivationAlertSent 이벤트 발생
GetEventHistory이벤트 발행 이력 조회이벤트 이력 정보 제공
FilterEventsByUser사용자별 이벤트 필터링필터링된 이벤트 정보 제공

3.2 프론트엔드 이벤트

이벤트설명트리거
EventHistoryRequested이벤트 발행 이력 조회 요청됨이력 조회 UI 접근
EventRetryRequested실패한 이벤트 재시도 요청됨재시도 버튼 클릭
EventStatusUpdated이벤트 처리 상태 업데이트됨상태 변경
UserEventFilterApplied사용자별 이벤트 필터 적용됨필터 UI 조작

정책(Policies)

시스템의 자동화된 비즈니스 규칙입니다.

시간 관리 정책

백엔드 정책

  • 테스터 권한 검증 정책: 테스터 권한을 가진 사용자만 시간 변경 가능
  • 사용자별 가상 시간 관리 정책: 사용자별로 독립적인 가상 시간 관리
  • 특정 dayIndex로 이동 정책: 목표 dayIndex에 해당하는 날짜를 사용자 주기 시작일 및 중단 이력을 고려하여 계산하고, 해당 날짜의 00:00(사용자 타임존)으로 설정
  • dayIndex 유효성 정책: dayIndex는 2 이상이어야 함 (1일차 이전 설정 불가)
  • SetTimeBySuspensionDayPolicy (정지 기간 내 특정 날짜로 이동 정책): 사용자의 UserSuspensionHistory를 참조하여 요청된 suspensionSequence에 해당하는 정지 기간과 그 안의 dayWithinSuspension 번째 날짜를 계산하고, 해당 날짜의 00:00(사용자 타임존)으로 설정. 입력 값(순서, 기간 내 날짜) 유효성 검증 포함.
  • 사용자 가상 날짜 변경 감지 정책: 사용자의 TimeMachine 조작으로 인한 가상 날짜 변경 시 UserVirtualDayChanged 이벤트 발행하여 해당 사용자의 컨텐츠 해금, rTIB 계산 등 개별 로직 트리거
  • 시스템 날짜 변경 감지 정책: 실제 시간의 자정 도달 또는 시스템 시간 조정으로 인한 날짜 변경 시 SystemDayChanged 이벤트 발행하여 모든 사용자에게 영향을 미치는 전역 일차별 로직 트리거
  • 환경별 접근 정책: 환경(개발, 테스트, 스테이징, PROD)에 따른 접근 제한
  • 캐시 관리 정책: 가상 시간 캐싱을 통한 성능 최적화

프론트엔드 정책

  • TimeMachine 기능 활성화/비활성화 정책: 사용자의 선택에 따른 기능 전환
  • 오프라인 대응 정책: 네트워크 연결 상태에 따른 로컬 시간 사용
  • 환경별 UI 표시 정책: 환경에 따른 TimeMachine 기능 노출 제한
  • PROD 보안 메커니즘 정책: PROD 환경에서 특별한 권한을 가진 테스터에게만 기능 제공

데이터 정합성 정책

백엔드 정책

  • 데이터 롤백 정책: 과거 시점 (낮은 dayIndex)으로 시간 이동 시 미래 데이터 롤백
  • 롤백 데이터 관리 정책: 롤백된 데이터 영구 제거
  • 사용자별 데이터 격리 정책: 다른 사용자의 데이터에 영향 없는 롤백
  • 비활성화 데이터 정리 정책: TimeMachine 비활성화 시 사용자의 가상 시간을 해당 사용자의 Timezone 기준 현재 실제 날짜 00:00으로 재설정하고, 재설정된 시간 이후의 데이터는 영구 삭제
  • 크로스 도메인 데이터 삭제 정책: TimeMachine 비활성화 또는 과거로 시간 이동 시 DataDeletionRequested 이벤트를 발행하여 다른 도메인들이 cutoff time 이후 데이터 삭제
  • 도메인별 삭제 완료 보고 정책: 각 도메인은 데이터 삭제 완료 후 TimeBasedDataDeletionCompleted 이벤트로 결과 보고

프론트엔드 정책

  • 캐시 무효화 정책: 시간 변경 시 로컬 캐시 초기화
  • 사용자 알림 정책: 데이터 삭제 영향에 대한 사용자 알림 및 확인

이벤트 관리 정책

백엔드 정책

  • 이벤트 발행 정책: 날짜 변경 시 GCP Pub/Sub 이벤트 발행 (dayIndex 정보 포함)
  • 사용자 가상 날짜 변경 이벤트 발행 정책: UserVirtualDayChanged 이벤트 발행을 통해 해당 사용자의 개별 일차별 로직(컨텐츠 해금, rTIB 계산 등) 트리거
  • 시스템 날짜 변경 이벤트 발행 정책: SystemDayChanged 이벤트 발행을 통해 모든 사용자에게 영향을 미치는 전역 일차별 로직 트리거
  • 이벤트 재시도 정책: 발행 실패 시 재시도 메커니즘
  • 이벤트 로깅 정책: 발행 및 구독 이력 기록
  • PROD 알림 정책: PROD 환경에서 TimeMachine 활성화 시 관리자 알림

프론트엔드 정책

  • 이벤트 상태 표시 정책: 이벤트 처리 상태 실시간 반영
  • 사용자별 필터링 정책: 사용자별 이벤트 필터링 지원

보안 정책

백엔드 정책

  • RBAC 정책: 역할 기반 접근 제어 구현
  • 데이터 암호화 정책: 저장 데이터 암호화
  • 통신 보안 정책: TLS 적용
  • 감사 로깅 정책: 보안 관련 로그 기록 및 보호

프론트엔드 정책

  • PROD 제한 정책: PROD 환경에서 일반 사용자에게 기능 노출 제한
  • 접근 코드 정책: 특별한 제스처나 코드를 통한 접근 제한

명령(Commands)

도메인 이벤트를 발생시키는 사용자 의도나 시스템 동작입니다.

1. 시간 관리 명령

1.1 백엔드 명령

명령설명영향
CreateVirtualTime사용자의 가상 시간 초기 생성VirtualTimeCreated 이벤트 발생
GetCurrentTime현재 가상 시간 조회VirtualTimeQueried 이벤트 발생
SetVirtualTimeByDayIndex가상 시간을 특정 치료 주기 일차(dayIndex)로 설정VirtualTimeChanged, MovedToDayIndex 이벤트 발생 (과거 이동 시 FutureDataRolledBack 트리거)
SetVirtualTimeBySuspensionDay가상 시간을 특정 일시 정지 기간 내 날짜로 설정VirtualTimeChanged, MovedToSuspensionDay 이벤트 발생 (과거 이동 시 FutureDataRolledBack 트리거)
ResetVirtualTime가상 시간을 실제 시간으로 재설정VirtualTimeResetToReal 이벤트 발생
CheckDateChange시스템의 현재 시간에서 날짜 변경 여부 확인시스템 날짜 변경 시 SystemDayChanged 이벤트 발생, 사용자 가상 날짜 변경 시 UserVirtualDayChanged 이벤트 발생
GetTimeChangeHistory시간 변경 이력 조회시간 변경 이력 제공
GetUserVirtualTime특정 사용자의 가상 시간 조회사용자별 가상 시간 정보 제공
EnableTimeMachine사용자의 TimeMachine 기능 활성화TimeMachineEnabled 이벤트 발생
DisableTimeMachine사용자의 TimeMachine 기능 비활성화 (사용자 Timezone 기준 실제 시간 00:00으로 재설정 및 데이터 롤백 트리거)TimeMachineDisabled, VirtualTimeResetToReal, FutureDataRolledBack 이벤트 발생
GetTimeMachineStatus사용자의 TimeMachine 기능 활성화 상태 조회활성화 상태 정보 제공
VerifyTesterPermission테스터 권한 검증권한 검증 결과 제공

1.2 프론트엔드 명령

명령설명영향
RequestDayIndexChangedayIndex 기반 시간 변경 요청DayIndexSettingRequested 이벤트 발생
RequestSuspensionDayChange일시 정지 기간 내 날짜 기반 시간 변경 요청SuspensionDaySettingRequested 이벤트 발생
RequestTimeReset실제 시간으로 재설정 요청TimeResetRequested 이벤트 발생
ToggleTimeMachineTimeMachine 기능 토글 요청TimeMachineToggleRequested 이벤트 발생
ViewTimeChangeHistory시간 변경 이력 조회 요청VirtualTimeHistoryRequested 이벤트 발생
SelectUserForTimeMachine시간 관리할 사용자 선택UserVirtualTimeSelectionChanged 이벤트 발생
EnterProdAccessCodePROD 환경 접근 코드 입력ProdTimeMachineAccessCodeEntered 이벤트 발생
DisplayTimeMachineDashboard여러 사용자의 가상 시간 상태 대시보드 표시대시보드 UI 렌더링

2. 데이터 정합성 명령

2.1 백엔드 명령

명령설명영향
RollbackFutureData미래 데이터 롤백FutureDataRolledBack 이벤트 발생
PermanentlyDeleteRolledBackData롤백된 데이터 영구 삭제영구 데이터 삭제 처리
GetRollbackHistory롤백 이력 조회롤백 이력 정보 제공
CleanFutureDataAfterDisable(사용되지 않음 - DisableTimeMachine 명령이 롤백 트리거)
PublishDataDeletionRequest다른 도메인에 데이터 삭제 요청 발행DataDeletionRequested 이벤트 발생
InitiateUserDataCleanup사용자 데이터 정리 작업 시작UserDataCleanupInitiated 이벤트 발생
ReportDataDeletionCompletion도메인별 데이터 삭제 완료 보고TimeBasedDataDeletionCompleted 이벤트 발생
InitiateUserDataRollback특정 사용자의 데이터 롤백 시작SameUserDataRollbackInitiated 이벤트 발생
BeginRollbackTransaction롤백 트랜잭션 시작RollbackTransactionInitiated 이벤트 발생
CommitRollbackTransaction롤백 트랜잭션 커밋RollbackTransactionCompleted 이벤트 발생

2.2 프론트엔드 명령

명령설명영향
ClearLocalCache로컬 캐시 초기화LocalCacheCleared 이벤트 발생
InvalidateCache캐시 무효화CacheInvalidationStarted 이벤트 발생
ShowTimeTravelLoading시간 이동 로딩 UI 표시TimeTravelLoadingStarted 이벤트 발생
ConfirmTimeMachineDisableTimeMachine 비활성화 확인DisableConfirmationRequested 이벤트 발생
ShowDataDeletionWarning데이터 삭제 경고 표시DisableDataDeletionWarningDisplayed 이벤트 발생
UpdateDataDeletionProgress데이터 삭제 진행 상태 업데이트DataDeletionProgressUpdated 이벤트 발생
ViewRollbackHistory롤백 이력 조회롤백 이력 UI 표시
ShowRollbackWarning시간만 과거로 이동해도 데이터 롤백됨을 경고경고 메시지 표시

3. 이벤트 관리 명령

3.1 백엔드 명령

명령설명영향
PublishTimeChangeEvent시간 변경 이벤트 발행TimeChangeEventPublished 이벤트 발생
PublishUserVirtualDayChangeEvent사용자 가상 날짜 변경 이벤트 발행 (사용자별 일차별 로직 트리거용)UserVirtualDayChanged 이벤트를 GCP Pub/Sub에 발행
PublishSystemDayChangeEvent시스템 날짜 변경 이벤트 발행 (전역 일차별 로직 트리거용)SystemDayChanged 이벤트를 GCP Pub/Sub에 발행
RetryEventPublish이벤트 발행 재시도EventPublishRetried 이벤트 발생
LogEventHistory이벤트 발행 로그 기록EventLogRecorded 이벤트 발생
SubscribeToTimeEvents시간 변경 이벤트 구독이벤트 구독 설정
ProcessSubscribedEvent구독한 이벤트 처리EventPushedToEndpoint 이벤트 발생
PublishStatusChangeEvent상태 변경 이벤트 발행TimeMachineStatusChangeEventPublished 이벤트 발생
SendProdActivationAlertPROD 활성화 알림 발송ProdActivationAlertSent 이벤트 발생
GetEventHistory이벤트 발행 이력 조회이벤트 이력 정보 제공
FilterEventsByUser사용자별 이벤트 필터링필터링된 이벤트 정보 제공

3.2 프론트엔드 명령

명령설명영향
ViewEventHistory이벤트 발행 이력 보기EventHistoryRequested 이벤트 발생
RequestEventRetry실패한 이벤트 재시도 요청EventRetryRequested 이벤트 발생
FilterEventsByUser사용자별 이벤트 필터링UserEventFilterApplied 이벤트 발생
UpdateEventStatus이벤트 상태 업데이트EventStatusUpdated 이벤트 발생

액터(Actors)

시스템과 상호작용하는 주체들입니다.

내부 액터

액터설명주요 명령
일반 사용자모바일 앱 사용자TimeMachine 활성화/비활성화, 시간 조회
테스터테스트 권한이 있는 사용자가상 시간 설정, 사용자별 시간 변경
시스템 관리자TimeMachine 시스템 관리자모니터링, 롤백 관리, 이벤트 관리
모바일 애플리케이션시간 조회, 캐시 관리

외부 액터

액터설명주요 명령
GCP Pub/Sub메시징 서비스이벤트 발행 및 구독
Backend 서비스다른 마이크로서비스시간 조회, 이벤트 구독
Web Chat 서비스테스터용 인터페이스시간 변경, 사용자 선택, 이력 조회
Redis Cache캐시 서비스시간 데이터 캐싱

집계(Aggregates)

연관된 엔티티와 값 객체들의 클러스터입니다.

VirtualTime 집계

  • 루트: VirtualTime
  • 엔티티: UserVirtualTime, TimeChangeRecord
  • 값 객체: ChangeType, DayIndex, SuspensionSequence(선택적), DayWithinSuspension(선택적)
  • 불변식:
    • 하나의 사용자는 하나의 VirtualTime 상태만 가질 수 있음
    • 시간 변경 이력은 불변으로 유지됨 (TimeChangeRecord에 변경 유형 및 관련 정보 포함: dayIndex 또는 suspensionSequence/dayWithinSuspension 등)
    • 시간 변경은 테스터 권한이 있는 사용자만 가능
    • dayIndex는 2 이상이어야 함
    • 설정된 시간은 계산된 dayIndex 해당 날짜 또는 정지 기간 내 날짜의 00:00(사용자 타임존)임

DataRollback 집계

  • 루트: RollbackManager
  • 엔티티: RollbackRecord, RollbackTransaction
  • 값 객체: RollbackAction, AffectedEntity
  • 불변식:
    • 롤백은 과거 시점으로 이동 시에만 발생
    • 롤백된 데이터는 영구 삭제되며 복구 불가
    • 롤백은 사용자별로 독립적으로 수행됨
    • 롤백 과정에서 데이터 일관성이 유지되어야 함

EventPublish 집계

  • 루트: EventManager
  • 엔티티: TimeChangeEvent, EventLog
  • 값 객체: EventStatus, EventMetadata
  • 불변식:
    • 날짜 변경 시 항상 이벤트가 발행됨
    • 발행 실패한 이벤트는 재시도 메커니즘을 통해 처리됨
    • 모든 이벤트 발행 이력은 로그로 기록됨
    • 이벤트에는 사용자 식별 정보가 포함됨

TimeMachineActivation 집계

  • 루트: ActivationManager
  • 엔티티: TimeMachineActivationStatus, ActivationChangeRecord
  • 값 객체: ActivationState, Environment
  • 불변식:
    • 기능 활성화/비활성화 상태는 사용자별로 관리됨
    • PROD 환경에서는 특별 권한을 가진 사용자만 기능 활성화 가능
    • 비활성화 시 사용자의 가상 시간은 해당 사용자의 Timezone 기준 현재 실제 날짜 00:00으로 재설정되며, 이후 데이터는 영구 삭제됨
    • 상태 변경 이력은 영구 보관됨

핫스팟 및 해결책

1. 다중 사용자 시간 관리 확장성

문제: 대규모 사용자의 개별 가상 시간 관리 시 성능 저하 해결책:

  • 사용자별 인덱싱 전략으로 DB 성능 향상
  • Redis 캐싱을 통한 조회 성능 최적화
  • 단일 Backend 내에서 효율적인 가상 시간 관리 구현

2. 데이터 롤백 일관성

문제: 과거 시점으로 이동 시 관련 데이터의 일관된 롤백 보장 해결책:

  • 트랜잭션 기반 롤백 메커니즘 구현
  • 롤백 작업의 원자성 보장
  • 사용자별 독립적 롤백 처리로 영향 범위 제한

3. 이벤트 발행 신뢰성

문제: GCP Pub/Sub 이벤트 발행 실패 시 데이터 불일치 가능성 해결책:

  • 재시도 메커니즘 구현
  • 이벤트 발행 상태 추적 및 모니터링
  • 실패 시 알림 및 수동 개입 지원

4. 환경별 접근 제어

문제: PROD 환경에서 TimeMachine 기능의 안전한 제한 해결책:

  • 환경별 접근 정책 차등 적용
  • 특별 권한 및 이중 인증 메커니즘
  • PROD 환경 활성화 시 관리자 알림 자동화
  • 단일 Backend 내에서 모든 환경에 대한 일관된 접근 제어 정책 적용

5. 오프라인 시간 조회

문제: 네트워크 연결 불안정 시 시간 조회 기능 유지 해결책:

  • 로컬 시간 대체 메커니즘 구현
  • 네트워크 상태에 따른 전략 패턴 적용
  • 기능 비활성화 상태에서의 완전 오프라인 지원

6. 대용량 데이터 롤백 성능

문제: 대량 데이터의 효율적인 롤백 처리 해결책:

  • 비동기 롤백 처리 구현
  • 롤백 작업 분할 및 배치 처리
  • 진행 상태 모니터링 및 UI 표시

7. dayIndex 및 정지 기간 계산 복잡성

문제: dayIndex 계산 시 사용자의 주기 시작일 및 모든 중단/재개 이력을 정확히 반영해야 하고, 정지 기간 내 특정 날짜 계산 시에도 복잡한 UserSuspensionHistory 조회 및 날짜 계산 로직이 필요하여 외부 도메인(UserCycle) 의존성 발생 및 로직 복잡성 증가 해결책:

  • @shared/utilsdayIndex정지 기간 날짜 계산 로직을 포함한 견고한 시간 유틸리티 함수 구현 및 테스트
  • UserCycle 도메인과의 명확한 인터페이스 정의 및 안정적인 데이터 조회 보장
  • 계산 로직에 대한 단위 테스트 및 통합 테스트 강화
  • 계산 결과를 캐싱하여 성능 최적화 고려 (단, 중단 이력 변경 시 캐시 무효화 필요)

변경 이력

버전날짜작성자변경 내용
1.0.02025-04-01bok@weltcorp.com최초 작성
1.1.02025-05-06bok@weltcorp.comdayIndex 기반 시간 변경 반영 (이벤트, 정책, 명령, 집계, 핫스팟 등 수정)
1.1.12025-05-07bok@weltcorp.com'일시 정지 기간 중 날짜 이동' 기능 관련 이벤트, 정책, 명령, 집계, 핫스팟 정보 추가
1.2.02025-06-02bok@weltcorp.comDayChanged 이벤트를 SystemDayChanged(시스템 레벨)와 UserVirtualDayChanged(사용자 레벨)로 분리하여 설계 개선
1.3.02025-07-24bok@weltcorp.com크로스 도메인 데이터 삭제 이벤트 추가 (DataDeletionRequested, UserDataCleanupInitiated, TimeBasedDataDeletionCompleted)