Phase 99: 검증
빌드 검증
# Phase 1 완료 후
nx build feature-time-machine
# Phase 2 완료 후
nx build dha-sleep-api
nx build dta-wide-api
모든 빌드가 성공해야 구현 완료로 간주한다.
기능 테스트
테스트 1: dta-wide-api에서 TimeTickService 미실행 확인
방법: dta-wide-api 기동 로그 확인
기대 로그 (없어야 함):
TimeTickService started: interval=10000ms, increment=10000ms
기대 로그 (있어야 함):
# TimeTickService 관련 로그 없음
테스트 2: dha-sleep-api에서 TimeTickService 실행 확인
방법: dha-sleep-api 기동 로그 확인
기대 로그:
TimeTickService started: interval=10000ms, increment=10000ms
테스트 3: flowing=true 유저의 JWT 인증 정상화
전제: flowing=true로 설정된 테스트 유저 존재
방법:
- 해당 유저로 dta-wide-api 인증 엔드포인트 호출
TokenExpiredError없이 정상 응답 확인
기대 결과: HTTP 200 (이전: HTTP 401 + TokenExpiredError)
테스트 4: flowing 모드 동작 유지 확인 (dha-sleep-api)
방법: dha-sleep-api DevTools toggleFlow API 호출 후 10초 대기
# flowing 활성화
POST /dev-tools/timemachine/toggle-flow
{ "userId": "<test-user>", "flowing": true }
# 10초 후 상태 확인
GET /dev-tools/timemachine/status?userId=<test-user>
기대 결과: virtualTime이 ~10,000ms 증가
DB 즉시 조치 (배포 전)
flowing=true 상태로 남아있는 유저가 있다면 배포 전에 초기화:
-- flowing 상태 확인
SELECT user_id, virtual_time, flowing
FROM private.virtual_time
WHERE flowing = true;
-- flowing 비활성화
UPDATE private.virtual_time
SET flowing = false
WHERE flowing = true;
변경 파일 총 목록
| # | 파일 | 유형 | Phase |
|---|---|---|---|
| 1 | libs/feature/time-machine/src/lib/feature-time-machine.module.ts | EDIT | 1 |
| 2 | libs/feature/time-machine/src/lib/feature-time-machine-tick.module.ts | NEW | 1 |
| 3 | libs/feature/time-machine/src/index.ts | EDIT | 1 |
| 4 | apps/dha-sleep-api/src/app/dev-tools/dev-tools.module.ts | EDIT | 2 |
| 총계 | 1 NEW + 3 EDIT |
변경하지 않는 것:
apps/dta-wide-api/**— FeatureTimeMachineModule에서 TimeTickService가 제거되므로 코드 변경 불필요apps/dha-metabolic-api/**— toggleFlow 없음, 변경 없이 tick에서 분리됨libs/feature/auth/**— JWT clockTimestamp 로직 유지libs/feature/time-machine/src/lib/application/services/time-tick.service.ts— 로직 변경 없음