NestJs 이란?

Nest(NestJs)는 효율적이고 확장에 용이한 Node.js 프레임워크이다.

거의 기본으로 쓰였던 Express.js는 로직 구성이 너무 자유롭다는 점에서 정해진 아키텍쳐가 없다는 점에서 코드의 가독성이 좋지않다. 그래서 이러한 문제를 해결하기 위해 나온 것이 NestJs이다. Nest는 Express와 Fastify을 아직까지 지원을 한다.

  • NextJs는 TypeScript로 구축되고 완벽하게 지원하며 (JavaScript으로도 할 수 있다.)
  • OOP(Object Oriented Programming) 객체지향 프로그래밍, FP(Functional Programming) 함수형 프로그래밍, FRP(Functional Reactive Programming) 함수형 반응형 프로그래밍 을 지원한다.

NestJs 특징

NestJs는 크게 Module, Controller, Provider로 구분, 분리되는데 이러한 컴포넌트끼리의 조합으로 전체 애플리케이션을 완성 시킨다.

Provider

@Injectable()
export class Service {}

NestJs 출처:https://docs.nestjs.com/providers

Nest의 가장 작은 단위의 컴포넌트를 말하며, @Injectable() 데코레이터로 나타낼 수 있고, Provider는 다른 Provider나 Component에 주입 될 수 있다. 즉, 서로 다양한 관계를 만들 수 있다. 이러한 Provider의 종류로는 대표적으로 Service가 있고 Middleware, Pipe, Guard, Interceptor가 존재한다.


Controller

@Controller("")
export class Controller {}

NestJs 출처:https://docs.nestjs.com/controllers

Controller는 들어오는 요청을 처리하고 클라이언트에게 그에 대한 응답을 반환하는 역할을 담당한다. Provider이 비즈니스 로직을 추상화 한다면, Controller는 실제 외부와의 통신, 라우팅을 담당한다. 메서드앞에 @Get() / @Post() / @Patch() / @Detele() 특정 데코레이터로 하여금 HTTP 요청의 특정 엔드포인트에 대한 핸들러를 생성하도록 한다.


Module

@Module({
  imports: [],
  controllers: [],
  providers: [],
  exports: [],
})
class Module {}

NestJs 출처:https://docs.nestjs.com/modules

Module은 수평적으로 존재하는 Provider와 Controller의 논리적은 기능과 도메인에 따라 하나로 묶어주는 역할을 한다. Provider와 Controller를 묶어서 하나의 Module을 생성하고 다른 모듈이 Provider를 사용할 수 있게 exports를 하거나 필요한 Provider를 imports하여 사용할 수 있게 하는등 Module은 재사용성을 높여주는 역할을 한다.