https://docs.nestjs.com/first-steps
First steps
이 글에서는 Nest의 핵심 기본 사항을 배우게 된다. Nest 애플리케이션의 필수 구성 요소에 익숙해지기 위해 입문 수준의 CRUD 애플리케이션을 구축해보자
Language
우리는 타입스크립트를 좋아하지만 Node.js도 그에 못지않게 좋아한다. 그렇기 때문에 Nest는 타입스크립트와 순수 자바스크립트 모두와 호환된다. Nest는 최신 언어 기능을 활용하므로 바닐라 자바스크립트와 사용하려면 Babel 컴파일러가 필요하다.
Prerequisites
Node.js 버전이 16버전 이상이어야 한다.
Setup
새 프로젝트를 설정하는 것은 Nest CLI를 사용하면 매우 간단하다. npm이 설치되어 있으면 OS 터미널에서 다음 명령어를 사용하여 새 Nest 프로젝트를 만들 수 있다.
$ npm i -g @nestjs/cli
$ nest new project-name
HINT
타입스크립트의 stricter 기능 셋을 사용하려면 nest new 명령에 --strict 플래그를 전달하면 된다.
프로젝트 이름 디렉토리가 생성되고, 노드 모듈과 몇 가지 다른 보일러 플레이트 파일이 설치되며, src/ 디렉토리가 생성되어 몇가지 핵심 파일로 채워진다.
다음은 이러한 핵심 파일에 대한 간략한 개요이다.
- app.controller.ts : 단일 경로를 가진 기본 컨트롤러
- app.controller.spec.ts : 컨트롤러에 대한 단위 테스트
- app.modules.ts : 애플리케이션의 루트 모듈
- app.service.ts : 단일 메서드가 있는 기본 서비스
- main.ts : Nest 애플리케이션 인스턴스를 생성하기 위해 핵심함수 NestFactory를 사용하는 애플리케이션의 엔트리 파일
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는 애플리케이션 인스턴스를 생성할 수 있는 몇 가지 정적 메서드를 노출한다. create() 메서드는 INestApplication 인터페이스를 구현하는 애플리케이션 객체를 반환한다. 이 객체는 다음장에서 설명하는 메서드 집합을 제공한다. 위의 main.ts 예제에서는 애플리케이션이 인바운드 HTTP 요청을 기다릴 수 있도록 HTTP 리스너를 시작하기만 하면 된다.
Nest CLI로 스캐폴딩된 프로젝트는 개발자가 각 모듈을 자체 전용 디렉토리에 보관하는 관례를 따르도록 권장하는 초기 프로젝트 구조를 생성한다.
HINT
기본적으로 애플리케이션을 만드는 동안 오류가 발생하면 앱은 코드 1과 함께 종료된다. 종료 대신 오류를 발생시키려면 abortOnError 옵션을 비활성화해야 한다.
예시) NestFactory.create(AppModule, { abortOnError: false })
Platform
Nest는 플랫폼에 구애받지 않는 프레임워크(platform-agnostic framework)를 지향한다. 플랫폼 독립성은 개발자가 여러 유형의 애플리케이션에서 활용할 수 있는 재사용 가능한 논리적 부분을 만들 수 있게 해준다. 기술적으로 Nest는 어댑터를 생성하면 모든 노드 HTTP 프레임워크와 함께 작동할 수 있다. 기본적으로 Express와 Fastify라는 두 가지 HTTP 플랫폼이 지원된다. 필요에 가장 적합한 것을 선택할 수 있다.
platform-express | Express는 잘 알려진 미니멀리즘 노드용 웹 프레임워크이다. 커뮤니티에서 구현한 많은 리소스가 포함된 실전 테스트를 거친 production-ready 라이브러리이다. 기본적으로 @nestjs/platform-express 패키지가 사용된다. 많은 사용ㅈ가 Express를 사용하고 있고, 시장도 활성화되어 있다. |
platform-fastify | Fastfy는 최대의 효율성과 속도를 제공하는 데 중점을 둔 고성능의 낮은 오버헤드 프레임워크이다. |
어떤 플랫폼을 사용하든 자체 애플리케이션 인터페이스를 노출한다. 이는 각각 NestExpressApplication 및 NestFastifyApplication으로 표시된다.
아래 예시에서 처럼 NestFactory.create() 메서드에 타입을 전달하면 앱 객체는 해당 특정 플랫폼에서만 사용하는 메서드를 갖게 된다. 그러나 실제로 기본 플랫폼 API에 엑세스하려는 것이 아닐 경우 별도의 타입을 지정할 필요는 없다.
const app = await NestFactory.create<NestExpressApplication>(AppModule);
Running the application
설치가 완료되면 OS 명령 프롬프트에서 다음 명령을 실행하여 인바운드 HTTP 요청을 수신 대기하는 애플리케이션을 시작할 수 있다.
$ npm run start
HINT
개발 프로세스 속도를 높이려면(빌드 속도가 20배 이상 빨라짐) 다음과 같이 시작 스크립트에 -b swc 플래그를 전달하여 SWC 빌더를 이용할 수 있다.
예시) npm run start -- -b swc
이 명령은 src/main.ts 파일에 정의된 포트에서 수신 대기 중인 HTTP 서버로 앱을 시작한다. 애플리케이션이 실행되면 브라우저를 열고 http://localhost:3000/ 으로 이동해보자. Hello World! 메세지가 표시되면 성공이다.
파일에 변경 사항이 있는지 확인하려면 다음 명령을 실행하여 애플리케이션을 시작할 수 있다.
$ npm run start:dev
이 커맨드는 파일을 감시하여 자동으로 다시 컴파일하고 서버를 리로드한다.
Linting and formatting
CLI는 대규모의 안정적인 개발 워크플로우를 위한 최선의 노력을 제공한다. 따라서 생성된 Nest 프로젝트에는 코드 린터와 포맷터가 모두 사전 설치 되어있다. (각각 eslint와 prettier 이다.)
안정성과 확장성을 극대화하기 위해 기본 eslint와 prettier 패키지를 사용한다. 이 세팅은 설계상 공식 확장 프로그램과 깔끔한 IDE 통합을 가능하게 한다.
IDE가 적합하지 않은 헤드리스 환경(CI, Git hook 등)을 위해, Nest 프로젝트는 바로 사용할 수 있는 npm 스크립트가 함께 제공된다.
# Lint and autofix with eslint
$ npm run lint
# Format with prettier
$ npm run format
'NestJS' 카테고리의 다른 글
Modules (0) | 2024.04.17 |
---|---|
Providers (1) | 2024.04.17 |
Controllers (0) | 2024.04.17 |
Introduction (0) | 2024.04.17 |