그냥 블로그

NestJS vs expressJS 본문

Back-End/Node.js

NestJS vs expressJS

코딩하는 공대생 2024. 3. 11. 17:41
반응형

 
Express와 nest는 JavaScript로 Backend 서버를 만들 때 가장 많이 활용되는 프레임 워크이다. >> Node.js 기반 프레임워크. 
이번 글에서는 둘의 차이를 알아보고 어떤 프레임워크를 활용할 지 정해보고자 정리하게 되었다!
내가 React를 고르게 된 이유 중 가장 큰 이유가 "현업에서 많이 사용" 되고 있고 "커뮤니티"가 크기 때문이었다. 확실히 초보 개발자가 진행하기엔 써칭이 잘 되는 편이 좋으니까 ㅇㅇ.. 
React가 Vue에 비해 복잡하긴 해도, 이미 많은 개발자들이 자신의 지식을 인터넷에 공유해준 덕에 나는 그 사람들의 지식을 빌릴 수 있다... 
 
근데 오히려 개발을 하면서 느낀 점은, 많이 사용된다고 따라가기만 하는 개발자가 되는 것은 안된다는 것이다. 그래서 이제는 기술을 사용하기 전에 여러 기술을 비교해보고, 나만의 이유를 만들어 보기로 했다! 
물론 아직은 초보기 때문에 커뮤니티가 큰 것도 좋은 것 같긴 하다 ㅎㅎ..! 그래도 렙업해야지
 
 

https://www.statista.com/statistics/1124699/worldwide-developer-survey-most-used-frameworks-web/

 
위 표는 2023 웹 개발자들에게 어떤 프레임워크를 사용하고 있냐 라고 물었을 때 선호도 순위이다. 2021년엔 Express가 Nest.js보다 높았다. 라는 그래프를 보고 2023년도 찾아봤는데 여전히 둘 사이의 선호도는 차이가 있다. ( 물론, 그 사이에 전부 Nodejs 기반 서버 Framework가 아니지만.. 그렇게 따지면 NestJS는 2위다. )
 

위 표는 Nest.js wikidocs에 나와있는 차이이다. 보면서 느낀 것은 React와 Vue와도 비슷하다는 것이다. 개인적으로 Vue는 러닝커브가 작고, 정형화된 템플릿이 있는데다 -v같은 것들을 사용하니 굉장히 사용하기 쉬웠다. 하지만 React가 현업에서 많이 사용되기 때문에 React를 하고 있지만.. 
쉬운 러닝 커브, 정형화된 템플릿... 잘 짜여진 프레임 워크임에도 현업에서 많이 사용되던 기존의 프레임워크를 이길 수 없는 것일까....(어째서 블로그 포스팅에 이런 사설을 달게 되는 걸까...)
 
한 현업자의 블로그를 보면 NestJS를 강력 추천하는 모습... 이 블로그에서 정리한 Express의 NestJS 대비 단점은 
1) Express는 라이프 사이클을 관여하는 것들을 모두 middleware라고 뭉뚱그려 부른 다는 것... 
    + 개발자가 미들웨어의 순서를 직접 조정해줘야 한다. 
2) TypeScript 미지원 >> express는 typescript 사용을 위해 세팅을 따로 해 줘야하는데, 이 과정인 것 같다.(2023년에도 여전히 세팅 글이 올라오는 걸 보면 여전한듯)
3) async/await의 미지원 >> nest.js에서는 Promise 반환 객체에 async, await를 해주지 않아도 된다는 뜻이다. !??
4) Nest.js의 swagger 문서 자동, class-validator 등등... 의 많은 지원을 일일이 세팅해야한다.
 
라는 것이다. 
 
 

💡 간편 용어 알아보기

IoC ( Inversion of Control ) : 제어의 역전 

- 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아닌 외부에서 결정된다는 것 ( 프레임워크와 라이브러리 )
- 백엔드 예시로 Java 프로그램과 Servelet의 차이 라고도 한다. 
- 대부분의 프레임워크에서 사용하는 방법으로, 개발자는 프레임 워크에 필요한 부품을 개발하고 조립하는 것. 

DI ( Dependency Injection ) : 의존성 주입 (디자인 패턴?)
" 클래스는 더 이상 객체 생성에 대한 책임이 없으며, 추상 팩토리디자인 패턴에서처럼 팩토리 객체로 생성을 위임할 필요가 없다"
-
제어의 역행이 일어날 때 스프링이 내부에 있는 객체들간의 관게를 관리할 때 사용하는 기법
- ex) JAVA에서는 일반적으로 인터페이스를 이용해 의존적인 객체의 관계를 최대한 유연하게 처리할 수 있도록 한다.
- 의존적 객체를 직접 생성, 제어하는 것이 아니라 특정 객체에 필요한 객체를 외부에서 결정해서 연결 시키는 것. >> 클래스 기능을 추상적으로 묶어둔 인터페이스를 갖다 쓰면 된다는 것. << 나머지는 스프링에서 객체를 주입?
=> 모듈 간의 결합도가 낮아지고 유연성 업
** 의존성 문제는 객체 지향 설계원칙 이었던 것 같다. (
SOLID)
 
