서문 및 소개
들어가기에 앞서
이 문서는 Nest.js의 공식문서를 바탕으로 작성했습니다. 따라서 이 문서는 전반적인 흐름은 공식 문서와 비슷하며 설명도 많은 부분이 공식 문서를 바탕으로 합니다. 다만 공식 문서 자체가 초보자들을 위한 문서는 아니고 좀 생략된 부분도 많다보니 초보자들이 읽고 이해하기가 쉽지 않습니다. 따라서 흐름만 참고는 하는데 중간중간에 제가 난입해서 설명하는 부분도 있고, 원문 자체가 잘 이해하기 힘들게 쓰여있으면 아예 이해가도록 썼습니다. 회사 내부 주니어 개발자 개발용으로 만든겁니다.
이 글을 읽기 전에
기본적인 Express 지식과 타입스크립트 지식이 있다고 가정합니다. Express는 워낙 책과 정보가 많아서 소개를 생략하고, 타입스크립트 지식이 없으신 분들은 타입스크립트 핸드북(영어)이나 번역된 문서를 참고해주시기 바랍니다.
또한 이 글은 Nest의 공식문서 번역이 아닙니다. 물론 공식 문서를 바탕으로 제멋대로 쓴 글입니다. 또한 클라우드 환경에서 쓴다는 가정하에 File Upload
, Queue
등은 생략하였습니다.
그리고 시간날 때마다 쓰고 있으니까 빨리 써달라고 보채지 말아주시기 바랍니다 ㅠㅠ
소개
Nest(NestJS)는 효율적이고 확장 가능한 Node.js 서버 사이드 애플리케이션을 구축하기 위한 프레임워크입니다. 대부분의 Nest의 코드는 타입스크립트로 만들어졌으며 타입스크립트를 완전하게 지원합니다. 하지만 Nest는 Express와 동급은 아닙니다. Nest는 HTTP 요청을 다루는 웹서버로 내부적으로 Express를 사용하고 있습니다. 즉 Nest는 Express 위에서 돌아가는 레이어에 불과합니다.
아! 참고로 Express가 기본 웹서버지만 Express 대신 Fastify를 사용하도록 구성 할 수도 있습니다.
그럼 왜 Nest?
Nest가 각광받는 이유는 여러 가지가 있습니다. 제가 생각하기로는 3가지로 요약되는데요.
첫 번째, 어플리케이션이 점점 커지고 복잡해지면 아키텍쳐건 어플리케이션이건 확장이 용이하고 느슨하게 결합된 형태로 발전합니다. 이는 Nest가 지향하는 아키텍쳐입니다.
두 번째, Express/Fastify 위에서 동작하고, 추상화된 API를 제공하지만 완전하게 Express를 추상화하고 캡슐화하지 않았기 때문에 기존 Express에서 동작하는 수 많은 라이브러리를 그대로 사용할 수 있습니다.
세 번째, 구조를 강제합니다. 이는 대규모 팀 협업에도 좋고, 신규 개발자가 들어왔을때 적응에 도움이 됩니다. 마개조 수준으로 Express를 자신만의 방식으로 사용하는 회사들도 많이 있지만, 보통 문서화에 문제가 있거나 추상화 수준이 좋지 못한 경우가 많이 있습니다.
설치
시작하려면 Nest CLI를 사용하여 프로젝트를 만들거나 스타터 프로젝트(보일러 플레이트)를 클론하여 만들 수 있습니다. 물론 둘 다 같은 결과입니다. Nest CLI로 프로젝트를 만드려면 아래와 같이 하시면 됩니다.
$ npm i -g @nestjs/cli
$ nest new project-name
이렇게하면 새 프로젝트 디렉터리가 생성되며 핵심적이고 기본적인 초기 Nest 파일 및 지원 모듈이 생성됩니다. 처음 사용하는 사용자는 Nest CLI로 새 프로젝트를 만들기를 추천합니다.
또 다른 방법은 Git을 사용하여 타입스크립트 스타터 프로젝트를 설치할 수 있습니다.
$ git clone https://github.com/nestjs/typescript-starter.git project
$ cd project
$ npm install
$ npm run start
브라우저를 열고 http://localhost:3000/ 로 이동합니다.
다른 방법도 있습니다. 그리 추천하는 방법은 아닌데, npm/yarn을 사용하여 하나씩 하나씩 설치하는 방법입니다. 이 경우 보일러플레이트 코드를 직접 생성해야 합니다.
$ npm i --save @nestjs/core @nestjs/common rxjs reflect-metadata