Nest.js란
NestJS는 TypeScript(타입 스크립트)를 지원하는 효율적이고 확장 가능한 Node.js의 서버 애플리케이션 프레임워크이며, OOP (Object Oriented Programming), FP (Functional Programming) 및 FRP (Functional Reactive Programming) 요소를 결합하는 특징을 가지고 있습니다.
기본 컨셉
기본 컨셉은 Provider,Controller를 module로 합치고, 그 module들을 최종적으로 app.module에 합쳐서 사용하고 있습니다.
NestJS는 싱글톤패턴을 지향하기 때문에 인스턴스를 직접 생성하지 않고 모듈을 통해 Injection 하는 패턴을 권장합니다.
Singleton 패턴 이란 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴입니다.
Controller
애플리케이션 안에서 각각의 특정한 요청들을 처리하는데 있습니다. 컨트롤러의 라우팅 메커니즘이 어떤 컨트롤러가 어떤 요청을 받아야 하는지 결정합니다. 대부분 하나의 컨트롤러에는 여러개의 경로를 가지고 있으며 각각의 다른 경로는 다른 액션을 보여주게 됩니다.
가장 기본적인 컨트롤러를 만들기 위해서는 클래스와 데코레이터를 사용합니다. 데코레이터는 클래스와 그에 맞게 필요한 메타데이터를 연계시켜주고 Nest에 라우팅 맵을 만들 수 있게 도와줍니다.
Providesrs
Provider에는 NestJs의 모든 데이터 처리 및 비즈니스 로직을 담당합니다.
다만 역할에 따라 이름이 달라질 때도 있습니다.
사용자 인증 부분: Guards
클라이언트가 보내는 데이터 필터링: Pipes
비즈니스 로직 : Service or Handler
예외 처리 : Execption Filters
Provider: 처리 과정 중 위에 해당하지 않는 무언가를 처리하고 싶을 때: Interceptor
미들웨어 : Express의 Middleware과 동일
Providersms는 Middleware를 거친 후에 해당 api에 접근 가능한 유저인지를 확인하는 Gaurd를 거칩니다. 이후 Pipes에서 클라이언트가 전달한 데이터를 원하는 형태로 가공합니다.
이후 비즈니스 로직을 처리하는 Handler(Service)에서 필요한 작업을 수행한 후 클라이언트에게 데이터를 전송합니다.
Module
Module은 Provider와 Controller를 합치는 역할을 합니다. 뿐만 아니라 다른 Module이 Provider가 있는 모듈을 import해서 사용할 수 있게 만들어줍니다.
NestJs는 클라이언트의 요청별로 Controller와 Provider를 제작하고 이를 Module로 엮어 하나의 단위를 만든다고 할 수 있습니다.
Nest Js의 특징
효율성
안정성
확장성