[TIL] Nest.js 공부 기록

김시원·2023년 5월 22일
0

TIL

목록 보기
27/50

Nest.js

  • router, 에러 핸들링, logging, validation, 데이터 형변환, 3-layered archiecture, auth-middleware에 대한 정답을 제시해주고 프레임워크에서 다 처리해준다.

  • module화 => domain별로 module을 만들어서 controller, service, repo를 분리하여 관리할 수 있음 => 각각의 module들은 결국 app.module.ts에서 명시해주어 합쳐준다.
    nest g mo <module_name>
    캡슐화: 자신의 module에서만 사용 가능
    * 이를 다른 module에서 사용하게 해주려면 exports: [] 해주어야 한다.

  • router => decorator로 지정 (@Controller, @Get, @Post, @Put, @Delete)

  • controller =>
    request => @Req() req: Request
    body => @Body() Body
    params => @Param() param
    DI: service layer 의존성 주입 (service를 provider 등록 필요)

  • service =>
    DI: repository layer 의존성 주입 (repository를 provider 등록 필요)
    비지니스 로직

  • repository =>
    Model 정의, 주입
    DB 직접 접근

Middlewares

  • nest g middleware <middleware_name>
  • middleware는 express.js의 middleware와 동일하다

Exception filter = errorHandler

  • Exception Filter: error handling customize => throw new HttpException({status: 404, errorMessage: 'errorMessage'}, 404): 원하는대로 error customize 가능
  • 이렇게 하면 모든 api에 대해 또 반복되는 코드를 작성해야하므로, http exception filter를 정의해준다.
  • controller나, api 하나에만 @UseFilters(HttpExceptionFilter를 통해 에러 핸들링을 해줄 수 있다.
  • nest가 default로 반환해주는 기본 에러에 대해 전역에서 customized 에러 핸들링을 해줄 수 있다. useGlobalFilters(new HttpExceptionFilter())

Pipes

  • validation & data 형변환
  • string -> int: ParseIntPipe
  • customized pipe를 정의해줄 수 있음

Interceptors & AOP Pattern

  • @Injectable 데코레이터로 주석이 달린 클래스, NestInterceptor 인터페이스를 구현해야함
  • AOP (Aspect Oriented Programming): 모듈화를 증가시키는 것이 목적인 프로그래밍 패러다임.

Class Validator

  • npm i --save class-validator class-transformer
  • schema로 정의된 key/field들을 validation하기 위한 라이브러리

DTO

  • request로 받은 body 데이터에 대해 validation

Schema virtual

  • 비지니스 로직에서 client에게 보여줄 schema 데이터만 따로 처리
  • password는 숨겨야 하기때문에 password를 제외하고 나머지 key들에 대해 virtual로 설정하여 client에게 전달

Request Lifecycle

  1. incoming request
  2. middleware
  3. guard
  4. interceptor (pre-controller)
  5. pipe
  6. controller
  7. service
  8. interceptor (post-request)
  9. exception filter
  10. server response

Query Builder

  • raw sql 문법으로 query문 작성 가능

Fastify

  • 기본적으로는 모든 API는 express.js에서 구동됌
  • 더 빠른 속도를 요구하는 API는 fastify 사용

Swagger

  • 공식 문서 OpenAPI에서 확인 가능
  • swagger에 인증 추가하기
    * npm install express-basic-auth
app.use(
    ['/docs', '/docs-json'],
    expressBasicAuth({
      challenge: true,
      users: {
        [process.env.SWAGGER_USER]: process.env.SWAGGER_PASSWORD,
      },
    }),
  );

JWT

  1. jwt client request -> jwt guard -> jwt strategy -> request.user payload -> API 실행

0개의 댓글