최근에 나는 학교 프로젝트로 Express 프레임워크를 사용한 서버 개발을 진행했다. 과거에 회사에 있을때는 nestJS 기반으로 프로젝트를 개발했었는데, 그때는 그저 Express보다 nestJS가 더 좋다는 이유만으로 사용했다.
둘 다 사용해본 지금 시점에 두 프레임워크 간 장단점을 이야기해보려 한다.
Express는 웹 및 모바일 애플리케이션을 위한 일련의 강력한 기능을 제공하는 간결하고 유연한 Node.js 웹 애플리케이션 프레임워크이다.
Node.js의 표준 웹서버 프레임워크로 불려질 만큼 많은 곳에서 사용하고있다.
Express의 특징으로는 다음과 같다.
- 가장 보편적으로 사용되어 많은 생태계가 구축되어있음
- 타입스크립트의 사용이 가능하지만 각종 세팅 과정이 복잡해짐
- 웹서버를 빠르게 구현하기 위해 적합하며 개발에대한 자유도가 높음
실제 프로젝트에 사용해본 결과 SpringBoot나 NestJS에 비해 초기 설정이나 개발 과정에서의 자유도가 굉장히 높다는 것을 체감했다. 앞서말한 NestJS와 같은 프레임워크는 정해진 구조가 존재하기에 이 부분을 맞춰주어야 설계하기 쉬워진다. 이 부분은 설계과정이 쉽고 빨라진다는 장점도 있지만, 개발자 입맛대로 작성하기 어렵다는 단점도 존재한다.
NestJS는 Node.js에 기반을 둔 웹 API 프레임워크로써 Express 또는 Fastify 프레임워크를 래핑하여 동작한다.
NestJS는 데이터베이스, ORM, 설정, 유효성 검사 등 수많은 기능을 기본 제공한다. 또 필요한 라이브러리를 쉽게 설치 (npm, yarn 등)하여 기능을 확장할 수 있는 Node.js의 장점을 그대로 가지고 있다.
또, 모듈/컴포넌트 기반으로 프로그램을 작성해 코드 재사용성을 높일 수 있다.
프로그래밍 언어로는 타입스크립트를 기본으로 사용해 타입스크립트가 가진 타입시스템의 장점을 누릴 수 있다.
NestJS의 특징으로는 다음과 같다.
- 안정성
NestJS는 타입스트립트 언어를 채택함.
타입스크립트는 타입을 지정하여 개발자 또는 시스템이 코드를 읽고 디버깅 하는 데 자바스크립트의 실수 및 버그를 사전에 잡아줘 개발 시 발생할 수 있는 이슈를 미연에 방지할 수 있음
- 확장성
NestJS는 모듈식 아키텍쳐를 사용하는데, 다른 라이브러리와 함께 사용할 수 있어 유연한 확장성을 제공함
- 캡슐화
객체지향프로그래밍의 특성중 하나가 캡슐화임. NestJS는 비슷한 기능을 하는 컨트롤러,서비스등을 묶어 module파일 내에서 모두 관리함
- 효율성
nestJS는 타입스크립트의 적극적인 도입, DI(Dependency Injection), Ioc(Inversion of Control), Module을 통한 구조화 등의 기술을 통해 생산적인 개발이 용이함
NestJS를 사용하다가 SpringBoot로 Migration한 경험이 있는데, 이때 느낀 점은 NestJS가 SpringBoot의 개념을 녹여낸 것 같다는 것이었다. 데코레이터, DI, MVC 패턴 등을 사용하는 부분에서 느끼게 되었다.
Express는 나의 입맛대로 유연하게 개발을 할 수 있다는 장점이 있지만, 프로젝트의 규모가 커지거나 협업을 하는 과정에서 엄격하게 Convention을 맞추지 않으면 굉장히 어려울 것 같다는 생각이 든다. 그래서, 단기간에 빠르게 가벼운 웹 서버를 개발해야하는 상황이라면 Express 사용을 고려해보면 좋을 것 같다.
NestJS는 프레임워크에서 자체적으로 패턴과 같은 것들을 제공하기에 협업이나 대규모 프로젝트에서 사용하면 수월할 것 같다는 생각이 든다. 또한, ypescript 자체의 안정성과 확장성, OOP 개념의 도입, 효율성 등도 장점으로 존재한다. 다만, 그만큼 프레임워크에 대한 이해도가 높아야 할 것 같고, Express에 비해 커뮤니티가 상대적으로 작다보니 이 점도 고려해야할 것 같다.