NestJS V10에서는 SWC를 사용하여 컴파일을 공식 지원합니다. 그 이외에도 다양한 변화가 있지만 그 변화는 아래의 글에 정리했으니 참고 해주세요.
오늘은 NestJS를 V10으로 마이그레이션 한 후에 SWC를 적용하는 과정까지를 포스팅 합니다.
1. NestJS Project 생성하기.
먼저 Nest Cli를 이용하여 NestJS 프로젝트를 생성합니다.
npx nest new [project name]
Package Manager 선택이 나오는 데 저는 yarn을 사용하기에 yarn을 기준으로 포스팅 하겠습니다.
2. NestV10으로 Package 버전 변경하기
마이그레이션 하기 위해서는 공식 문서에서도 ncu(npm check updates)를 활용하여 Package 버전을 변경하라고 나와있습니다. 따라서 공식 문서에서 가이드해준 대로 ncu를 설치부터 해줍니다.
NCU는 package.json의 패키지들의 버전을 관리하는 툴 입니다.
해당 패키지는 특정 프로젝트에 종속되는 것이 아니기에, -g 옵션으로 전역으로 설치를 해줍니다. 만약 설치가 싫으시다면 npx를 사용하시는 방법도 있습니다.
yarn add -g npm-check-updates
자 이제 Project의 터미널을 열고 아래와 같이 입력합니다.
ncu -u -f /^@nestjs/
자 이제 Package를 V10으로 변경하는 과정은 끝났습니다. package.json 파일에 들어가면 NestJS 관련 패키지들의 버전이 10으로 변경되어있음을 확인이 가능합니다.
3. SWC 적용하기
NestJS의 패키지들을 V10으로 변경한 후 SWC를 사용하는 방법은 매우 간단합니다.
먼저 nest-cli.json 파일의 compilerOptions 옵션에 builder : swc만 추가합니다.
{
"$schema": "https://json.schemastore.org/nest-cli",
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"deleteOutDir": true,
"builder": "swc"
}
}
마지막으로는 2가지의 패키지를 추가로 설치하면 됩니다.
yarn add -D @swc/cli @swc/core
이제 터미널에 해당 명령어를 입력하면 프로젝트가 실행됩니다.
nest start -b swc
4. 적용하면서 생긴 문제점
해당 포스팅은 새로운 프로젝트를 만들어서 진행해서 막히는 부분이 없었으나 기존에 NestJS + Typeorm의 프로젝트를 V10으로 마이그레이션 하면서 2가지의 문제를 해결했었다.
(1) Can't Not Find Module
나는 기존에 tsconfig.json에서 절대 경로를 설정하여 절대 경로를 사용하고 있었으나, 이상하게도 절대 경로를 사용하면 모듈들을 찾지 못 하는 이슈들이 발견 되어 모든 경로를 다시 상대 경로로 수정하는 작업을 진행했다.
찾아보니 아직은 모듈이 불안정해서 절대 경로를 인식하지 못 하는 거 같긴 한데, 이 점은 차차 업데이트 되면 좋겠다.
(2) Typeorm에서 Model들의 순환 참조
Typeorm와 같은 ORM을 사용할 경우에 SWC는 순환 참조를 잘 처리하지 못 하기에 다음과 같이 해결해야한다고 한다. Ralation으로 모델을 감싸서 참조하는 방식으로 변경하였다.
// ** v9
@OneToMany(() => WorkspaceUser, (worksapceUser) => worksapceUser.user)
workspaceUser: WorkspaceUser[];
// ** v10 + swc
@OneToMany(() => WorkspaceUser, (worksapceUser) => worksapceUser.user)
workspaceUser: Relation<WorkspaceUser>[];
'B.E > Nest JS' 카테고리의 다른 글
NestJS에서 typeorm-transactional를 사용하여 트랜잭션 관리 (0) | 2024.05.13 |
---|---|
NestJs Event 처리(@nestjs/event-emitter) (0) | 2024.04.11 |
Nestjs V10의 변화점 (0) | 2023.10.11 |
Nestjs Swagger(1) - Swagger 설정 (0) | 2023.10.09 |
[Nest JS] 파이프(Pipe) (0) | 2022.11.14 |