NestJS 공식 문서 First steps

GGAE99·2023년 6월 27일
0

NestJS 공식 문서

목록 보기
1/33

NestJS 공식 문서 공부하기 스터디를 하고있는데, 나 자신이 너무 대충 읽고 나의 것으로 만들지 못하는 것 같아서 직접 번역하고 적용해보고 정리하기로 마음먹었습니다!

하지만 저는 영어를 굉장히 못하기 때문에 저의 번역은 엉망진창이고 믿을게 못됩니다.
그러니 혹시 이 글을 봐주시는 분들은 "얘는 이렇게 정리했구나~" 정도로 참고해주시면 좋겠습니다!

First seteps

Nest의 핵심 기본사항과 친해지기 위해서 기본적인 CRUD를 구축합니다.

Language

Nest는 TypeScript를 사용하는 것을 좋아하지만 Node.js를 사용하는 것도 좋아합니다.
그렇기 때문에 Nest는 TypeScript순수 JavaScript를 사용하는 것 모두 허용합니다.

저희는 예시에서는 TypeScript를 사용합니다. 하지만 코드 스니펫을 사용하면 언제나 JavaScript 구문으로 전환할 수 있습니다.
하지만 이 글의 작성자인 저는 TypeScript를 기준으로 작성합니다!

Prerequisites

2023-06-27 기준
Node.js Version 16 이상으로 설치해주세요~

Setup

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 })).

Platform

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);

Running the application

설치 단계가 끝나면 명령어를 입력해 애플리케이션을 시작하고, HTTP 요청에 대해 리스닝하도록 실행할 수 있습니다!

$ npm run start

개발 프로세스의 속도를 높이려면(20배 더 빠른 빌드) 다음과 같이 스크립트 에 플래그를 전달하여 SWC 빌더를 사용할 수 있습니다 . -b swcstartnpm run start -- -b swc

애플리케이션을 실행하고 http://localhost:3000/에 들어가면 Hello World! 메시지를 볼 수 있습니다.

파일의 변경 사항을 감시하려면 아래의 명령어를 통해 애플리케이션을 실행해주세요.

$ npm run start:dev

이 명령은 파일을 감시하여 자동으로 서버를 다시 컴파일하고 다시 로드합니다.

Linting and formatting

CLI는 신뢰할 수 있는 개발 워크플로우를 대규모로 구축하기 위해 노력합니다.
그렇기에 Nest는 프로젝트 생성시에 코드 ( linterformatter )가 설치된 상태로 제공합니다.
각각 eslintprettier

0개의 댓글