<aside>
목차
</aside>
<aside> ✏️
Nest에서 토큰(token)은 의존성을 주입하기 위한 ‘식별자’를 말한다.
// 등록 (app.module.ts)
providers: [CatsService] // == 토큰: CatsService, 값: CatsService 클래스
@Injectable()로 선언된 곳에 주입한다.<aside> 📖
S**pring은** 컴파일 타임에 타입 정보를 유지하며, 클래스 이름 자체를 토큰처럼 사용하는 반면,
NestJS는 런타임에서 DI를 처리하기 때문에 ‘토큰(Token)’ 개념이 필수이다.
즉, 둘 다 비슷한 구조지만 실행 타이밍, 언어 특성, 런타임 반영 수준에서 차이점을 보인다.
</aside>
| 구분 | Spring (Java) | NestJS (TypeScript) |
|---|---|---|
| 언어 | Java (정적 타입) | TypeScript (런타임에 타입 사라짐) |
| DI 방식 | 클래스명 기반 주입 (타입으로 추론) | 런타임 토큰 기반 주입 |
| 컨테이너 식별자 | 클래스 or @Qualifier(“이름”) | 클래스 or 문자열 or symbol |
| 컴파일 시 타입 유지 | ✅ (리플렉션 불필요) | ❌ (런타임에서 타입 정보 필요) |
| DI 등록 | @Component, @Service 자동 탐지 | @Injectable + @Module.providers 수동 등록 |
| DI 해석 방식 | 리플렉션 없이 컴파일러가 결정 | 리플렉션(Metadata)과 토큰 |
// TypeScript
constructor(private userService: UserService) {}
// 컴파일 후 JS
constructor(userService) { }