
NestJS 기초
NestJS는 최신 자바스크립트 기능을 사용하는 NodeJS 백엔드 웹 프레임워크로, 아키텍처 문제를 해결하는 데 중점을 둡니다. TypeScript를 완벽하게 지원하며, Express와 Fastify 중 선택하여 HTTP 요청을 처리할 수 있습니다. 주요 기능으로는 모듈, 컨트롤러, 서비스, 미들웨어, 예외 필터, 파이프, 가드, 인터셉터, 데코레이터가 있습니다. 각 기능은 요청 처리 및 응답 반환, 데이터 유효성 검사, 권한 관리 등 다양한 역할을 수행합니다.
NestJS란?

NestJS 로고
NestJS는 자바스크립트 최신 기능을 사용하는 NodeJS 백엔드 웹 프레임워크이다. 서버 개발 시의 아키텍처를 누구든 비슷하게 설계할 수 있도록 아키텍처 문제를 해결하는데 중점을 두고 있다.
현업에서 사용 시 레거시 기술과 신규 기술이 공존하기 때문에 Express와 NestJS를 모두 알고 있어야 적절하게 잘 활용할 수 있다.
NestJS 특징
- NodeJS에서 실행하는 서버 사이드 프레임워크이다.
- TypeScript를 완벽하게 지원한다. (기본은 TypeScript, JavaScript도 사용이 가능)
- JavaScript의 최신 스펙을 사용한다. (babel 필수)
- HTTP 요청 부분은 추상화된 코드를 제공하여 Express (익스프레스) 와 Fastify (패스티파이) 중 선택하여 사용할 수 있다. (기본은 Express)
Express와 비교
Express는 최소한의 기능을 제공하는 반면 NestJS는 상대적으로 많은 기능을 제공한다.

NestJS 주요 기능
1. 모듈
각 애플리케이션에는 루트 모듈이라는 하나 이상의 모듈이 있다. 이는 Nest가 모듈과 컨트롤러, 모듈과 서비스의 관계 및 종속성을 해결하는 데 사용하는 내부 데이터 구조이다. 쉽게 말해 어떠한 주제의 캡슐화된 하나의 세트이다.
2. 컨트롤러
컨트롤러는 들어오는 요청을 처리하고 클라이언트에 응답을 반환하는 일을 담당한다.
컨트롤러에서 사용자의 요청 경로 (/api/user), 요청 메소드 (GET, POST, PUT, PATCH, DELETE)를 지정하고 요청 파라미터 등을 받을 수 있다.
3. 서비스
서비스는 실질적인 요청을 처리하는 일을 담당한다.
일반적으론 컨트롤러에서 요청을 받아 서비스의 로직을 실행한 후 결과를 컨트롤러에 리턴한다.
4. 미들웨어
미들웨어는 라우트 핸들러 이전에 호출되는 로직이다.
NestJS에 미들웨어는 요청이 들어왔을 때 가장 먼저 실행하는 로직이다.
5. 예외 필터
요청이 들어왔을 때 예외를 처리하고 사용자에게 친숙하고 적절한 응답을 자동으로 보내는 로직이다.
6. 파이프
요청으로 입력 데이터가 왔을 경우 해당 데이터의 유효성을 검사할 수 있고, 형 변환 또한 가능하다.
유효한 경우 다음 로직으로 그대로 전달하고, 그렇지 않을 경우 예외를 발생시킨다.
7. 가드
가드의 역할 및 책임은 하나이다. 런타임에 존재하는 특정 조건 (권한, 역할, ACL 등)에 따라 요청 핸들러를 처리여부를 결정하고 조건에 만족한다면 다음 로직을 수행하고 그렇지 않을 경우 예외를 발생시킨다.
일반적으로 기존 Express에서는 미들웨어에서 처리되었던 로직이고, 로그인 또는 권한이 필요한 기능에 대한 요청 처리에서 사용된다.
8. 인터셉터
실제 요청 메소드 실행 전, 실행 후에 추가 로직을 작성할 수 있다.
- 실행전 : 가드에서 조건이 만족되어 통과된 후
- 실행후 : 서비스에서 요청을 처리하고 컨트롤러에서 응답을 내보낸 후
9. 데코레이터 (예: 요청 파라미터)
HTTP 경로 핸들러와 함께 사용할 수 있는 유용한 매개변수 데코레이터 세트를 사용할 수 있다.
| 데코레이터 사용 | 기존 Express |
|---|---|
@Request(), @Req() | req |
@Response(), @Res() | res |
@Next() | next |
@Session() | req.session |
@Param() | req.params |
@Body() | req.body |
@Query() | req.query |
@Headers() | req.headers |
@Ip() | req.ip |
@HostParam() | req.hosts |
NestJS 생명주기
