[NestJs] Express와 NestJS차이

2024. 6. 26. 19:16NestJs

728x90
반응형

서론

NestJS는 TypeScript 기반의 프레임워크입니다. 하지만 우리는 NestJS를 사용하기 전에 Express와 어떤 차이가 있는지, 어떤 이유로 NestJS를 사용하는지 알아야 합니다. 이번 글에서는 그것을 알아보려고 합니다.

 

 

Express란?

Express는 웹 및 모바일 애플리케이션을 위한 일련의 강력한 기능을 제공하는 간결하고 유연한 웹 애플리케이션 프레임입니다. JavaScript에서는 Express가 압도적으로 많이 사용되고 있습니다. 많은 유저들이 Express를 사용하지만 장단점이 있습니다.

 

 

Express의 장점

경량 및 단순함 - 경량 프레임워크, 간단한 사용법
유연성 - 구조적 유연성, 미들웨어 시스
강력한 라우팅 - 유연한 라우팅, HTTP 메소드 지원
커뮤니티 및 생태계 - 활발한 커뮤니티, 풍부한 모듈과 미들웨어
성능 - 고성능
확장성 - 모듈화
사용 사례의 다양성 - 다양한 애플리케이션
빠른 개발 주기 - 신속한 프로토타이핑

 

 

Express의 단점

1.프로젝트 구조에 규격이 없습니다.

2. REST API를 개발할 수는 있지만 MVC 패턴이 대중적이지 못합니다.

3. 구조 부족으로 대규모 애플리케이션에서 코드베이스가 복잡해질 수 있습니다.

4. 많은 미들웨어를 사용하는 경우 관리가 어려울 수 있습니다.

5. 반복적인 설정과 구성 작업이 많이 필요할 수 있습니다.

6. 구조적인 가이드라인이 없어서 코드 유지보수와 테스트가 어려울 수 있습니다.

 

 

NestJS란?

Nest.js는 Node.js를 기반으로 한 서버 애플리케이션을 개발하기 위한 프레임워크입니다. 내부적으로 Express 프레임워크(기본 설정)와 Fastify 프레임워크를 선택해서 사용할 수 있습니다. 또한, Nest.js는 상기 프레임워크의 API를 직접적으로 사용할 수 있도록 제공합니다. Express 혹은 Fastify에 더욱 익숙한 개발자라면 서버 애플리케이션 개발에 있어 보다 큰 자유도를 가질 수 있을 것 같습니다.

무엇보다 기존 Express와는 달리 정형화된 아키텍처를 지니고 있다는 점에 차이가 있으며, 실제 사용해보니 스프링과 비슷한 구조였다는 점에 주목하면 좋을 것 같습니다.

 

 

NestJS의 장점

TypeScript 지원 - 정적 타이핑 및 인터페이스 활용 가능

모듈성 - 복잡한 애플리케이션 관리 및 코드 품질 유지 용이

확장성 - 트래픽과 부하 증가 처리 용이

성능 - 미들웨어, 예외 처리 등 기본 제공 최적화 및 기능

테스트 -  기본 제공 테스트 프레임워크로 테스트 작성 및 실행 용이

 

 

NestJS의 단점

복잡성 증가 - 초기 학습 곡선 높음, 구조적 복잡성

의존성 - TypeScript 의존성, 라이브러리 의존성으로 호환성 문제 발생 가능

추상화의 단점 -  추상화 과도 시 디버깅 및 내부 동작 이해 어려움

마이그레이션 문제 -  기존 Express 프로젝트 통합 어려움, 프레임워크 업데이트 영향

성능 오버헤드 - 추가 레이어로 인한 약간의 성능 오버헤드 발생 가능

커뮤니티 및 생태계 - 상대적으로 작은 커뮤니티, 지원 라이브러리 수 부족

 

 

다른 프레임워크 사용을 잘 안하는 이유

더보기

Koa

  • 적은 사용량의 이유:
    • Express의 인기에 밀려 상대적으로 덜 알려짐.
    • 미들웨어 시스템이 복잡하여 학습에 시간 필요.
  • 사용 사례:
    • 미들웨어의 흐름 제어가 중요한 프로젝트.
    • 간결하고 모듈화된 코드베이스가 필요한 경우.
    • 더 나은 에러 핸들링과 비동기 처리가 필요할 때.

Hapi

  • 적은 사용량의 이유:
    • 설정과 구성이 Express보다 복잡.
    • 높은 학습 곡선.
  • 사용 사례:
    • 보안과 성능이 중요한 엔터프라이즈 애플리케이션.
    • 구성 기반 접근 방식과 강력한 플러그인 시스템이 필요한 프로젝트.
    • RESTful API 서버 구축.

