프로젝트를 진행하면서 express
로도 서버를 구축해봤고 , NestJS
로도 구축을 해보았는데, 이 두 개의 프레임워크를 개발에 사용하면서 느낀점과 차이점을 간단하게 비교해보려고 한다.
const express = require('express');
const app = express();
const port = 3000;
// GET 라우트
app.get('/', (req, res) => {
res.send('Hello, World!');
});
// 서버 시작
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
- 위의 코드 처럼 딱 이정도 세팅만 하면 서버를 실행할 수 있어서 간편하고 빠르게 서버 애플리케이션을 구성할 수 있는 장점이 있다.
- 미들웨어를 통해 필요한 기능을 추가할 수 있다.
Express
는 기본적으로JavaScript
로 작성되어 있어, 타입 안정성이 보장되지 않는다.TypeScript
를 사용하려면 별도의 설정이 필요하고,Express
프레임워크 내부에서 선언된Body, Query, Params, Cookies
타입 같은 경우에는Express.Request
를 확장을 해줘야 한다.
- 내가 경험한
Express
는 정말 코드 몇줄로 서버를 실행시키는 대신 뭔가 틀이라던지 프레임워크에서 제공해주는 것들이 많이 빈약한 느낌이였다. 그래서Layered Architecture
를 도입해서 프로젝트의 구조를 맞추고 해당 프로젝트만의 틀을 짰던 기억이 있다.Express
는 기본적으로Middleware
기반으로 돌아가기 때문에Guard
라던지Interceptor
등을 전부Middelware
라고 부른다. 그래서 개발자가 알아서라이프사이클
을 직접 조정을 해줘야 한다. 당연히 프로젝트가 커지면 커질수록 관리해야하는 부분이 커질 것이다.
app.use((req, res, next) => {
console.log('Request received');
next(); // 다음 미들웨어로 넘어감
});
위 코드처럼 next()
로 다음 미들웨어로 넘기는 방식으로 구성되어있다.
NestJS
의 Documentation에 나와있는 철학을 보면 이게 어떤 프레임워크인지 대략 파악할 수 있는데 However, while plenty of superb libraries, helpers, and tools exist for Node (and server-side JavaScript), none of them effectively solve the main problem of architecture. 라고 표현했다.
한마디로 아키텍처적인 문제를 효과적으로 해결 할 수 있는 Node.js
관련 도구가 없다는 것이다.
다음 문단을 보면 NestJS
는 개발자와 팀이 테스트하기 쉽고, 확장 가능하고, 느슨하게 결합되고, 쉽게 유지 관리할 수 있는 애플리케이션을 만들 수 있는 즉시 사용 가능한 애플리케이션 아키텍처를 제공한다고 하고, Angular에서 많은 영감을 받았다고 한다. (뭔가 많은 문제들을 해결한 것? 같은 느낌이다.)
- 모듈화된 아키텍처: 대규모 애플리케이션을 모듈 단위로 나눠서 관리할 수 있어 확장성과 유지보수가 용이하다.
- 타입 안전성:
TypeScript
를 기본적으로 지원하여, 코드 작성 시 강력한 타입 검사를 제공한다.- 의존성 주입:
의존성 주입(Dependency Injection)
패턴을 사용하여 객체 간의 관계를 효율적으로 관리할 수 있다.- 내장된 기능: 라우팅, 미들웨어, 예외 처리 등 다양한 기능이 내장되어 있다.
- 프로젝트를 세팅할 때 구조가 잡혀있어서 다른
NestJS
프로젝트의 코드를 보기 편하고 이식성이 높다고 할 수 있다.
NestJS
의 라이프사이클이 구성되어있다.
Express
와는 다르게 러닝커브가 있다.TypeScript
에 익숙하지 않은 개발자 또는 나도 공부할 때 이해하는데 시간이 걸렸던 데코레이터 , 의존성 주입 , 제어역전 등 알아야할 개념들이 있어서 학습이 필요하다.- 제공해주는 설정들이
Express
에 비해 많아서 처음에는 복잡하게 느껴질 수 있다.
Express
를 처음 프로젝트에 사용해보고 정말 뭐가 제공되는 것이 없구나를 느꼈다가 NestJS
를 사용해보고 초반 세팅부터 너무 편했던 기억이 있다. NestJS
도 내부적으로는 Express
로 이루어져 있고, 확장판이라고 생각하면 좋을 것 같다. NestJS
를 공부하면 공부할 수록 NodeJs
를 이용한 서버 개발에는 정말 좋은 프레임워크라고 생각이 되서 앞으로도 NestJS
를 더욱 이용할 것 같다.
https://nodejs.org/ko/about (Express 공식문서)
https://docs.nestjs.com/ (NestJS 공식문서)