CQRS ( Command and Query Responsibility Segregation ) : 데이터 저장소로부터의 일긱와 업데이트 분리 패턴
 

 


ExpressJS?

공식문서

Node.js를 위한 빠르고 개방적인 간결한 웹 프레임워크


  • 라우팅, 세션, HTTP 요청, 에러 핸들링같은 다양한 백엔드 기능을 제공
  • 모바일 앱을 포함한 싱글 페이지, 멀티 페이지와 하이브리드 웹 어플리케이션같은 API 웹 어플리케이션들을 쉽게 제작 가능
  • HTTP 요청에 대한 다양한 미들웨어 제공
  • HTTP 메서드와 URL을 사용해 ExpressJS만의 고유한 라우팅 기법 제공
  • MongoDB, Redis, MySQL 등과 같은 데이터베이스에 쉽게 연결 가능

장점

  • 코딩 시간 단축
  • 자바스크립트 기반으로 인한 낮은 진입 장벽
  • 쉬운 설정
  • 다른 엔진들과의 연동이 쉽다
  • 프론트 백 간 소통 용이
  • 강력한 커뮤니티 ( 오래 됨 )

단점

  • 에러 메시지 분별력 떨어짐
  • 콜백 이슈
  • 코드 구성이 간혹 어려울 수 있다. 
  • 규모가 큰 프로젝트에 적합하지 않다. 

NestJS

 

효율적이고 신뢰적이며 확장 가능한 서버 사이드 어플리케이션을 만드는 진보적인 NodeJS 프레임워크

 

  • OOP(객체 지향 프로그래밍), FP(함수형 프로그래밍), 그리고 FRP(반응형 함수 프로그래밍?)를 모두 결합한다.
  • 다양한 데이터베이스 지원
  • Express를 기본으로 사용하며 Fastify와 같은 HTTP 프레임워크를 설정해 사용할 수 있을 정도로 에그노스틱한 플랫폼
  • 더 적은 코드양으로 어플리케이션을 만들 수 있도록 많은 라이브러리, API 그리고 기능 제공
  • 코드의 가독성 및 유지 보수를 위해 Dependency Injection(DI)이 내장됨 =>  DI는 객체들의 의존관계를 정립하고 주입하는 것이다. 

장점

  • JS의 상위호환인 TypeScript를 주로 활용
  • 체계적이고 자세한 문서화
  • 쉽고 빠른 습득
  • 강력한 CLI (Command Line Interface)
  • 오픈 소스 
  • 편리한 유닛 테스트

단점

  • JS 기반이지만 TS 지식 필수
  • 유저 베이스의 결핍
  • ExpressJS보다 작은 커뮤니티

 


https://velog.io/@mathe1303/Node.js-ExpressJS-VS-NestJS

 

https://goldenrabbit.co.kr/2023/06/05/nestjs/

솔직히 보기에는 NestJS가 좋아 보임... ExpressJS를 사용할 이유라고는 "강력한 커뮤니티" "현업에서 많이 사용"
이 두가지 정도 인 것 같다. React를 사용하는 이유도 그런 이유였는데... 
 
난 고르자면 NestJS를 사용하게 될 것 같다. TS도 알고 있으니. 
 
 


 
 
 
 
 
 
https://wikidocs.net/148195

1.2 Express가 좋을까 NestJS가 좋을까?

Node.js기반 웹 프레임워크 중 어떤 것을 선택할 지 고민하고 계신 분을 위해 참고가 될 만한 자료를 소개합니다. Express는 이미 많은 회사들이 채택하여 운용되고 있는 …

wikidocs.net

https://velog.io/@kakasoo/Express%EB%A7%8C-%ED%95%98%EB%8B%A4%EA%B0%80-Nest%EB%A5%BC-%ED%95%98%EA%B3%A0-%EB%8A%90%EB%82%80-%EC%A0%90

Express만 하다가 Nest를 하고 느낀 점

Express에서는 다음과 같이 CRUD를 만든다. 사실 간편하고 빠르게 서버 어플리케이션을 확장할 수 있다는 게 장점이다. 하지만 Express는 구조적으로 짜임새가 있지는 않다. 그래서 결국에는 차세대

velog.io

https://velog.io/@mathe1303/Node.js-ExpressJS-VS-NestJS

[Node.js] ExpressJS VS NestJS

Node.js - ExpressJS vs NestJS

velog.io

 

'Back-End > Node.js' 카테고리의 다른 글

Node.js란?  (1) 2024.02.01