NestJS는 Express와 함께 Node.js의 대표적인 서버 구축을 위한 프레임워크 중 하나이다.
Express와 용도는 같지만 사용해보면 둘은 다른 점이 많다.
NestJS를 사용하는 이유
아래 내용들은 내가 NestJS를 사용하는 이유이다.
개인적인 선호가 포함된 부분들도 있어서 참고만 하고 자세한 내용은 NestJS 공식문서를 참고하는 게 좋다.
코드의 통일성
Express에 비해 NestJS는 개발 구조에 대한 자유도 낮다.
자유도가 높을수록 좋은 것이 아닌가 하고 생각할 수 있지만 자유도가 높다는 말은 통일성이 부족하다는 말도 된다.
프로그램의 규모가 커지고 여러 명의 사람들과 협업을 하다 보면 이런 자유도가 오히려 독이 되는 경우가 많다.
개인적으로 다른 사람들의 Express 코드들을 찾아볼 때 개발자들마다 다른 코드 구조 때문에 특정 역할을 하는 코드를 찾는데 애먹는 경우가 많았다.
NestJS는 자유도를 낮추는 대신 이런 문제점들을 개선했다고 볼 수 있다.
정의된 각 클래스마다 역할이 있고 제한된 NestJS의 구조안에서 개발을 진행하게 된다.
이런 제한된 구조가 코드의 통일성을 높여준다.
Module class
NestJS는 관련 있는 기능들 등을 한 module class에 담아 캡슐화한다.
각 module들은 서로 import 가능하며 이는 코드 간 의존성을 낮춰준다.
즉 확장성, 유지보수성, 테스트 가능성 등이 향상된다.
Typescript
NestJS는 기본적으로 Typescript를 지원하며 Typescript 사용을 권장한다.
Express에서 Typescript를 사용하려면 직접 여러 가지 설정을 해주어야 하는 번거로움이 있지만 NestJS는 아무런 설정 없이 바로 사용이 가능하다.
Typescript를 사용하면 컴파일러단에서 오류를 잡아주어 애플리케이션의 예상치 못한 문제들을 미리 방지해준다.
또한 데코레이터 같은 Typescript의 실험적 기능들도 굉장히 적극적으로 사용하고 있는 모습을 볼 수 있다.
NestJS는 이러한 Typescript의 장점을 기본적으로 가지고 있다고 볼 수 있다.
간편한 테스트
초기 생성된 NestJS의 구조를 보면 spec.ts 파일을 볼 수 있는데 이는 테스트를 위한 파일이다.
기본적으로 NestJS는 간편한 Unit Test를 지원한다.
NestJS로 웹서버 구축하기
NestJS 프로젝트 생성 방법은 여러 가지가 있지만 이 글에서는 cli를 통한 방법을 기준으로 설명하겠다.
NestJS CLI 설치
npm i -g @nestjs/cli
CLI를 통해 새 프로젝트 생성 & 실행
# 새 프로젝트 생성
nest new <프로젝트명>
# nest 실행
npm run start
생성된 프로젝트의 구조는 다음과 같다.
- app.controller.spc.ts: 유닛 테스트를 위한 파일
- app.controller.ts: 기본 컨트롤러
- app.module.ts: root 모듈을 정의
- app.service.ts: 관련 있는 기능들을 클래스에서 분리해서 작성하고 사용 시 controller에 import 해서 사용
- main.ts: nest factory instance를 생성하는 엔트리 파일
생성한 nest 프로젝트를 처음 실행하면 localhost:3000
에 "Hello World!"가 표시됨을 알 수 있다.