NestJS는 TypeScript(타입 스크립트)를 지원하는 효율적이고 확장 가능한 Node.js의 서버 애플리케이션 프레임워크이며,
OOP (Object Oriented Programming), FP (Functional Programming) 및 FRP (Functional Reactive Programming) 요소를 결합하는 특징을 가지고 있습니다.
공식 문서에 따르면, 최근 몇 년간 Node.js 덕분에 Javascript는 프론트, 백엔드 모두를 위한 웹의 "링구아 프랑카"가 되었고 이로 인해 Vue, React, Angular와 같은 프로젝트가 생겨 개발자의 생산성이 향상되고 빠르고, 테스트가 가능하며 확장성이 가능한 frontend application을 만들 수 있습니다.
그러나 Node와 Server 측 Javascript를 위한 훌륭한 모듈, 라이브러리들이 존재해도 Architecture의 주요 문제를 해결하지 못했습니다!
Node.js로 Backend를 만드는 것은 마치 레고와 같습니다. 레고처럼 조립할 수 있는 부품이 있고, 그 작은 부품들을 차근차근 조립하다 보면 거대한 완성품을 만들 수 있습니다. Node.js도 마찬가지로 하나의 파일에서 시작해서 점차 점차 커지게 됩니다. 규칙도, 제약도 없이 자유롭게 할 수 있고 0에서 거대한 것을 창조하는 과정이기에 매우 훌륭한 경험이 될 수 있습니다.
문제는 너무 제약이 없고, 너무 자유롭다는 것입니다. 때로는 규칙이나 제약, 즉 구조와 프레임워크가 필요할 때가 있습니다. 다른 언어, 예를 들어 파이썬에는 장고라는 프레임워크가 있고 Java는 Spring이 있습니다. 하지만 Node.js에는 규칙이 없고, 어떤 패턴을 따라야 할지도 모르며 사용자가 정의해서 사용해야 합니다.
이런 자유로움은 좋은 점도 많지만, 프로젝트로 협업을 진행할 경우 매우 어렵습니다. 개발자마다 다양한 Architecture 패턴을 가지고 있고, 프로젝트의 규모가 커질수록 개인의 구조와 스타일의 다름으로 인해 협업 과정에 드는 소통 비용이 증가합니다. 이는 생산성 저하와 유지 보수의 어려움으로 이어집니다.
NestJS는 Architecture 구조를 제공함으로써 Node.js의 주요 문제를 해결해 줍니다!
NestJs는 Node.js를 위한 프레임워크로, 규칙과 구조 없이 자유분방한 node.js를 순식간에 Python+Django, Java+Spring 수준으로 만들어줍니다. 때문에 각 개발자들이 Architecture를 통일하고 소통 비용을 절감하며, 확장성 있고 효율적인 개발을 할 수 있습니다.
NestJS는 개발자와 팀이 고도로 테스트 가능하고, 확장 가능하며, 느슨하게 결합되고 유지관리가 쉬운 애플리케이션을 만들 수 있는 즉시 사용 가능한 애플리케이션 아키텍처
를 제공합니다.
그 외에도 TypeScript기반의 Framework
이며 Dependency Injection(의존성주입)
, Inversion of Control(제어의 역전)
, Module
을 통한 구조화 등 생산성에 용이합니다.
NestJS는 TypeScript를 적극적으로 도입하면서 서버 어플리케이션 개발 시 발생 가능한 오류들을 사전에 방지할 수 있도록 합니다. 또한 세부적인 Module로 나누어져 있기 때문에 독립적인 Unit Test를 쉽게 작성 가능하도록 구현되어 있습니다.
NestJS는 Module Class를 지원하며, 각 Module은 비슷한 기능과 개념들을 Class 한 곳에 담아 캡슐화하고 서로 Import가 가능하도록 구현되어 있습니다. 이러한 Module 구조는 Architecture를 조직적(Organize)
으로 가져가게 하고 느슨한 결합(Loose Coupling)
을 가능하게 만들어 확장성(Extensible)
과 테스트 가능성(Testable)
을 높입니다.