프로젝트

Express vs NEST

늘곰's 2023. 10. 5. 10:47

Express.js:

장점:

  • 간단하고 가벼움: Express는 미니멀한 디자인을 가지고 있으며, 개발자가 필요한 미들웨어를 직접 추가하거나 구성할 수 있어 프로젝트의 크기와 요구사항에 따라 유연하게 확장할 수 있습니다.
  • 커뮤니티와 생태계: Express는 매우 큰 개발자 커뮤니티와 다양한 서드파티 미들웨어와 플러그인을 제공하는 확장 가능한 생태계를 가지고 있습니다.
  • 빠른 학습 곡선: Express는 간단하고 직관적인 API를 가지고 있어, Node.js를 처음 접하는 개발자도 비교적 쉽게 배울 수 있습니다.

단점:

  • 구조의 부재: Express는 기본적인 구조나 디렉토리 구조를 제공하지 않기 때문에 큰 프로젝트를 관리하기 어려울 수 있습니다.
  • 보안: Express는 보안 기능을 기본적으로 제공하지 않으며, 개발자가 직접 보안 관련 사항을 다루어야 합니다.

 

Nest.js:

장점:

  • 모듈화 및 구조화: Nest.js는 모듈화된 구조를 가지고 있어 큰 프로젝트를 쉽게 구성하고 유지보수할 수 있습니다. 또한, 의존성 주입(Dependency Injection)을 사용하여 코드를 더 구조적으로 만들 수 있습니다.
  • 타입스크립트 지원: Nest.js는 기본적으로 타입스크립트를 지원하므로 코드의 안정성과 가독성을 향상시킬 수 있습니다.
  • 강력한 미들웨어: Nest.js는 미들웨어를 다루는데 강력한 도구와 패턴을 제공하며, 보안 및 로깅과 같은 공통된 작업을 쉽게 처리할 수 있습니다.

단점:

  • 학습 곡선: Express에 비해 Nest.js는 더 복잡한 구조와 개념을 가지고 있어 학습 곡선이 높을 수 있습니다. 특히 처음 접하는 개발자들에게는 익숙해지기에 시간이 걸릴 수 있습니다.
  • 커뮤니티와 생태계: Express에 비해 상대적으로 작은 커뮤니티와 생태계를 가지고 있어서, 특정 문제에 대한 해결책을 찾기가 어려울 수 있습니다.

 

두 프레임 워크의 차이점

구조 : Express는 구조가 자유롭고 프로젝트 구조를 개발자가 직접 정의해야 합니다. 반면에 Nest.js는 모듈화된 구조와 컨벤션을 제공하여 프로젝트 구조를 표준화하고 관리하기 쉽게 만듭니다.

(모듈화 된 구조 때문에 너무 자유로운 express 보다 협업에 유리하고 컴플릿이 더 적게 생김)

 

타입스크립트: Nest.js는 타입스크립트를 공식적으로 지원하므로 타입 안정성을 제공하고 개발자가 더 명확한 코드를 작성할 수 있습니다

 

미들웨어: Nest.js는 미들웨어를 효율적으로 다루기 위한 도구와 기능을 제공하며, Express보다 미들웨어 관리가 쉽습니다.

1. nest 는 Guard 를 제공하는데 Guard  는 인증과 권한 검사에 특화된 기능을 제공한다. 
이러한 기능을 express에선 직접 작성 해야 한다.

2.nest 는  Interceptor 기능을 제공하는데 이를통해 비동기작업을 수행 할 수있다 (nest는 callback promise를 사용해야함)

2-1. 요청과 응답을 로깅하거나 성능 지표를 수집하는데 활용할 수 있다. 

2-2 . 다중 interceptor 를 조합하여 각각의 interceptor 가 특정 역할을 수행하게하여 로직을 모듈화하고 재사용 할 수있다.

 

보안: Nest.js는 몇 가지 기본적인 보안 기능을 내장하고 있어, 보안 측면에서 더 안전한 애플리케이션을 만들기 쉽습니다.

express는 보완관련 작업을 개발자가 직접 처리해야 하므로 실수로 보안취약점이 생길 수 있다.

nestCSRF(Cross-Site Request Forgery) 및 XSS(Cross-Site Scripting) 공격 방지를 위한 기능을 제공한다.

CSRFCSRF는 인증된 사용자가 악의적인 웹사이트에서 실행되는 요청을 통해 비인가된 동작을 수행하는 공격

express 도  csurf 같은 미들웨어를 사용하여  CSRF 토큰 을 생성해 이러한 공격을 방지할 수 있지만

@nestjs/csrf 모듈: Nest.js 커뮤니티에서는 @nestjs/csrf와 같은 서드파티 모듈을 사용하여 CSRF 방어를 더욱 쉽게 구현할 수 있습니다.

 

 


Express 보다 NEST를 써야 하는 이유?

 

결론적으로 여러사람이 협업을 할때 모듈화 된 구조를 기본적으로 제공하는 nest 를 사용하는 것이 나중에 
실수를 줄이고 에러를 해결 할 수있음

처음에 express보다 복잡한 구조를 가지고 있지만 나중에 유지보수를 생각하거나 프로젝트가 확장이 된다면
오히려 시간을 단축 할 수도 있음

또한 express보다 특화된 미들웨어들을 제공하며 express보다 좀더 직관적이게 코드를 이해하는데 도움이 됨