
NestJS는 현재 Node.js 진영에서 활발히 쓰이는 백엔드 프레임워크로, Express와 Fastify를 기반으로 만들어졌으며 TypeScript를 100% 지원한다.
(vanilla javascript로도 사용할 수 있지만 괜한 짓이다. TypeScript를 쓰는 것이 타입 에러로부터 안전하다)
내가 학교에서 웹 수업을 들었을 땐 Node.js 기반이라 해도 Express밖에 경험해 보지 못했는데 어느 샌가 NestJS가 치고 올라오더니 이젠 채용공고에서 심심찮게 볼 수 있는 프레임워크가 되었다. 여전히 Java 공화국이라 불리우는 대한민국이지만, Node.js 기반으로 백엔드를 구성하고 있는 기업들은 대다수가 NestJS를 쓰고 있다.

물론 전세계적으로 백엔드 프레임워크의 인지도나 사용 면에서 Express가 아직은 앞서고 있지만, Express의 장점이자 단점인 높은 자유도는 짜임새 있고 규모있는 애플리케이션을 만들기 힘들다. NestJS는 훨씬 더 체계적인 아키텍쳐를 지원한다. NestJS는 OOP를 지원하므로 훨씬 더 객체지향적인 설계를 할 수 있다.
(최근엔 OOP보다 FP를 지향하는 움직임도 보인다)
NestJS 애플리케이션은 크게 Module - Controller - Provider(sevice)의 세 계층으로 이루어지는데, 관련있는 provider, module들을 한 module 안에 묶어 응집력 있게 구성하는 건 Angular로부터 영향을 받았다고 한다.
// angular의 module 예시
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
@NgModule({
imports: [ BrowserModule ],
providers: [ Logger ],
declarations: [ AppComponent ],
exports: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
또 기존 JavaScript에선 생소한 Decorator를 쓰고 있는데, Angular나 Spring 을 써본 사람들이라면 모듈이나 컨트롤러 등을 decorator를 붙여 표현하고 있는게 다소 익숙해 보일 것이다.
// spring controller 예시
@Controller
public class HomeController {
private static final Logger log = LoggerFactory.getLogger(HomeController.class);
@RequestMapping("/")
public void hello() {
return "hello world!"
}
}
이 글을 쓰는 시점은 NestJS를 학습하고 현업에서 쓰고 있는 지 (아직) 9개월 밖에 되지 않은 때이지만, 처음 Nest를 접했을 당시와 달리 확실히 지금은 이 프레임워크를 더 많이 이해하게 되어서 정리하는 김에 블로깅을 해 두려고 한다.
NestJS 프로젝트 생성하기
Spring boot도 Spring initalizr를 사용하면 빠르게 프로젝트를 구성할 수 있지만, NestJS도 만만찮게 빠르고 간편하게 프로젝트를 만들 수 있는 방법을 제공한다. 무려 CLI를 통해서.
우선 npm 으로 @nestjs/cli를 설치한다. g 옵션을 줘야 내 컴퓨터 어느 곳에서든 nestjs cli를 사용할 수 있다.
$ npm i -g @nestjs/cli
그리고 nest 명령어를 사용하여 새로운 프로젝트를 생성한다.
$ nest new [프로젝트 이름]
혹시 내가 지금 작업하고 있는 디렉터리를 바로 NestJS 프로젝트로 쓰고자 한다면 그냥 아래와 같이 써주면 된다.
$ nest new ./
그리고 나면 어떤 패키지 매니저를 쓸 거냐고 묻는데, npm/yarn/pnpm 셋 중 원하는 걸 쓰면 된다. npm이 좀 더 보편적인 것 같긴 하다.

패지키 매니저까지 선택해주고 나면 Nest가 알아서 typescript 설정과 boilerplate 코드 생성을 해준다.

설치가 다 되면 다음과 같이 모든 기본 설정들이 갖춰져 있다. prettier나 tsconfig를 수동으로 셋팅해주려면 상당히 귀찮은데 nestjs cli는 이 모든 걸 자동으로 해준다. manual하게 설정해주고 싶은 부분이 있으면 따로 수정해주면 된다.
