NestJS를 선택한 이유 (NestJS란?)
NestJS가 무엇인지 알아보고 Modern-Agile 6기 메인 프로젝트에서 왜 NestJS를 채택했는지 알아봅시다.
NestJS란?
NestJS는 효율적이고 확장 가능한 Node.js 서버 측 애플리케이션을 구축하기 위한 프레임워크입니다. 진보적인 자바스크립트를 사용하고, TypeScript로 구축되어 완전히 지원하며(순수 자바스크립트로도 가능), OOP(Object Oriented Programming)1, FP(Functional Programming)2, FRP(Functional Reactive Programming)3의 요소를 결합합니다.
내부적으로 Nest는 Express(기본값)와 같은 강력한 HTTP 서버 프레임워크를 사용하며, 선택적으로 Fastify도 사용하도록 구성할 수 있습니다!
Nest는 이러한 일반적인 Node.js 프레임워크(Express/Fastify)보다 높은 수준의 추상화를 제공할 뿐만 아니라 개발자에게 직접 API를 노출합니다. 따라서 개발자는 기본 플랫폼에서 사용할 수 있는 수많은 타사 모듈을 자유롭게 사용할 수 있습니다.
공식 문서 참고.
NestJS를 선택하기 전에
Modern-Agile 6기 백엔드로 활동하며 메인 프로젝트(멘보샤 프로젝트)를 진행하였습니다.
프로젝트를 진행할 때 어떤 프레임워크를 사용할지에 대해 백엔드 팀원분들과 논의를 하였고, 결론적으로는 NestJS를 사용하기로 결정하였습니다. 그렇다면 저희가 왜 NestJS를 사용하게 되었을까요? 지금부터 그 이유를 다시 생각해보며 끄적여보겠습니다.
먼저, 모던애자일은 웹개발을 하고 싶은 열정은 가지고 있지만 어떻게 시작해야할지 막막한 사람들을 위해 애자일 방법론을 기반으로 웹 개발을 함께 배우는 방법을 제시하는 전문 동아리 입니다.
때문에 다른 사람들도 아직 백엔드를 할지 프론트엔드를 할지조차 정하지 못한 상태로 들어오는 경우가 많아 백,프론트 두 곳에서 모두 사용할 수 있는 javascript를 사용해서 코딩테스트를 풀며 언어에 익숙해지는 시간을 갖게 되는데, 그러다보니 자연스럽게 미니 프로젝트에서는 javascript를 사용하는 node.js기반의 Express 프레임워크를 채택하게 되었습니다.
이제, 메인 프로젝트를 진행해야하는 시간이 다가왔습니다.
그동안에 Express를 사용해 왔었는데 메인 프로젝트를 진행할때는 다른 프레임워크를 사용할지 아니면 Express를 계속 사용할지에 대해 논의를 하였습니다.
사실 ‘새로운 프레임워크를 배우면서 동시에 프로젝트에 적용하는게 힘들지 않을까?’ 라는 두려움에 Express를 계속 사용하고 싶었지만… Express를 사용하면서 느꼈던 불편함도 해결해보고 싶었고 새로운 기술을 배우며 프로그래밍에 대한 시야를 넓히고 싶었기에 새로운 프레임워크를 사용하기로 결정하였습니다.
Express를 사용하면서 느낀 가장 큰 단점은 “하나부터 열까지 개발자가 정하고 구현해야 한다” 였습니다.
Express는 제약이 없어 구조가 자유롭다는 장점이 있지만, 이는 개발자가 코드를 어떻게 구조화할지에 대한 명확한 가이드라인이 없다는 것을 의미합니다. 미니 프로젝트임에도 불구하고 디자인 패턴부터 에러 핸들링, 라이프사이클 관리까지 모든 것을 개발자가 스스로 정하고 구현해야 했기에 매우 귀찮고 힘들었습니다.
개발자가 개입할 수 있는 부분이 많다는 건 결국 개발자가 해야할 일이 많아지고 오류가 발생할 확률도 높아지는 것이니까요.
결국 위와 같은 이유로 Express는 프로젝트 규모가 커지면 사용하기 어렵다는 결론에 도달하게 되었습니다.
NestJS를 선택한 이유
이제 Express의 단점을 보완시켜줄 프레임워크로 NestJS를 선택한 이유에 대해 설명드리겠습니다.
1. 구조화된 아키텍처
NestJS는 Provider, Module, Controller, Service, Middleware, Pipe, Guard, Decorator, Filter, Exception Filter 등의 요소들을 제공하며, 이러한 요소들을 조합하여 구조화된 아키텍처를 구축할 수 있습니다. 이러한 구조화된 아키텍처는 프로젝트 규모가 커질수록 코드의 가독성과 유지보수성을 높여줍니다.
기능 구현하기도 바쁜 저희 팀에게는 매우 큰 장점이 될 것이라고 생각되었습니다.
2. TypeScript 사용
NestJS는 TypeScript로 쓸 것을 가정하고 만들어진 프레임워크입니다. TypeScript를 사용하면 정적 타입 검사를 통해 런타임 에러를 줄일 수 있고, 코드의 가독성을 높일 수 있습니다.
3. 잘 정리되어 있는 공식 문서
처음에 데코레이터, 파이프, 프로바이더 등의 용어가 생소했지만, 공식 문서가 잘 정리되어 있다는 점에서 NestJS를 안심하고 선택할 수 있었던 것 같습니다.
결론적으로 NestJS를 사용하여 메인 프로젝트를 진행하게 된 것이 좋은 선택이었다고 생각합니다.
지금부터는
그 뒤는 안돼 임마!
NestJS를 사용하여 프로젝트에서 제가 구현했던 기능들부터 다른 팀원분들이 구현했던 기능들도 직접 한번 구현해보면서
차근차근 포스팅 해보겠습니다! 😊
그럼 다음 포스트에서 뵙겠습니다 뾰로롱~
객체 지향 프로그래밍(Object Oriented Programming, OOP)은 컴퓨터 프로그래밍의 패러다임 중 하나로, 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 “객체”들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고 데이터를 처리할 수 있다. ↩
함수형 프로그래밍(Functional Programming, FP)은 계산을 수학적 함수의 평가로 간주하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임이다. ↩
함수형 반응형 프로그래밍(Functional Reactive Programming, FRP)은 함수형 프로그래밍과 반응형 프로그래밍을 결합한 프로그래밍 패러다임이다. ↩