본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스
성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.
fastcampus.co.kr
0426 토
학습 내용 정리
NestJS에서의 버전관리
Versioning 이론
URI Versioning
Header, Media Type Versioning
수강후기
오늘 수업에서는 NestJS에서 버전 관리(Versioning) 를 적용하는 방법을 학습했다. API 서버를 운영하면서 데이터 구조나 요청 포맷이 변경될 경우 기존 클라이언트와 충돌이 발생할 수 있는데, 이를 해결하기 위해 버전 관리가 필수적이라는 점을 다시 한번 느낄 수 있었다.
이번 수업에서는 Versioning 이론을 먼저 살펴본 후, 실습을 통해 URI Versioning, Header Versioning, 그리고 Media Type Versioning까지 다양한 방식의 버전 관리 기법을 배웠다. 그중에서도 실습에서는 Media Type Versioning을 중심으로 코드를 작성해 보았다.
구체적으로, app.enableVersioning() 함수를 사용하여 서버에서 버전 관리를 활성화했다. 이때 type: VersioningType.MEDIA_TYPE으로 설정하고, key는 'v='로 지정하여, 요청의 Accept 헤더에 버전 정보를 담는 방식을 적용했다.
async function bootstrap() {
const app = await NestFactory.create(AppModule, {
logger: ['verbose'],
});
app.enableVersioning({
type: VersioningType.MEDIA_TYPE,
key: 'v=',
});
}
Controller 부분에서는 두 가지 버전을 나누어 작성해 보았다. 하나는 version 2를 명시한 MovieControllerV2, 다른 하나는 모든 버전에 대응하는 VERSION_NEUTRAL 설정을 한 MovieController이다. 각각은 다음과 같이 구현되었다.
@Controller({
path: 'movie',
version: '2'
})
export class MovieControllerV2 {
@Get()
getMovies() {
return [];
}
}
@Controller({
path: 'movie',
version: VERSION_NEUTRAL,
})
@UseInterceptors(ClassSerializerInterceptor)
export class MovieController {
constructor(private readonly movieService: MovieService) {}
}
이렇게 실제로 버전이 다른 컨트롤러를 작성하고 서버를 실행해보니, 클라이언트가 어떤 버전을 요청하느냐에 따라 서로 다른 응답을 받을 수 있다는 점이 확실히 체감되었다. 단순히 이론만으로는 이해하기 어려웠던 부분을, 코드를 직접 다뤄보면서 명확히 알 수 있어 매우 유익한 시간이었다.
이번 수업을 통해 NestJS에서의 버전 관리 방법을 실전처럼 익힐 수 있었고, 앞으로 내가 개발하는 API에도 버전 전략을 세워 적용하는 데 큰 도움이 될 것 같다. 특히 Media Type Versioning처럼 URI를 깔끔하게 유지하면서도 유연하게 대응할 수 있는 방법에 대해 배울 수 있어서 의미가 깊었다.
사진



