[NestJS] Overview

올리브수
|2023. 6. 28. 02:55
728x90

1. OVERVIEW

First steps

  • Nest는 타입스크립트와 순수 자바스크립트 둘 다 호환 가능
  • 그러나 바닐라 자바스크립트를 이용하려면 바벨 컴파일러를 함께 사용해야함

 

1. 설정

  • Node.js 16 이상부터 가능

 

# 다음 명령어로 간단하게 새 프로젝트 생성 가능

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

 

프로젝트 구조는 다음과 같이 구성된다.

src
├ app.controller.spec.ts # 컨트롤러 유닛 테스트
├ app.controller.ts # 싱글 라우트에 관한 기본적인 컨트롤러 
├ app.module.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); 
    // create 메소드: INestApplication 인터페이스를 구현한 애플리케이션 오브젝트
  await app.listen(3000); // HTTP 요청을 기다힌다.
}
bootstrap();
  • 부트스트랩 애플리케이션
  • Nest 애플리케이션 인스턴스를 만들기 위해 NestFactory 클래스를 사용한다.
  • NestFactory 는 애플리케이션 인스턴스를 만드는 정적 메소드 노출한다.

 

  • Nest CLI로 발판이 마련된 프로젝트는 개발자가 디렉토리 구조내의 각 모듈의 컨벤션을 유지하도록 따르는 컨벤션을 제공한다.

 

2. 플랫폼

  • Nest는 플랫폼 독립적인 프레임워크를 목표로 한다
  • 플랫폼 독립성은 다른 유형의 애플리케이션간의 이점에 대한 재사용성을 높인다.
  • 기술적으로 Nest는 Node HTTP 프레임워크에 대해 지원한다.
  • expressfastify 의 두 HTTP 플랫폼을 지원한다.
    • 두 플랫폼 중 적합한 프레임워크를 하나 골라서 적용한다.
    • @nestjs/platform-express 패키지는 디폴트로 사용된다.
    • 많은 유저들은 Express로 서빙한다.

 

  • 사용하는 플랫폼에 따라 애플리케이션 인터페이스를 달리하여 사용한다.
  • NestExpressApplication , NestFastifyApplication

const app = await NestFactory.create<NestExpressApplication>(AppModule);
  • 사용하는 플랫폼에 따라 인터페이스를 타입 명시하여 사용한다.

 

  • 실행
$ npm run start

💡 개발 프로세스 속도를 높이기 위해 SWC builder를 플래그로 넘겨서 사용할 수 있다.

  • b swc 해당 플래그를 start 스크립트 내부에 내장하거나 시작시 옵셥으로 넘긴다.
  • npm run start -- -b swc

 

  • 애플리케이션 시작
$ npm run start:dev

 

 

3. Linting & Formatting

  • CLI 는 개발 워크플로우를 대규모로 구축하기 위해 많은 도움을 준다.
  • 만들어진 Nest 프로젝트는 코드 linter와 formatter가 설치된 상태로 제공된다.

 

  • cli 패키지에서 기본 eslintprettier 를 사용할 수 있다.
# Lint and autofix with eslint
$ npm run lint

# Format with prettier
$ npm run format

 

  • 패키지 내에 스크립트가 짜여있다.
728x90

'🏠 Framework > NestJS' 카테고리의 다른 글

[NestJS] TypeORM  (21) 2024.01.15
[NestJS] Pipe 이용  (0) 2024.01.15
[NestJS] CRUD 구현  (0) 2024.01.15
[NestJS] NestJS 기본 요소  (20) 2024.01.15