- 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
프로젝트 기본 구조
동작 과정은 main.js → app.module.ts → app.controller.ts → app.service.ts로 진행
NestFactory.create( ) 매개변수에 프로젝트에서 사용할 루트 모듈이 들어간다. 기본 구조에서는 app.module.ts 이 들어가있지만 커스텀 모듈을 지정할 수 있다
* 메인 함수명이 bootstrap 일 필요는 없다 (함수명 변경 가능)
Provider와 Controller들을 논리적인 기능이나 도메인에 따라 하나로 묶어주는 역할을 하며, 재사용성을 높여줌
AppModule 에서는 데코레이터(@, Decorator) 를 사용해 컨트롤러와 프로바이더(서비스)를 명시
이유는 제어의 역전(IoC, Inversion of Control) 기술 중 하나인 의존성 주입(DI, Defendency Injection)을 하기 위함
외부와의 통신, 라우팅을 담당
constructor (생성자) 매개변수 선언을 통해 AppModule에서 선언한 의존성 주입을 사용할 수 있음
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
참고 링크
'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 |