본문으로 건너뛰기

Phase 1: TimeTickService 격리 (lib 변경)

참조 패턴: libs/feature/time-machine/src/lib/feature-time-machine.module.ts 변경 파일: 1 NEW + 2 EDIT

변경 파일

파일유형설명
libs/feature/time-machine/src/lib/feature-time-machine.module.tsEDITservices 배열에서 TimeTickService 제거
libs/feature/time-machine/src/lib/feature-time-machine-tick.module.tsNEWTimeTickService 전용 래퍼 모듈
libs/feature/time-machine/src/index.tsEDITFeatureTimeMachineTickModule export 추가

1-1. feature-time-machine.module.ts [EDIT]

파일: libs/feature/time-machine/src/lib/feature-time-machine.module.ts

역할: TimeMachine 도메인의 핵심 모듈. 모든 서비스가 임포트함.

변경 내용

// 변경 전 (line 12):
import { TimeTickService } from './application/services/time-tick.service';

// 변경 후: (line 12 삭제)
// 변경 전 (line 60):
const services = [UserTimeManager, RollbackCoordinator, UserClockService, TimeTickService];

// 변경 후 (line 60):
// TimeTickService는 FeatureTimeMachineTickModule에서 관리.
// flowing 모드가 필요한 서비스만 FeatureTimeMachineTickModule을 임포트할 것.
const services = [UserTimeManager, RollbackCoordinator, UserClockService];

참조 패턴: 기존 services 배열 패턴 유지, TimeTickService만 제거


1-2. feature-time-machine-tick.module.ts [NEW]

파일: libs/feature/time-machine/src/lib/feature-time-machine-tick.module.ts

역할: TimeTickService를 포함하는 opt-in 모듈. flowing 모드가 필요한 서비스만 임포트. FeatureTimeMachineModule을 re-export하여 임포터의 DI가 끊기지 않도록 함.

import { Module } from '@nestjs/common';
import { FeatureTimeMachineModule } from './feature-time-machine.module';
import { TimeTickService } from './application/services/time-tick.service';

/**
* TimeMachine flowing 모드를 위한 Tick 모듈.
*
* FeatureTimeMachineModule과 달리 TimeTickService를 포함하여
* 10초마다 flowing=true 유저의 virtualTime을 자동으로 전진시킨다.
*
* 임포트 가이드:
* - flowing 모드를 직접 관리하는 서비스(예: dha-sleep-api)만 임포트
* - dta-wide-api, dha-metabolic-api 등 인증/조회만 하는 서비스는 임포트 금지
*/
@Module({
imports: [FeatureTimeMachineModule],
providers: [TimeTickService],
// NestJS re-export 패턴:
// exports에 imports된 모듈을 포함하면 해당 모듈의 exports가 이 모듈을 임포트한
// 모든 모듈에서도 사용 가능해진다.
// → DevToolsModule이 FeatureTimeMachineTickModule만 임포트해도
// UserTimeManager, UserClockService 등이 DI로 주입된다.
exports: [FeatureTimeMachineModule],
})
export class FeatureTimeMachineTickModule {}

참조 패턴: libs/feature/time-machine/src/lib/feature-time-machine.module.ts의 Module 구조


1-3. index.ts [EDIT]

파일: libs/feature/time-machine/src/index.ts

역할: @feature/time-machine alias의 public API.

변경 내용

// 변경 전 (전체, line 1-5):
export * from './lib/feature-time-machine.module';
export * from './lib/domain/errors/time-machine.errors';
export * from './lib/domain/errors/time-machine-error-codes.enum';
export * from './lib/application/services/user-time.manager';
export * from './lib/application/services/user-clock.service';

// 변경 후 (line 2 추가):
export * from './lib/feature-time-machine.module';
export * from './lib/feature-time-machine-tick.module';
export * from './lib/domain/errors/time-machine.errors';
export * from './lib/domain/errors/time-machine-error-codes.enum';
export * from './lib/application/services/user-time.manager';
export * from './lib/application/services/user-clock.service';

검증 포인트

  • libs/feature/time-machine/src/lib/feature-time-machine.module.tsTimeTickService import/usage가 없을 것
  • libs/feature/time-machine/src/lib/feature-time-machine-tick.module.ts 파일 존재
  • libs/feature/time-machine/src/index.tsFeatureTimeMachineTickModule export가 있을 것
  • nx build feature-time-machine 성공