-
NestJS 기본 개념자바스크립트 2024. 3. 31. 03:04반응형
자바스크립트 기반의 벡엔드 프레임워크로 express를 가장 많이 써왔지만
최근에 express를 사용하여 구조화된 아키텍처를 제공하는 NestJS가 떠오르고 있습니다.
fastify도 지원합니다.
공식 문서를 보면 정말 자세히 설명되어져 있지만 전체적인 구조를 이해하는데 어려움이 있어서
전체적인 구조만 정리하였습니다.
기존의 express 기반으로 요청을 처리하는 흐름을 살펴보면 아래와 같습니다.
- request
- middleware
- router
- response
nestjs에서는 이부분을 더욱 구조화하여 아래와 같이 처리합니다.
- request: 클라이언트 요청
- middleware: 기존 express 와 동일 개념
- guard: 인증 처리
- interceptor: router에서 처리하기전에 하고 싶은 것(ex: 로깅)
- pipe: 요청 유효성 검증
- controller: router를 nestjs에서는 controller라 표현하고
controller에서 비지니스 로직을 작성하지 않고 service를 별도로 만들어 처리한다.
- interceptor : router에서 처리한 이후 하고 싶은 것(ex: 로깅)
- filter: 예외 발생 시 처리
- response: 응답
middleware, guard, interceptor, pipe, filter 모두 사실상 middleware라고 볼수 있으나
nestjs에서는 enhancer 또는 template 하여 guard, interceptor, pipe, filter를 별도로 정의하였습니다.
그리고 위에 것들은 controll에서 사용하게 됩니다.
enhancer 각각은 global(모든요청), controller(router에 대한 모든 요청), route(요청), paramer(요청 parmeter에 대해) 단위로 다시 세분화되어 처리가 됩니다.
아래는 챗봇의 도움을 받은 실행순서에 대한 정보입니다. 참고하시면 도움이 될듯 합니다.
NestJS에서 요청의 생명주기 동안 다양한 구성 요소들은 특정 순서로 실행됩니다. 여기에는 미들웨어, 가드, 인터셉터, 파이프, 그리고 필터가 포함됩니다. 이들의 실행 순서는 다음과 같습니다:
미들웨어(Middleware): 요청이 들어오면 가장 먼저 실행됩니다.
가드(Guards): 미들웨어 다음으로 실행되며, 요청이 특정 조건을 만족하는지 확인합니다.
인터셉터(Interceptors): 가드 이후에 실행되며, 요청과 응답을 가로채 추가 로직을 수행할 수 있습니다.
파이프(Pipes): 인터셉터 다음으로 실행되며, 요청 데이터의 변환과 유효성 검사를 담당합니다.
필터(Filters): 예외 처리를 담당하며, 컨트롤러에서 발생한 예외를 캐치하여 처리합니다.
각각의 구성 요소는 글로벌(Global), 컨트롤러(Controller), 핸들러(Handler) 레벨에서 적용될 수 있으며, 각 레벨에서의 적용 순서는 다음과 같습니다:
글로벌 레벨: 애플리케이션 전체에 걸쳐 적용되며, 모든 요청에 대해 실행됩니다.
컨트롤러 레벨: 특정 컨트롤러 클래스에 적용되며, 해당 컨트롤러의 모든 핸들러에 대해 실행됩니다.
핸들러 레벨: 특정 라우트 핸들러에 적용되며, 해당 핸들러의 요청에만 실행됩니다.
인터셉터의 경우, 요청이 들어올 때는 글로벌 → 컨트롤러 → 핸들러 순으로 실행되지만, 응답을 반환할 때는 핸들러 → 컨트롤러 → 글로벌 순으로 실행되는 First In, Last Out 방식을 따릅니다nestjs를 처음 접하면 module, controller, provider라는 말이 나옵니다.
모듈은 컨트롤러와 provider로 구성됩니다.
컨트롤러는 요청을 처리하는 라우터입니다.
provider는 컨트롤러에서 비니지스 로직을 분리한 것입니다.
독립적인 기능을 하는 단위로 모듈화합니다.
컨트롤러가 없이 provider로만 구성하여도상관 없습니다.
- module = controller + provider(비지니스 로직을 처리하는 각종 서비스)
* 특이사항: enhancer를 글로벌하게 사용할 때 최상위 모듈(app.modlule.ts)에서 provider로서 등록함
nestjs를 시작하면서 많은 개념들이 나오는데 도데체 머하는건지도 모르고 무작정 따라하기 보단
전체적인 그림을 그려놓고 시작하면 도움이 될거 같아서 정리해 봤습니다.
그럼 nestjs를 써서 백엔드 구성할 때 기본적으로 해야 되는 것들이 있어요
저같은 경우는 아래와 같이 구성해보려고 해요.
아래 모든 것들을 nestjs에서 지원합니다.
- 백엔드 프레임워크: nestjs
- 데이터베이스: postgresql
- ORM: prisma
- 문서화: swagger
- 인증방식: jwt
- websocket: socket.io
반응형'자바스크립트' 카테고리의 다른 글
자바스크립트 babel에 이어서 eslint 도 같이 써볼래요? (0) 2023.03.12 자바스크립트 babel 사용 해볼래요? (0) 2023.03.12 자바스크립트 nullish 병합 연산자에 대해 아십니까? (0) 2023.03.12 자바스크립트 추상클래스 어떻게 작성할까요? (0) 2023.03.12 class 문법에서 접근제한자 어떻게 해야 할까요? (0) 2023.03.11