First step

이번 섹션에서는 Nest의 기본핵심 을 배울것입니다. Nest 응용프로그램의 필수요소에 익숙해지기 위해, 입문서적 차원에서 많은 부분의 기본의 CRUD를 제공하는 응용프로그램을 구축합니다.

언어

우리는 Typescript 를 좋아하지만, 무엇보다도 Node.js 좋아합니다. 그렇기 때문에 Nest는 순수 자바스크립트, 타입스크립트와 호환됩니다. Nest는 최신 언어 기능을 활용하므로 바닐라 JavaScript와 함께 사용하려면 Babel 컴파일러가 필요합니다.

우리는 대부분 우리가 제공하는 예제에서 TypeScript를 사용하지만 항상 코드 스니펫을 바닐라 JavaScript 구문으로 전환 할 수 있습니다.

전제조건

여러분의 운영체제에 Nede.js(>=8.9.0)이 반드시 있어야 합니다.

설치

Nest CLI를 사용하여 새 프로젝트를 설정하는 것은 매우 간단합니다. npm을 설치하면 OS 터미널에서 다음 명령을 사용하여 새 Nest 프로젝트를 만들 수 있습니다.

$ npm i -g @nestjs/cli
$ nest new project-name

프로젝트 디렉터리가 생성되고, 노드 모듈과 몇 개의 다른 상용구 파일이 설치되며, **src/** 디렉터리가 생성되어 여러 코어 파일로 채워집니다.

src
  ├──app.controller.ts
  ├──app.module.ts
  └──main.ts

app.controller.ts 단일 경로(라우트)의 기본 컨트롤러 샘플

app.module.ts 어플리케이션의 최상위 모듈

main.ts 핵심 함수 NestFactory 를 사용하여 Nest 애플리케이션 인스턴스를 작성하는 애플리케이션의 엔트리(entry) 파일입니다.

main.ts에는 비동기 함수가 포함되어있어 응용 프로그램을 부트스트랩합니다.

// 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로 스캐 폴딩 된 프로젝트는 개발자가 각 모듈을 전용 디렉터리에 보관하는 규칙을 따르도록 권장하는 초기 프로젝트 구조를 만듭니다.

플랫폼

Nest의 목표는 플랫폼의 영향을 받지않는 프레임워크입니다. 플랫폼 독립성을 통해 개발자는 여러 유형의 응용프로그램에서 활용할 수 있는 재사용 가능하도록 합니다. 기술적으로 Nest는 어댑터가 생성되면 모든 Node HTTP 프레임워크와 동작할 수 있습니다. 기본적으로 지원되는 두 가지 HTTP 플랫폼 인 express, fastify 있습니다. 필요에 가장 적합한 것을 선택할 수 있습니다.

platform-express: express잘 알다시피 node에서 제공하는 경량화된  프레임워크입니다. 커뮤니티에서 구현한 많은 리소스를 갖추고 테스트  프로덕션용 라이브러리입니다. @nestjs/platform-express 패키지는 기본적으로 사용됩니다. 많은 사용자들은 익스프레스를  이용하고 있으며, 그것을 가능하게 하기 위해 어떤 조치도 취할 필요가 없습니다.

platform-fastify: Fastify는 최고의 효율과 속도를 제공하는  매우 초점을 맞춘 고성능과 낮은 오버헤드 프레임워크입니다. 여기에서 사용법을 읽어 보십시오.

어떤 플랫폼을 사용하든, 자체 애플리케이션 인터페이스를 노출합니다. 이것들은 각각 NestExpressApplication, NestFastifyApplication 확인할 수 있습니다.

아래 예와 같이 유형을 NestFactory.create() 메소드로 전달하면 앱 개체는 특정 플랫폼에만 사용할 수 있는 메소드를 갖게 됩니다. 그러나 기본 플랫폼 API에 실제로 액세스하려는 경우가 아니라면 유형을 지정할 필요가 없습니다.

const app = await NestFactory.create<NestExpressApplication>(AppModule);

어플리케이션 실행

설치 프로세스가 완료되면 OS 명령 프롬프트에서 다음 명령을 실행하여 HTTP 요청을 수신하는 응용 프로그램을 시작합니다.

$ npm run start

이 명령은 src/main.ts 파일에 정의한 포트에서 HTTP 서버를 수신하여 앱을 시작합니다. 응용 프로그램이 실행되고 나면 브라우저를 열고 http://localhost:3000/로 접속하면, Hello World! 메시지를 확인할 수 있습니다.