Nest.js 란 무엇인가

sunny·2021년 11월 7일
0

백엔드

목록 보기
2/4

2. Nest.js

Nest.js란?

Nestjs는 효율적이고, 안정적이며, 확장에 용이한 서버 어플리케이션을 구축하기 위한 진보된 nodejs 프레임워크입니다.

  • NestJS는 Express와 같은 서버 프레임워크로, Express는 굉장히 쉽게 서버를 만들 수 있게 만들어 줬지만 시스템 디자인 측면에서 지원하는 것은 거의 없기 때문에 이러한 문제를 해결하고자 나온 프레임워크가 NestJS이다.

  • NestJS는 Typescript 기반의 OOP(Object Oriented Programming), FP(Functional Programming), FRP(Functional Reactive Programming)를 지원합니다.

  • 👉 참조 Typescript란?

기본 컨셉


이미지 출처
기본 컨셉은 Provider(상기 이미지에선 service), Controller를 module로 합치고,

그 모듈들을 최종적으로 app.module에 합쳐서 사용하는 것이다.

NestJS는 Singleton 패턴을 지향하기 때문에 인스턴스를 직접 생성하지 않고 모듈을 통해 Injection 하는 패턴을 권장하고있다.

직접 인스턴스를 생성하여 등록하는 방법도 지원하는데, 보통 전역적으로 적용해야할 Provider들에 사용한다.
(다만 권장하는 방식은 아니다. 인스턴스 생성을 NestJS에게 맡기는 것을 권장한다.)

  • Singleton 패턴: 전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴

Controller

BackEnd에서 흔히 사용하는 Controller 개념 그대로 생각하면 된다.

처음 요청이 들어오는 입구 역할을 담당하며, 비즈니스 로직을 따로 분리하기 위해 진입점을 따로 분리해둔 것이다.

쉽게 설명하자면 식당에 들어갔을 때 좌석을 안내해주는 직원을 생각하면 된다.

HTTP Request에 따라 어떠한 비즈니스 로직을 적용시킬지에 대한 설정을 하면 된다.

Provider

Provider는 NestJS의 거의 모든 데이터 처리 및 비즈니스 로직을 담당한다.

다만 역할에 따라 이름이 달라진다.

  • 사용자 인증: Guards
  • 클라이언트가 보내는 데이터 필터링: Pipes
  • 비즈니스 로직: Service or Handler
  • 예외처리: Exception Filters
  • Porvider 처리 과정 중 위에 해당하지 않는 무언가를 하고 싶을 때: Interceptor
  • 미들웨어: Express의 Middleware와 동일

Module

Module은 Provider와 Controller를 합치는 역할을 한다.

뿐만 아니라 다른 Module이 Provider를 사용할 수 있게 export 처리를 하거나

필요한 Provider가 있는 모듈을 Import해서 사용할 수 있게 만들어준다.

NestJS는 클라이언트의 요청별로 Controller와 Provider를 제작하고 이를 Module로 엮어 하나의 단위를 만든다고 할 수 있다.

⭐Nest.js 장점⭐

  • 효율성 : nestjs는 typescript의 적극적인 도입, DI(Dependency Injection), IoC(Inversion of Control), Module을 통한 구조화 등의 기술을 통해 생산적인 개발이 용이하다.
  • 안정적 : Nestjs는 typescript를 적극적으로 도입함으로서 서버 어플리케이션 개발 시 발생할 수 있는 오류들을 사전에 방지할 수 있도록 하였다. 또한 모듈로 감싸는 형태로 개발하기 때문에 모듈 별로 테스트 코드를 쉽게 작성할 수 있도록 구현되어 있다.
  • 확장성 : Nestjs는 module을 통해 확장이 용이하도록 설계되어 있다. 실제로 사용해보면 module을 통해 코드적으로, 논리적으로 구분한다는 장점을 크게 느끼실 수 있다. 또한 nestjs는 기본적으로 마이크로서비스 아키텍처 개발 스타일을 제공한다.

❗참조 및 출처❗
찍어먹는 NestJS - 기본개념
[nestjs] - nestjs 소개

0개의 댓글