
NestJS는 Node.js에 기반을 둔 웹 API 프레임워크로서 Express 또는 Fastify 프레임워크를 래핑하여 동작합니다. (Express, Fastify 모두 Node.js를 쉽게 사용하기 위한 프레임워크 입니다.)
NestJs는 기본 설치 시 express를 사용합니다. Fasityfy는 Express와의 벤치마크 결과 2배정도 빠른 속도를 자랑합니다. 그럼에도 NestJS가 기본으로 Express를 사용하는 이유는 Express가 가장 널리 사용되고 있고, 수많은 미들웨어가 NestJS와 호환되기 때문입니다.
Node.js는 손쉽게 사용할 수 있고 뛰어난 확장성을 가지고 있지만, 과도한 유연함으로 인해 결과물 소프트웨어 품질이 일정하지 않고 알맞은 라이브러리를 찾기 위해 사용자가 많은 시간을 할애해야 합니다.
NestJS는 DB, 객체관계매핑(ORM), 설정(configuration), 유효성 검사 등 수많은 기본 기능을 제공합니다. 그러면서도 필요한 라이브러리를 쉽게 설치하고, 확장할 수 있는 Node.js장점을 그대로 가지고 있습니다.
Nest.JS는 앵귤러로 영향을 많이 받아 모듈/컴포넌트 기반으로 프로그램을 작성함으로써 재사용성을 높입니다.
그 외 제어의 역전(inversion of control IoC), 의존성 주입 (dependency injection DI), AOP(aspect-oriented programing)같은 객체 지향을 도입하였습니다.
프로그래밍 언어로는 타입스크립트를 기본으로 채택하여 타입스크립트가 가진 타입 시스템의 장점을 누릴 수 있습니다.
NestJS는 아래 요소들을 대부분 내장하고 있고, 내장하지 않은 기능 역시 쉽게 다른 모듈을 가져다 쓸 수 있습니다.
| Express | NestJS | |
|---|---|---|
| 유연함/확장성 | 가볍게 테스트용 서버를 띄울 수 있습니다. 아이디어를 빠르게 검증하는데에는 좋지만, 자유도가 높아 라이브러리를 찾는데 있어서 시간이 소요됩니다. 보일러 플레이트를 미리 얹어 놓은 깃허브 저장소를 활용해도 좋습니다. | 미들웨어, IoC, CQRS 등 이미 많은 기능을 프레임워크 자체에 포함합니다. 사용자는 문서를 보고 쉽게 따라할 수 있습니다. 원하는 기능이 없다면 라이브러리를 적용해서 사용할 수 있습니다. |
| 타입스크립트 지원 | 추가 설정 | 기본설정 |
| 커뮤니티 | 가장 큰 규모 | 꾸준히 증가 |
nest new project-name
설치를 마치면 보일러플레이트(꼭 필요한 기본 기능을 미리 준비해놓은 코드) 코드가 생성됩니다.
운영이 아닌 개발 단계에서는 npm run start 대신 npm run start:dev 명령어를 이용하는게 좋습니다. package.json에 기술된 스크립트를 보면 start:dev 키에 해당하는 값은 nest start --watch입니다. (--watch 옵션을 소스 코드를 변경해서 코드를 저장할 때마다 서버를 다시 구동하는 옵션입니다.)
포트는 기본 3000번으로 설정되어 있는데, main.ts 파일을 보면 3000번 포트를 설정했음을 확인할 수 있습니다.
async function bootstrap(){
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
추가로 공부할꺼
1. express란?
2. 라이브러리란?
3. 프레임워크란?