AmberAx

Node.js와 Express의 상황

· 6 min read
Node.js와 Express의 상황

Node.js는 비동기 I/O와 단일 스레드 구조로 인해 서버 개발에서 혁신적인 변화를 가져온 런타임 환경입니다.

이로 인해 JavaScript로 백엔드 서버를 구축할 수 있게 되었고, 빠르고 효율적인 애플리케이션 개발이 가능해졌습니다.

이와 함께 등장한 Express는 Node.js의 대표적인 웹 프레임워크로, 간결함과 유연성을 중심으로 설계되었습니다. Express는 빠르게 인기를 얻으며, Node.js 생태계의 표준으로 자리 잡았습니다. 하지만 시간이 지나면서 Express의 유지보수 문제와 현대적인 요구 사항에 대한 대응 부족이 지적되기 시작했습니다. 그럼에도 불구하고, 여전히 많은 개발자들이 Express를 선택하거나 고민하고 있습니다. 왜 그럴까요?

Express의 현재 위치 #

Express는 Ryan Dahl이 Node.js를 처음 설계한 직후, TJ Holowaychuk에 의해 만들어졌습니다. 그러나 TJ는 오래전에 프로젝트에서 손을 뗐고, 현재는 OpenJS Foundation에서 관리되고 있습니다. 이로 인해 Express의 유지보수 상태에 대한 우려가 커졌습니다. 실제로 최근 몇 년 동안 Express는 상대적으로 낮은 업데이트 빈도를 보이고 있으며, 주요 기능보다는 보안 패치와 안정성 개선에 초점이 맞춰져 있습니다.

TJ Holowaychuk은 자신의 미디엄 글에서 Express를 떠난 이유와 당시의 개발 철학을 설명했습니다. Farewell Node.js에서 관련 글을 확인할 수 있습니다.

여전히 많은 개발자들이 Express를 사용하는 이유

  1. 성숙한 생태계: Express는 오랜 기간 동안 Node.js 생태계의 중심에 있었습니다. 이로 인해 수많은 플러그인, 미들웨어, 그리고 커뮤니티 지원이 존재합니다.
  2. 학습 자료의 풍부함: 강의, 튜토리얼, 서적, 블로그 등 학습 자료가 방대합니다. 이를 통해 초보자들도 쉽게 접근할 수 있습니다.
  3. 익숙함: 많은 개발자들이 Express에 익숙하며, 기존 프로젝트에서 이를 사용하고 있습니다. 새로운 프레임워크로 전환하는 것은 시간과 비용이 들기 때문에 기존 프로젝트에서는 유지되는 경우가 많습니다.

Express의 한계 #

Express는 본질적으로 경량화된 프레임워크로 설계되었습니다. 그러나 현대 웹 개발 요구사항이 점점 더 복잡해지면서 Express가 다음과 같은 점에서 부족하다는 평가를 받고 있습니다:

  • 구조화 부족: Express는 자유도가 높지만, 대규모 애플리케이션을 개발할 때 명확한 구조를 제공하지 않아 복잡도가 증가할 수 있습니다. 팀 단위로 협업하는 경우 특히 문제가 될 수 있습니다.
  • TypeScript 지원 미흡: TypeScript를 사용하는 개발자들이 늘어나고 있지만, Express는 TypeScript 지원이 기본적으로 포함되어 있지 않아 추가적인 설정이 필요합니다. 최신 프레임워크들이 기본적으로 TypeScript를 지원하는 것과 비교했을 때, 이는 경쟁력 약화로 이어질 수 있습니다.
  • 성능 한계: Express는 경량 프레임워크지만, 최신 대안들에 비해 성능 최적화가 부족하다는 지적을 받습니다. 특히 고성능 API 서버가 요구되는 환경에서는 이러한 한계가 두드러집니다.

대안 오픈소스 프레임워크 #

Express의 한계를 보완하기 위해 등장한 다양한 프레임워크들이 있습니다. 이들 중 일부는 Express를 대체하며 많은 사랑을 받고 있습니다.

Koa

  • 특징: Express의 창립 팀이 설계한 경량 프레임워크로, 미들웨어 작성을 위해 async/await를 기본으로 채택했습니다.
  • 장점: 유연성과 현대적인 JavaScript 문법 지원. 간결한 코드를 작성할 수 있어 유지보수가 용이합니다.
  • 단점: 생태계가 Express만큼 풍부하지 않아 플러그인 선택지가 제한적입니다.

