NestJS 공식 문서 공부하기 스터디를 하고있는데, 나 자신이 너무 대충 읽고 나의 것으로 만들지 못하는 것 같아서 직접 번역하고 적용해보고 정리하기로 마음먹었습니다!
하지만 저는 영어를 굉장히 못하기 때문에 저의 번역은 엉망진창이고 믿을게 못됩니다.
그러니 혹시 이 글을 봐주시는 분들은 "얘는 이렇게 정리했구나~" 정도로 참고해주시면 좋겠습니다!
Nest의 핵심 기본사항과 친해지기 위해서 기본적인 CRUD를 구축합니다.
Nest는 TypeScript
를 사용하는 것을 좋아하지만 Node.js
를 사용하는 것도 좋아합니다.
그렇기 때문에 Nest는 TypeScript
와 순수 JavaScript
를 사용하는 것 모두 허용합니다.
저희는 예시에서는 TypeScript
를 사용합니다. 하지만 코드 스니펫을 사용하면 언제나 JavaScript
구문으로 전환할 수 있습니다.
하지만 이 글의 작성자인 저는 TypeScript
를 기준으로 작성합니다!
2023-06-27 기준
Node.js
Version 16 이상으로 설치해주세요~
npm이 설치되어 있다면, 명령어를 터미널에 입력해서 간단하게 Nest 프로젝트를 만들 수 있습니다.
$ npm i -g @nestjs/cli
$ nest new project-name
nest/cli를 전역으로 설치하고,
밑의 cli를 통해 새로운 프로젝트를 만들자! ( project-name에는 만들고 싶은 이름을 적자! )
명령어의 실행 결과로 project-name
의 디렉토리가 만들어지며, node-modules
폴더와 기타 몇 가지 상용구 파일이 설치되며 디렉토리가 src/생성되어 여러 코어 파일로 채워집니다.
src
|- app.controller.spec.ts
|- app.controller.ts
|- app.module.ts
|- app.service.ts
|- main.ts
위 파일들이 뭐하는 친구들인지 살펴봅시다!
app.controller.ts
app.controller.spec.ts
app.module.ts
app.service.ts
main.ts
NestFactory
를 이용해서 Nest 애플리케이션 인스턴스를 생성한다main.ts는 async 함수를 포함하며, 이 함수가 우리 애플리케이션을 부트스트랩 해줄 것입니다.
// main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
Nest 애플리케이션 인스턴스를 만들기 위해 우리는 코어 모듈에서 제공하는 NestFactory
클래스를 사용합니다. NestFactory
는 응용 프로그램 인스턴스를 만들 수 있는 몇가지 static 메서드를 노출합니다.
create()
메서드는 INestApplication
인터페이스를 충족하는 애플리케이션 객체를 반환합니다.
이 개체는 다음 장에서 설명하는 메서드 집합을 제공합니다.
위의 main.ts
예시에서는 간단하게 HTTP 리스너를 시작하고, 애플리케이션이 들어오는 HTTP 요청을 기다리도록 해줍니다.
Nest CLI로 생성된 프로젝트는 개발자가 각 모듈을 자체 전용 디렉토리에 유지하는 규칙을 따르도록 권장하는 초기 프로젝트 구조를 생성합니다.
기본적으로 애플리케이션을 만드는 동안 오류가 발생하면 앱이 코드와 함께 종료됩니다
1. 오류를 발생시키려면 옵션을 비활성화하세요.
abortOnError(예: NestFactory.create(AppModule, { abortOnError: false })).
Nest는 플랫폼에 구애받지 않는 프레임워크를 목표로 합니다.
플랫폼 독립성은 개발자가 여러 유형의 응용 프로그램에서 활용할 수 있는 재사용 가능한 논리적 부분을 생성할 수 있게 합니다. 이를 통해 통해서 개발자들로 하여금 다양한 애플리케이션 타입에서 재사용할 수 있는 로직들을 개발하는 것을 가능하게 해줍니다.
기술적으로, Nest는 어댑터만 있다면 아무런 Node HTTP 프레임워크와도 동작할 수 있습니다.
현재 기본적으로로 지원하는 HTTP 플랫폼은 두가지(express, fastify)입니다.
이 중 사용하고싶은 프레임워크를 고르면 됩니다.
platform-express
Express는 사람들에게 널리 알려진 노드를 위한 미니멀리스트 웹 프레임워크로, 프로덕션 환경에서 사용 가능한 라이브러리로써 커뮤니티를 통해 구현된 다양한 리소스를 가지고 있습니다. @nestjs/platform-express 패키지가 디폴트로 사용됩니다.
platform-fastify
Fastify는 고성능에 적은 오버헤드를 자랑하는 프레임워크로, 높은 효율성과 스피드를 제공하는데 포커스하고있다. 사용하는 방법은 문서를 참고한다.
어떤 플랫폼을 사용하더라도, 해당하는 애플리케이션 인터페이스를 노출합니다.
(NestExpressApplication
, NestFastifyApplication
)
아래와 같이 NestFactory.create 메서드에 타입을 넘겨주면, app 객체는 사용한 플랫폼에 해당하는 다양한 메서드들을 사용할 수 있게 됩니다. 하지만 기본 플랫폼 API를 엑세스하려고 한다면 타입을 지정해줄 필요가 없습니다.
// main.ts
const app = await NestFactory.create<NestExpressApplication>(AppModule);
설치 단계가 끝나면 명령어를 입력해 애플리케이션을 시작하고, HTTP 요청에 대해 리스닝하도록 실행할 수 있습니다!
$ npm run start
개발 프로세스의 속도를 높이려면(20배 더 빠른 빌드) 다음과 같이 스크립트 에 플래그를 전달하여 SWC 빌더를 사용할 수 있습니다 .
-b swcstartnpm run start -- -b swc
애플리케이션을 실행하고 http://localhost:3000/
에 들어가면 Hello World! 메시지를 볼 수 있습니다.
파일의 변경 사항을 감시하려면 아래의 명령어를 통해 애플리케이션을 실행해주세요.
$ npm run start:dev
이 명령은 파일을 감시하여 자동으로 서버를 다시 컴파일하고 다시 로드합니다.
CLI는 신뢰할 수 있는 개발 워크플로우를 대규모로 구축하기 위해 노력합니다.
그렇기에 Nest는 프로젝트 생성시에 코드 ( linter
와 formatter
)가 설치된 상태로 제공합니다.
각각 eslint
와 prettier