<aside>

목차

</aside>

1. 토큰이란 무엇인가?


<aside> ✏️

Nest에서 토큰(token)은 의존성을 주입하기 위한 ‘식별자’를 말한다.

// 등록 (app.module.ts)
providers: [CatsService] // == 토큰: CatsService, 값: CatsService 클래스

2. Spring 과 비교


<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)과 토큰

3. 왜 NestJS는 토큰이 필요한가?


// TypeScript
constructor(private userService: UserService) {}

// 컴파일 후 JS
constructor(userService) { }