Nest.js

홍태화·2024년 3월 7일

❓ 네스트 요청

😊 요청 수신!!

😊 미들웨어 실행

전역 미들웨어(Global Middleware)가 요청을 처리하기 전에 실행 된다
이후 컨트롤러 수준(Controller-level) 실행
이후 핸들러 수준(Handler-level) 미들웨어가 실행된다

😊 가드 실행

요청이 컨트롤러에 도달하기 전에, 해당 컨트롤러에 적용된 가드들이 실행
가드는 요청이 특정 조건을 충족하는지를 확인하고, 요청을 계속 진행할지를 결정한다

😊 파라미터 변환(Parameter transformation)

클라이언트로부터의 요청에서 추출된 데이터가 필요한 형식으로 변환된다
주로 DTO(Data Transfer Object)의 형태로 변환되어 해당 핸들러에 전달된다

😊 핸들러 실행

요청이 적절한 컨트롤러의 핸들러에 도달하면, 해당 핸들러가 실행
이 때, 파라미터 변환이 완료된 데이터가 핸들러의 매개변수로 전달된다

😊 파이프 실행

핸들러 실행 🐣전후🐣에 적용된 파이프가 실행된다
파이프는 일반적으로 두 가지의 경우에서 사용한다

  • 변형: 입력 데이터를 원하는 형태로 변형 (ex, 문자열을 정수로)
  • 검증: 입력 데이터를 평가해서 유효하면 변경 없이 그대로 보내주고
    아니라면 예외를 발생

😊 인터셉터 실행

핸들러 실행 🐣전후🐣에 적용된 인터셉터가 실행된다
이는 핸들러의 실행 전후에 추가적인 작업을 수행할 수 있도록 해준다

😊 응답 생성

핸들러가 실행되고 반환된 데이터를 기반으로 클라이언트에게 응답이 생성되고 반환

😊 익셉션 처리

만약 응답 생성 과정에서 오류가 발생하면
해당 오류는 익셉션 필터(Exception Filters)에 의해 처리된다
이를 통해 오류가 적절하게 처리되고 클라이언트에게 적절한 오류 응답이 반환된다

❓ 파라미터 데코레이터

😊 @Request(), @Req()

HTTP 요청 객체를 가져온다 주로 Express의 Request 객체를
네스트 컨트롤러나 프로바이더 클래스의 메서드에서 사용할 때 사용

😊 @Response(), @Res()

HTTP 응답 객체를 가져온다 주로 Express의 Response 객체를
네스트 컨트롤러나 프로바이더 클래스의 메서드에서 사용할 때 사용

😊 @Next()

Express의 next() 함수를 가져온다
주로 미들웨어나 Express의 라우터 핸들러에서 사용

😊 @Session()

세션 객체를 가져온다

😊 @Param(param?: string)

주어진 이름의 매개변수를 가져오거나 전체 매개변수 객체를 가져올 수 있다

😊 @Body(param?: string)

HTTP 요청의 본문(body) 데이터를 가져온다

😊 @Query(param?: string)

쿼리스트링(query string) 데이터를 가져온다

😊 @Headers(param?: string)

HTTP 요청 헤더를 가져온다

😊 @Ip()

클라이언트의 IP 주소를 가져온다

😊 @HostParam()

호스트 매개변수를 가져온다


❓ DTO를 정의하는 방법

IntersectionType

두 개 이상의 클래스나 인터페이스를 교차하여 새로운 DTO를 만든다
이는 두 클래스나 인터페이스의 속성을 모두 포함하는 새로운 DTO를 생성할 때 사용된다

PartialType

DTO에서 일부 속성을 선택적으로 만든다
이는 모든 속성이 필수적이지 않은 DTO를 정의할 때 사용된다

PickType

다른 클래스의 일부 속성만을 선택하여 새로운 DTO를 만든다
이는 기존 클래스의 일부 속성만을 포함하는 DTO를 생성할 때 사용된다

OmitType

다른 클래스의 일부 속성을 제외하여 새로운 DTO를 만든다
이는 기존 클래스에서 특정 속성을 제외하고자 할 때 사용된다

profile
우어어아아앙

0개의 댓글