Nest.js란

박찬효·2022년 9월 16일
0

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의 특징

  1. 효율성

    • NestJs는 개발자와 팀이 고도로 테스트 가능하고, 확장 가능하며, 느슨한 결합되고 유지관리가 쉬운 애플리케이션을 만들 수 있는 (즉시 사용 가능한 애플리케이션 아키텍처)를 제공합니다.
  2. 안정성

    • NestJs는 TypeScript를 적극적으로 도입하면서 서버 어플리케이션 개발 시 발생 가능한 오류들을 사전에 방지 할 수 있도록 합니다.
  3. 확장성

    • NestJs는 Module Class를 지원하며 , 각 Module은 비슷한 기능과 개념들을 Class 한 곳에 담아 캡슐화하고 서버로 import가 가능하도록 구현되어 있습니다.
profile
개발자가 되기 위한 1인

0개의 댓글