Fastify

  • 적은 사용량의 이유:
    • 상대적으로 신생 프레임워크로, 커뮤니티와 생태계가 아직 성장 중.
    • 익숙한 프레임워크에서 전환하는 데 시간 필요.
  • 사용 사례:
    • 성능과 확장성이 중요한 애플리케이션.
    • JSON Schema 기반의 요청 및 응답 검증 필요 시.
    • 효율적인 확장이 필요한 경우.

Sails

  • 적은 사용량의 이유:
    • 다소 무겁고 설정이 복잡.
    • 높은 학습 곡선과 강제되는 MVC 패턴.
  • 사용 사례:
    • 데이터 중심 애플리케이션 및 CRUD 인터페이스.
    • Ruby on Rails와 유사한 개발 경험을 원하는 프로젝트.
    • 자동으로 생성되는 RESTful API 필요 시.

 

면접에 나올수 있는 질문

더보기

1.NestJS와 Express의 가장 큰 차이점은 무엇이라고 생각하나요? NestJS를 선택해야 하는 이유는 무엇일까요?

답변 : 가장큰 차이점은 프로젝트의 규정과 효율성이라고 생각합니다 그리고 Nest.js를 선택해야하는 이유는 Express를 사용하게된다면 Node.js를 사용할수있다고 생각이 드는데 Node.js는 프로젝트에 규격이 없기 때문에 Nest.js 사용해야한다고 생각합니다.

 

2.NestJS의 모듈 구조에 대해 설명해주세요. 모듈 구조가 왜 중요한지도 말씀해주시기 바랍니다.

답변 :

모듈(Module): NestJS의 핵심 빌딩 블록으로, 관련된 컴포넌트들을 하나의 단위로 묶어줍니다. 예를 들어 사용자 관련 기능들을 UserModule에 담을 수 있습니다.

컨트롤러(Controller): HTTP 요청을 처리하고 응답을 반환하는 역할을 합니다.

서비스(Service): 비즈니스 로직을 담당하는 부분으로, 컨트롤러와 데이터 저장소(Repository) 사이의 중간자 역할을 합니다.

프로바이더(Provider): 서비스, 리포지토리, 유틸리티 등 애플리케이션 전체에서 공유되는 의존성 객체들을 나타냅니다.

이렇게 모듈, 컨트롤러, 서비스, 프로바이더로 구성된 NestJS의 구조는 관심사 분리 원칙에 따라 설계되었습니다. 각 부분의 역할이 명확히 구분되어 있어 대규모 애플리케이션 개발에 적합합니다. 또한 모듈 간 의존성 관리가 용이하고, 테스트와 유지보수가 편해집니다.

 

3.NestJS에서 의존성 주입(Dependency Injection)이 무엇인지 아시나요? 이 기능의 장점은 무엇일까요?

 답변:  객체 간의 의존 관계를 외부에서 주입해주는 디자인 패턴입니다. 객체 내부에서 의존성을 직접 생성하지 않고, 외부에서 주입받아 사용하는 것이죠. 이렇게 함으로써 객체 간의 결합도를 낮출 수 있고, 유연성과 테스트 용이성이 높아집니다.

 

4.NestJS에서 컨트롤러와 서비스의 역할은 무엇인가요? 두 가지를 분리하는 이유에 대해서도 설명해주세요.

답변 : 컨트롤은 클라이언트에 요청을 받는 역할이고 서비스는 클라이언트에서 요청을 받은 컨트롤 계층에 있는 데이터를 서비스계층으로 전달하여 데이터를 처리하는 역할을 합니다. 

 

5.NestJS에서 제공하는 기본 테스트 프레임워크에 대해 알고 계신가요? 단위 테스트와 통합 테스트의 차이점은 무엇일까요?

답변 : NestJS에서 제공하는 기본 테스트 프레임워크는 Jest입니다. Jest는 자바스크립트 테스팅 프레임워크로, 단위 테스트와 통합 테스트를 모두 작성할 수 있습니다. 단위 테스트는 함수나 메서드 단위로 테스트하는 것이고, 통합 테스트는 여러 모듈이 연계되어 작동하는지 종합적으로 테스트하는 것입니다.

728x90
반응형

'NestJs' 카테고리의 다른 글

[NestJs] NodeJs에선 nodemon이 있다면 NestJS에서는 Hot reload  (0) 2024.06.28
[NestJS] 모듈 구성 요소  (0) 2024.06.27
[Nest.js] config 에러  (0) 2024.05.06
[NestJs] module 에러  (0) 2024.04.30
NestJs 이메일 인증 기능구현  (0) 2024.04.20