처음부터 차근차근

[NestJS] NestJS는 왜 만들어졌을까?? 본문

FrameWork/NestJS

[NestJS] NestJS는 왜 만들어졌을까??

HangJu_95 2023. 11. 13. 23:17
728x90

NestJS란??

Nest는 효율적이고 확장 가능한 Node.js 서버 측 애플리케이션을 구축하기 위한 Framework입니다. JavaScript를 사용하고 TypeScript로 빌드되며 완벽하게 지원하며 (개발자가 순수 JavaScript로 코딩할 수 있음) OOP, FP(Functional Programming) 및 FRP(Functional Reactive Programming) 요소를 사용할 수 있게 해줍니다.
  • Node.JS 기반의 서버 사이드 Framework이다.
  • 효율적이고 안정적이며 확장 가능한 Server Application을 구축하기 위한 Framework라고 보면 된다.
  • Enterprise급 Application 구축에 적합하다. (Node진영의 Spring 대항마로 나온 느낌..)
  • 모듈식 Architecture로 인한 유연한 구조를 가지고 있다.
  • Typescript 기반

왜 NestJS를 사용해야될까??

1. 정형화된 Architecture를 제공한다.

Express로 웹 애플리케이션을 구현하다 보면, 굉장히 자유롭다는 것을 느낄 수 있다.

정형화된 아키텍처 구조가 없다보니, 개발자가 직접 구조를 만들어서 작성하고, 필요한 것을 추가 할 수 있다.

그러나 이것은 단점이 명확한데, 나 혼자 짜면 상관이 없지만 협업을 하다보면 잘 짜여진 아키텍처와 디자인 패턴이 중요하다고 느껴질 때가 있다.

NestJS는 정형화된 아키텍처 구조(모듈, 컨트롤러, 프로바이더 등)를 제공하며 이를 통해 협업 간 유지보수에 용이하게 만들어졌다.

 

2. Typescript 지원

Express도 Typescript를 지원하지만, 전부 다 지원하는 것은 아니다.

Javascript로 웹 서버를 구현하다 보면, 런타임 도중에 type Error로 인한 문제가 발생하곤 한다.

Typescript는 이러한 문제를 해결해주며, 빌드 시 Type Error를 잡아주는 장점이 존재하고, 또한 코드 자동 완성과 Type에 대해서 명시해 주기 때문에 이러한 에러를 잡기에 굉장히 용이하다.

또한 Typescript에만 존재하는 interface, Decorator 등 다양한 기능을 활용할 수 있다.

 

3. Decorator 사용

Class, Method, 속성 등 다양한 곳에 decorator를 지원한다.

이를 통해 개발자가 코드 작성에 수월해지며, 이는 생산성 향상에 도움을 준다.

 

4. E2E, Unit Test 용이

NestJS는 기본적으로 Jest를 통해 Test를 진행한다.

또한 Test하기 쉽도록 설정을 자동으로 해주는 점이 아주 좋다.

(이는 나중에 의존성 유입에서 다시 설명한다)

 

5. 의존성 유입(DI)

Express에는 Spring이나 NestJS와 같이 Ioc를 도와주는 IoC 컨테이너가 없기 때문에, 의존성 유입 컨트롤을 require로 직접 한다.

그러나 NestJS는 IoC 컨테이너가 있기 때문에 의존성 유입에 도움을 주는 요소가 있으며,

우리는 편리하게 Injectable 데코레이터를 통해 의존성 주입을 진행한다.

또한 이를 관리해주기 때문에, Test환경에서도 자동으로 Mock 데이터 의존성 주입을 변경해준다.

NestJS 설치 및 프로젝트 생성

NestJS 프로젝트를 진행하기 위해서는 먼저 Nest를 npm으로 전역 설치하면 된다.

npm i -g @nestjs/cli

nestjs CLI을 설치했다면 이후에는 프로젝트를 생성하는데, 폴더 구조도 자동으로 정의해준다.

# 프로젝트 폴더이름을 project-name에 입력해준다
nest new project-name

# 혹은 이미 폴더 이름을 만들었다면
# 폴더 내부에 terminal을 열어 아래와 같이 입력한다.
nest new ./

 

이렇게 만든다면 알아서 폴더를 정의하고 구현을 직접 해준다.

'FrameWork > NestJS' 카테고리의 다른 글

[NestJS] Middleware  (0) 2023.11.25
[NestJS] Request Lifecycle  (0) 2023.11.25
[NestJS] Module  (1) 2023.11.24
[NestJS] Providers  (0) 2023.11.24
[NestJS] Controller  (1) 2023.11.24