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.ts | EDIT | services 배열에서 TimeTickService 제거 |
libs/feature/time-machine/src/lib/feature-time-machine-tick.module.ts | NEW | TimeTickService 전용 래퍼 모듈 |
libs/feature/time-machine/src/index.ts | EDIT | FeatureTimeMachineTickModule 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.ts에TimeTickServiceimport/usage가 없을 것libs/feature/time-machine/src/lib/feature-time-machine-tick.module.ts파일 존재libs/feature/time-machine/src/index.ts에FeatureTimeMachineTickModuleexport가 있을 것nx build feature-time-machine성공