NestJS

  • 특징: Angular에서 영감을 받은 구조적이고 TypeScript 중심의 프레임워크.
  • 장점: 모듈화와 데코레이터를 사용한 간결한 코드 작성, 강력한 TypeScript 지원. 대규모 애플리케이션 개발에 적합합니다.
  • 단점: 러닝 커브가 다소 높고, 초보 개발자에게는 부담스러울 수 있습니다.

Fastify

  • 특징: 성능에 초점을 맞춘 빠르고 효율적인 프레임워크.
  • 장점: 플러그인 기반 설계로 높은 확장성과 우수한 성능 제공. JSON 처리 속도가 Express보다 빠릅니다.
  • 단점: Express에 비해 생태계와 커뮤니티가 상대적으로 작아 학습 자료가 부족할 수 있습니다.

기타 프레임워크

  • Hapi: 대규모 애플리케이션 개발을 위한 완성도 높은 프레임워크. 보안과 구성 관리에 강점이 있습니다.
  • Sails.js: MVC 패턴을 제공하며, 데이터 중심 애플리케이션에 적합. 그러나 학습 곡선이 높고 최신 기술 트렌드를 따르지 않는다는 지적이 있습니다.

Express와 대안들의 비교 #

프레임워크 기능성 학습 곡선 생태계 성능
Express 기본적인 기능 제공 쉬움 매우 풍부 보통
Koa 유연성 높은 미들웨어 중간 제한적 좋음
NestJS 구조화된 설계 어려움 빠르게 성장 중 보통
Fastify 성능 중심 설계 중간 제한적 우수

실제 사용 현황 #

현재 NPM 다운로드 수를 보면 여전히 Express가 가장 높은 다운로드 수를 기록하고 있습니다. 이는 Express가 대체로 초보자와 소규모 프로젝트에서 선호되기 때문입니다. 대규모 프로젝트나 엔터프라이즈 환경에서는 점점 더 많은 개발자들이 NestJS와 Fastify를 고려하고 있습니다.

Express의 강세 원인

  1. 기존 코드베이스: Express로 구축된 기존 코드베이스가 많아 유지보수 차원에서 계속 사용됩니다.
  2. 도구 및 라이브러리 지원: Express에 특화된 도구와 라이브러리가 많아 빠른 개발이 가능합니다.
  3. 보편성: 대부분의 Node.js 개발자가 기본적으로 Express를 학습합니다.

대안들의 도전

  • NestJS는 빠르게 성장하며 TypeScript 커뮤니티에서 널리 사용되고 있습니다. 이로 인해 프론트엔드와 백엔드의 통합 개발에서 유리한 위치를 차지합니다.
  • Fastify는 성능과 확장성 측면에서 경쟁력을 갖추며, 고성능 애플리케이션 개발자들의 선택을 받고 있습니다.
  • Koa는 Express와 비슷한 철학을 유지하면서도 더 깔끔한 코드 작성을 가능하게 하여 일부 커뮤니티에서 꾸준한 인기를 얻고 있습니다.

왜 대안들이 더 많이 사용되지 않을까?

  1. 마이그레이션 비용: 기존 Express 애플리케이션을 다른 프레임워크로 전환하려면 개발 시간과 리소스가 많이 소모됩니다.
  2. 커뮤니티와 생태계의 크기: Express의 커뮤니티와 플러그인 생태계는 아직도 다른 프레임워크를 압도합니다.
  3. 교육과 문서화: Express는 방대한 학습 자료와 간단한 문서를 제공하여 초보자에게 적합합니다.

결론 #

Express는 여전히 Node.js 생태계에서 중요한 위치를 차지하고 있지만, 그 한계는 점점 더 명확해지고 있습니다. 현대적인 요구 사항에 더 잘 부합하는 Koa, NestJS, Fastify와 같은 대안 프레임워크들이 빠르게 부상하고 있습니다.

개발자는 프로젝트의 요구 사항에 따라 적절한 프레임워크를 선택해야 합니다. 작은 프로젝트에서는 Express가 여전히 유용할 수 있지만, 대규모 애플리케이션에서는 NestJS나 Fastify 같은 대안들이 더 나은 선택일 수 있습니다. Node.js 생태계의 발전 속도와 커뮤니티의 요구에 따라 미래에는 또 다른 대안이 나타날 가능성도 높습니다.

Did you find this post helpful?
Share it with others!