NestJS

j·2022년 5월 25일
0

TIL

목록 보기
12/14
post-thumbnail

Node.js에 기반을 둔 웹 API 프레임워크. 기본적으로 Express를 래핑하여 동작.
NestJS는 DB, ORM, Configuration, 유효성 검사 등 수많은 기본 기능을 기본 제공한다.

설치

1. Node.js 설치

NestJS는 Node.js를 기반으로 하기에 Node.js공식 페이지를 참고해 맞는 버전을 설치한다.

2. NestJS 프로젝트 생성

1. @nestjs/cli 설치

$ npm i -g @nestjs/cli

2. 프로젝트 초기화

$ nest new [project-name]

[project-name]대신 본인의 프로젝트 이름 입력

초기설정할때 참고하면 좋은 레포
https://github.com/nestjs/typescript-starter

특징

NestJS는 main.ts 파일을 가진다.

: main.ts가 모든걸 시작. 이름 바꾸지 말것.
main.ts는 bootsrtap라는 이름의 함수를 가지고 있는데 이 기본 함수 이름은 아무거나 바꿔도 상관 없다.

NestJS는 데코레이터와 함께 한다.

: 데코레이터는 클래스에 함수기능을 추가 할 수 있다.

하나의 모듈에서 어플리케이션을 생성한다.

: 앱모듈을 일종의 루트모듈

모듈 = 장고의 app: 한가지 기능을 하는 앱
ex) 인증 담당 기능 -> users모듈

NestJS는 Express위에서 돌아간다.

: 그래서 컨트롤러에서 Request, Response 객체가 필요하다면 사용가능하다.
하지만 req나 res같은 Express객체를 직접적으로 사용하는게 좋은 방법은 아니다.

Service ➡️ Controller ➡️ Module

Service

로직을 관리하는 역할

: 한개의 요소가 한가지 기능은 꼭 책임져야 함

Controller

컨트롤러가 하는 일은 기본적으로 url을 가져오고 함수를 실행한다.

: express의 라우터 같은 존재

NestJS는 컨트롤러를 비즈니스 로직이랑 구분한다.

: 컨트롤러는 그냥 url을 가져오는 역할과 그에 해당하는 function(이 function이 service에 있음)을 실행할 뿐

Module

: 원래 App Module은 App Controllers와 App providers를 갖고 있어야 한다.
앱을 만들때는 모듈별로 구분하여야 좋음.

Query / Param

Query는 Query Parametr를 받아올 때 사용

: /user?id=111 에서 123 받음

Param은 Path Variable을 받아올 때 사용

: /users/222 에서 222 받음

어떤 resource를 식별하고 싶으면 Param
정렬이나 필터링을 하고 싶으면 Query 사용

DTO & Validation

DTO(Data Transfer Object)

: 데이터 전송 객체로 코드를 더 간결하게 만들 수 있도록 해준다. 그리고 NestJS가 들어오는 쿼리에 대해 유효성 검사를 할 수 있게 해준다.

Validation

작성 순서

  1. main.ts에 Validation Pipe 작성(일종의 미들웨어)
  2. npm i class-validator, npm i class-transformer 설치
  3. dto 파일에서 데코레이터 달기

Validation Pipe Option

  • whitelist: true: 아무 데코레이터가 없는 어느 property의 object를 걸러낸다.
  • forbidNonWhiteListed: true: 이상한 요청을하면 리퀘스트 자체를 막아버린다.
  • transform: true: true유저들이 보낸걸 원하는 실제 타입으로 변환

    url로 보내는 쿼리문은 다 스트링

jest

: 자바스크립트 테스팅 npm 패키지로 파일중 .spec.ts 확장자인게 테스팅을 포함하는 파일

Unit test

  • 모든 function을 따로 테스트하는 것
  • 어떤 function을 하나씩 테스트하고 싶을 때 사용

End-to-End(e2e)

  • 모든 시스템을 테스팅
  • user story라고 생각하면 쉽다. 사용자가 특정 링크를 누르면 특정 페이지가 나와야하고 그런걸 테스트

테스트 환경도 실제 구동환경의 설정을 그대로 적용해줘야한다

: app.useGlobalPipes 이런거 적용시켜줘야 하는것 잊지 말자

profile
개발 공부 기록

0개의 댓글