NestJS v8에서 v9으로 업그레이드 하는 법
최근에 NestJS v9의 Major Update가 있었다. REPL 기능이라든지 Swagger 업그레이드라든지 필요한 기능들이 있어서 업그레이드를 진행해보고자 했다. v9 업데이트에 관해서는 아래의 글에서 간단하게 참고할 수 있다.
https://trilon.io/blog/nestjs-9-is-now-available
NestJS v9 is now available
Today I am excited to announce the official release of Nest 9: A progressive Node.js framework for building efficient and enterprise-grade, server-side applications.
trilon.io
v9.0.0 PR은 https://github.com/nestjs/nest/pull/9588 이것이다.
v9으로 업그레이드하기 전에 마이그레이션 가이드(https://docs.nestjs.com/migration-guide)를 참고하자.
NestJS를 최신 버전으로 업그레이드 하는 법
예전 방식
예전에는 Nest CLI를 업그레이드하고 Nest CLI(nest update 명령어)를 통해 Nest관련 dependency를 업레이드하고 npm같은 패키지 매니저로 그 외의 dependency도 업그레이드하면 됐다.
하지만 안정성 문제로 NestJS v9부터 Nest CLI의 update 명령어가 없어졌다.
업그레이드 하는 법
업그레이드라고 해봤자 적절하게 package.json(그리고 .lock 파일에)에 명시된 dependency를 높은 버전으로 업데이트해 주는 것이다. (업그레이드에 따른 버전이나 호환성이 깨지는 문제는 본인이 해결해야 한다.)
현재는 dependency 업그레이드를 npm이나 yarn같은 사용하는 패키지 매니저를 통해 하도록 안내하고 있다. 나는 yarn을 쓰고 있기 때문에 yarn 명령어로 업그레이드했다.
yarn을 사용하고 있는 경우에는 다음의 명령어를 사용하면 된다.
yarn upgrade-interactive
- --latest 옵션을 주면 package.json에 명시되어 있는 dependency 버전을 무시하고 최신 버전으로 업그레이드하도록 할 수 있다.
- 참고로 위 명령어를 입력하고 dependency를 검사하는데 오래 기다려야 하는지 몇 분 기다려야 할 수도 있다.
yarn upgrade-interactive 명령어는 yarn outdated와 yarn upgrade를 섞어놓은 버전이다. 그래서 만료된 패키지들을 둘러보고 원하는 패키지를 선택하여 업그레이드를 진행할 수 있다.
yarn upgrade-interactive를 실행하면 다음과 같이 모든 만료된 패키지들을 표시해준다. 보통 버전의 첫번째 숫자가 바뀌는 Major Update는 (X.0.0 -> Y.0.0) backward-incompatible하기 때문에 주의해서 업그레이드해야 한다. Minor Update(0.X.0 -> 0.Y.0)는 기본적으로 호환이 되지만 기능이 추가되는 것이고 Patch Update(0.0.X->0.0.Y)는 보통 기능적인 변화가 없는 선에서 작은 버그 수정나 패치를 했음을 말한다.
친절하게 색으로 어떤 업데이트가 적용될 것인지 가독성 좋게 보여준다. 키보드 화살표 키로 이동하면서 업그레이드를 원하는 패키지에만 space를 눌러서 선택 및 선택 취소를 할 수 있다. 다 선택했으면 엔터를 눌러서 업그레이드를 진행하면 된다.
Major Update(빨강)은 정말 주의하자. 개인적으로 뭐가 바뀌는지 모르고 딱히 업데이트에 대한 필요성이 없다면 차라리 안 하는 것이 낫다고 생각한다.
어쨌든 선택을 완료하고 키보드의 Enter 키를 누르면 다음과 같이 업그레이드가 적용되기 시작한다.
업그레이드 끝!
업그레이드를 진행하고 package.json을 확인해보았다.
package.json과 .lock 파일을 보면 위와 같이 선택한 패키지들의 버전 업데이트가 이루어졌음을 확인할 수 있다.
Major Update는 뭔가 찝찝함을 끌고 가게된다. 아무리 마이그레이션 가이드를 참고해서 어디서 코드가 깨질지 예측하고 어디서 업데이트가 이루어졌는지 알더라도 문제가 발생하지 않을 것이라 확신할 수 없기 때문이다.
업데이트가 완료됐다면 테스트는 필수닷!