Express 와 NestJS에 대해

김영현·2025년 3월 19일
0
post-thumbnail

들어가며

프로젝트를 진행하면서 express로도 서버를 구축해봤고 , NestJS로도 구축을 해보았는데, 이 두 개의 프레임워크를 개발에 사용하면서 느낀점과 차이점을 간단하게 비교해보려고 한다.

✔ Express

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

  • NestJSDocumentation에 나와있는 철학을 보면 이게 어떤 프레임워크인지 대략 파악할 수 있는데 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 공식문서)

profile
학생의 자세로 살아가는 개발자

0개의 댓글