Nest makes use of robust HTTP Server frameworks like Express (the default) and optionally can be configured to use Fastify as well!

  • Nest(NestJS)는 효율적이고 확장 가능한 Node.js 서버 (백엔드) 애플리케이션을 구축하기 위한 프레임워크
    • TypeScript, JavaScript 지원
    • HTTP 프레임워크를 활용하여 구성
      • Express: JavaScript로 작성되고 Node.js 런타임 환경에서 구동되는 인기 있는 웹 프레임워크
      • Fastify: 최대 효율성과 속도를 제공하는 데 중점을 둔 고성능 및 낮은 오버헤드 프레임워크
    • 프로그래밍 요소 결합
      • OOP (Object Oriented Programming) : 객체 지향 프로그래밍
      • FP (Functional Programming) : 함수형 프로그래밍
      • FRP (Functional Reactive Programming) : 함수 반응형 프로그래밍, 비동기 데이터 스트림 이용
    • CLI (Command-Line Interface) 지원

 

 

설치, 프로젝트 생성

# i: install , g: global , n: new
$ npm i -g @nestjs/cli
$ nest (n|new) <project_name>
$ npm install

Node 버전 16 이상에서만 NestJS 설치 가능, "node -v" 명령어로 버전 확인!
프로젝트 my-project 생성

 

프로젝트 기본 구조

동작 과정은 main.js → app.module.ts → app.controller.ts → app.service.ts로 진행


어플리케이션의 시작점&nbsp; main.ts

 

NestFactory.create( )  매개변수에 프로젝트에서 사용할 루트 모듈이 들어간다. 기본 구조에서는 app.module.ts 이 들어가있지만 커스텀 모듈을 지정할 수 있다
* 메인 함수명이 bootstrap 일 필요는 없다 (함수명 변경 가능)


Module (모듈)

Provider와 Controller들을 논리적인 기능이나 도메인에 따라 하나로 묶어주는 역할을 하며, 재사용성을 높여줌

AppModule 에서는 데코레이터(@, Decorator) 를 사용해 컨트롤러와 프로바이더(서비스)를 명시

이유는  제어의 역전(IoC, Inversion of Control) 기술 중 하나인 의존성 주입(DI, Defendency Injection)을 하기 위함


Controller (컨트롤러)

외부와의 통신, 라우팅을 담당

constructor (생성자) 매개변수 선언을 통해 AppModule에서 선언한 의존성 주입을 사용할 수 있음


Provider (공급자)

Nest에서 가장 간단하고 작은 단위의 컴포넌트를 표현
비즈니스 로직
기본적으로 @Injectable() 데코레이터로 나타내며,  다른 프로바이더나 컨트롤러에 주입(Inject)될 수 있음
종류로는 가장 간단한 Service부터 Middleware, Pipe, Guard, Interceptor 등이 존재

*spec.ts 파일들은 테스트를 하기 위한 파일이다.

test 폴더에 있는 app.e2e-spec.ts 파일을 통합 테스트를 하기 위함

src 아래 위치에 속해있는 다른 spec.ts 파일은 유닛 테스트를 하기 위한 파일들이다.

 

package.json의 scripts 확인하여 테스트를 진행

$ npm run test
$ npm run test:watch
$ npm run test:cov
$ npm run test:debug
$ npm run test:e2e

Mac의 터미널(Terminal)을 통해 진행하다 보면 권한(permission) 문제 때문에, 막혀서 sudo 명령어를 계속 입력해 줘야 할 수 있다.
공부를 하기 위해서 chmod 명령어를 통해 권한을 열어주도록 하자

# '~'는 사용자의 폴더 경로를 뜻한다. (ex. /Users/sejin )
# 프로젝트에서 모듈 설치 시 (ex. npm install)
$ chmod -R 755 ~/.npm

# my-project는 내가 생성한 nest 프로젝트 폴더
# 프로젝트 실행 시 (ex. npm run start:dev)
$ chmod -R 755 my-project

참고 링크

NestJS Documentation
Nomadcoders Nest

'JavaScript > NestJS' 카테고리의 다른 글

[NestJS] 환경 변수 (config) 사용하기  (0) 2023.08.20
[NestJS] Logging 하기  (0) 2023.08.19
[NestJS] Jest 테스트하기  (0) 2023.08.17
[NestJS] 경로 alias 설정하기  (0) 2023.08.17
[NestJS] API 생성하기 (+ CORS)  (0) 2023.08.17

+ Recent posts