상똥이의 Back-End 공부방
[Nest.js] First steps 본문
First steps
이 글에서는 Nest.js의 핵심 기초를 배울 것입니다. 필수적인 구성 요소에 익숙해지기 위해 입문 수준의 전반적인 기능들을 활용하여 기본적인 CRUD 애플리케이션을 설계할 것입니다.
Language
우리는 TypeScript를 애용하지만 기본적으로 Node.js를 사용합니다. 이로 인해 Nest.js는 TypeScript와 순수 JavaScript 모두 호환 가능해집니다. Nest.js는 최신 버전의 언어를 사용하는 장점이 있으므로 순수 JavaScript를 사용하기 위해 Babel 컴파일러가 필요합니다.
예시에서는 거의 TypeScript를 사용할 것이지만, 순수 JavaScript를 사용해도 괜찮습니다.
Prequisites
Node.js 버전이 16 이상임을 확인해주세요.
Setup
$ npm i -g @nestjs/cli
$ nest new project-name
HINT
더 엄격한 기능의 TypeScript로 프로젝트를 생성하고자 할 때에는, nest new 명령어에 --strict를 붙여주세요
프로젝트가 생성되면 node 모듈들과 항상 필요항 파일드링 설치되어 있을 것이고, 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
어플리케이션을 진행시키는 async 함수를 포함하는 파일입니다.
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 listener를 실행합니다.
Nest CLI로 생성된 프로젝트는 개발자들로 하여금 각 모듈이 전용 경로에 저장되는 규칙을 따르도록 하는 초기 프로젝트 구조를 만들어냅니다.
HINT
기본적으로, 어플리케이션 실행시에 에러가 발생한다면 exit code는 1입니다. 설정을 해제시키지 않고 error를 throw하고싶다면 abortOnError를 사용하세요. (e.g., NestFactory.create(AppModule, { abortOnError:false }))
Platform
Nest는 플랫폼에 관계없이 지원되는 프레임워크가 되는 것을 목적으로 합니다. 플랫폼에 독립적이라면 개발자들이 서로 다른 유형의 어플리케이션에서 재사용 가능한 논리구조를 생성할 수 있습니다. 기술적으로, Nest는 한 번 생성되면 어느 Node HTTP 프레임워크에서든 사용할 수 있습니다. 바로 사용 가능하도록 지원되는 두 개의 HTTP 플랫폼이 있습니다: Express, Fastify. 필요에 따라 어느 것이든 선택할 수 있습니다.
Express는 잘 알려진 Node의 작고 단순한 웹 프레임워크입니다. 커뮤니티로부터 많은 리소스가 생성된 검증되고 생산 가능한 라이브러리입니다. @nestjs.platform-express 패키지를 기본적으로 사용합니다. 많은 개발자들이 Express를 잘 사용하고 있으며 활성화를 위해 어던 조치도 취할 필요가 없습니다.
Fastify는 최대 효율과 속도를 제공하는데 집중된 고성능, 낮은 오버헤드의 프레임워크입니다.
어느 프레임워크를 사용하든, 고유의 어플리케이션 인터페이스를 반환합니다. Express와 Fastify는 각각 NestExpressApplication과 NestFastifyApplication으로 나타납니다.
아래 예와 같이 NestFactory.create() 메서드에 유형을 전달하면 앱 개체는 해당 특정 플랫폼에서만 사용할 수 있는 메서드를 갖게 됩니다. 그러나 실제로 기본 플랫폼 API에 액세스하기를 원하지 않는 한, 유형을 지정할 필요는 없습니다.
const app = await NestFactory.create<NestExpressApplication>(AppModule);
Running the application
설치 과정이 완료되면 HTTP로부터 요청을 받기 위해 다음의 명령어를 입력할 수 있습니다.
$ npm run start
이 명령어는 src/main.ts에서 정의된 포트번호에서 HTTP통신이 가능하도록 합니다. 브라우저를 열고 http://localhost:3030으로 들어가보세요. hello world!라는 문구가 보일 것입니다.
파일이 변하는 것을 탐지하기 위해서는 아래의 명령어를 입력하세요.
$ npm run start:dev
이 명령어는 파일을 탐지하고 자동으로 리컴파일하며 서버를 리로딩합니다.
Linting and formatting
CLI는 신뢰할 수 있는 개발 워크플로우를 제공하기 위해 최선의 노력을 제공합니다. 따라서 생성된 Nest 프로젝트는 linter와 formatter가 자동으로 설치되어 있습니다. (각각 eslint와 prettier입니다.)
최대의 안정성과 확장성을 보장하기 위해 eslint와 prettier cli 패키지를 사용합니다. 이 설정을 통해 깔끔한 IDE와 디자인의 공식 확장 기능을 통합할 수 있습니다.
IDE가 관련이 없는 헤드리스 환경(지속적인 통합, Git Hook 등)의 경우 Nest 프로젝트는 즉시 사용할 수 있는 enpm 스크립트와 함께 제공됩니다.
# Lint and autofix with eslint
$ npm run lint
# Format with prettier
$ npm run format
'Nest.JS > Docs' 카테고리의 다른 글
[Nest.js] Middleware (0) | 2024.09.05 |
---|---|
[Nest.js] Modules (1) | 2024.09.04 |
[Nest.js] Providers (0) | 2024.09.04 |
[Nest.js] Controllers (0) | 2024.09.04 |
[Nest.js] Introduction (1) | 2024.03.19 |