이번에 회사에서 mobile BFF를 개발해야한다는 소식을 접했다. 물론 나는 앱 개발자지만 앱에서 모든 비즈니스 로직을 들고있는건 앱이 무거워지기 때문에 mobile BFF를 만들어 앱에서의 비즈니스 로직을 걷어내고 UI적인 동작만 수행한다면 앱이 보다 가벼워지고 유지보수도 용이할거라 생각했다.(물론 bff도 유지보수 해야해서 일이 늘어나긴했지만... )
어쨋든.. 어떤 프레임워크로 bff를 만들어야 괜찮을지 찾아보다가 다른 팀에서 nest.js 기반으로 bff를 만들어 사용하고있다고해서 우리도 nest.js로 mobile bff를 만들어보기로 했다.
이번 노트에서는 nestJS
에대한 기본 소개에 대해 작성해 보려한다.
NestJS
는 Node.js
에 기반을 둔 웹 API 프레임워크로써 Express 또는 Fastify 프레임워크를 래핑하여 동작한다.
NestJS
는 데이터베이스, ORM, 설정, 유효성 검사 등 수많은 기능을 기본 제공한다. 또 필요한 라이브러리를 쉽게 설치 (npm, yarn 등)하여 기능을 확장할 수 있는 Node.js의 장점을 그대로 가지고 있다.
또, 모듈/컴포넌트 기반으로 프로그램을 작성해 코드 재사용성을 높일 수 있다.
프로그래밍 언어로는 타입스크립트
를 기본으로 사용해 타입스크립트가 가진 타입시스템의 장점을 누릴 수 있다.
NestJS
는 타입스트립트
언어를 채택하고있다. 물론 자바스크립트에서도 동작이 가능하지만 nestJS 개발 시 타입스크립트를 고려하여 만들었기때문에 타입스크립트 사용을 적극 권장한다.타입스크립트
는 타입을 지정하여 개발자 또는 시스템이 코드를 읽고 디버깅 하는 데 자바스크립트의 실수 및 버그를 사전에 잡아줘 개발 시 발생할 수 있는 이슈를 미연에 방지할 수 있다.nestJS
아키텍쳐 자체가 모듈 별로 감싸진 형태로 작성되어 있기 때문에 nestJS 에서 지원하는 테스트를 직접 실행하며 정말 안정성있게 작업할 수 있다.NestJS
는 모듈식 아키텍쳐
를 사용하는데, 다른 라이브러리
와 함께 사용할 수 있어 정말 유연한 확장성을 제공하고 있다.객체지향프로그래밍
의 특성중 하나가 캡슐화이다. NestJS
는 비슷한 기능을 하는 컨트롤러
,서비스
등을 묶어 module
파일 내에서 모두 관리한다.nestJS
는 타입스크립트의 적극적인 도입, DI(Dependency Injection)
, Ioc(Inversion of Control)
, Module
을 통한 구조화 등의 기술을 통해 생산적인 개발이 용이하다.NestJS
를 공부하면서 가장많이 비교가 되는 프레임워크는 바로 Express
이다. 그렇다면 왜 NestJS
와 Express
를 가장 많이 비교하고 왜 NestJS
를 사용해야하는지 알아보자.
그전에 간단히 Express에 대해 설명하자면.
Express
는 웹 및 모바일 애플리케이션을 위한 일련의 강력한 기능을 제공하는 간결하고 유연한 Node.js 웹 애플리케이션 프레임워크이다.
Node.js의 표준 웹서버 프레임워크로 불려질 만큼 많은 곳에서 사용하고있다.
Express의 특징으로는 다음과 같다.
- Express는 NodeJS 기반 프레임워크 1위로 수많은 개발자들에게 개발 규칙을 강제하여 코드 및 구조의 통일성을 향상시킬 수 있다.
- 가장 보편적으로 사용되어 많은 생태계가 구축되어있다.
- 타입스크립트의 사용이 가능하지만 각종 세팅 과정이 복잡하다.
- 웹서버를 빠르게 구현하기 위해 적합하며 개발에대한 자유도가 높다.
NestJS
와 Express
의 차이점은 다음과 같다.
1. 앞전에 Express
는 개발에 대한 자유도가 높다
고 했다. 이는 장점이자, 단점이 될 수 있다. 한 프로젝트를 여러명이 개발하는 경우에 각 개발자 개개인마다의 아키텍쳐가 달라 이후 유지보수에 어려움
을 겪을 수 있다. 반면에 NestJS
는 개발 자유도가 Express에 떨어지는 반면 아키텍처의 정의도 프레임워크에서 제공하기 때문에 각 개발자들의 아키텍처가 통일되어 서로 작성한 코드의 구조를 쉽게 파악
할 수 있다.
2. 이는 명백한 차이점이라고 보긴 어렵지만 NestJS
는 타입스크립트를 기본 지원하고 바닐라 자바스크립트
로도 작성 가능하다. Express
도 타입스크립트 개발이 가능하지만 각종 세팅에대한 복잡도가 높다.
3. 가볍고 빠른 웹 서버 구축을 위해선 Express
가 대규모 프로젝트에서는 NestJS
가 유리하다.
4. NestJS
는 많은 기능들을 프레임워크자체에 포함하고 있고, 라이브러리 적용이 수월하다. 반면 Express
는 자유도가 높은 대신 자신에게 맞는 라이브러리를 찾기위해 많은 노력이 요구된다.
📒 참조