본문으로 건너뛰기

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로 설정된 테스트 유저 존재

방법:

  1. 해당 유저로 dta-wide-api 인증 엔드포인트 호출
  2. 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
1libs/feature/time-machine/src/lib/feature-time-machine.module.tsEDIT1
2libs/feature/time-machine/src/lib/feature-time-machine-tick.module.tsNEW1
3libs/feature/time-machine/src/index.tsEDIT1
4apps/dha-sleep-api/src/app/dev-tools/dev-tools.module.tsEDIT2
총계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 — 로직 변경 없음