Wecode -기업협업 인턴 (부트캠프)/기업협업 독학, 공부

NestJS 'Node.js 프레임워크'

JBS 12 2023. 10. 29. 23:55

아래 링크 그대로 스크랩

 

Node.JS의 새로운 파트너 NestJS는 왜 탄생했을까? - 골든래빗

제어할 수 없는 것에 의존하면 변화에 민감한, 흔들리기 쉬운 소프트웨어가 됩니다. 반대로 프로그래머는 설계를 하는 데 있어 외부에 의존하는 영역을 줄일수록 큰 변화에도 쉽게 흔들리지 않

goldenrabbit.co.kr

왜 NestJS가 출현했을까?

기존에는 Node.js와 익스프레스를 사용해 웹 서버를 구축하고 서비스를 만들었습니다. 익스프레스를 사용해서 서버를 구축할 때, 먼저 고민했던 부분이 무엇이었나요? 바로 디렉터리 구조입니다. 별거 아닌 것 같지만 구조에 따라서 아키텍처가 변경되므로 간단한 문제는 아닙니다. 익스프레스에서는 router > controller > service 디렉터리 구조로 만들어서 유저로부터의 요청이 전달되도록 했습니다. 문제는 익스프레스를 사용하는 모든 사람이 이런 아키텍처 문제를 고민해야 한다는 겁니다. 코드 작성자 이외의 사람이 코드를 읽을 때 불편함이 있습니다. NestJS는 이러한 문제를 해결한 웹 서버 프레임워크입니다. NestJS는 서버 개발 시의 아키텍처를 누구든 비슷하게 설계하도록 아키텍처 문제를 해결하는 데 중점을 두고 있습니다.

 패스티파이(https://www.fastify.io/)는
익스프레스와 하피Hapi에 영감을 받은 웹 프레임워 크입니다. 특징은 다음과 같습니다

• 고성능 : 초당 최대 3만 개의 요청을 처리할 수 있습니다.
• 확장성 : hooks, plugins, decorator를 사용해 확장할 수 있습니다.
• 스키마 기반 : JSON 스키마를 사용해 데이터의 유효성 검증을 할 수 있습니다.
• 로깅 : 로깅은 매우 중요하지만, 비용이 큽니다. 이에 오버헤드가 매우 적은 pino4를 로깅 라 이브러리로 사용합니다.
• 개발자 친화적 : 성능과 보안에 대한 타협을 하지 않으면서도 사용이 간편합니다.

1 Node.js에서 실행하는 서버 사이드 프레임워크입니다.

2 타입스크립트를 완벽하게 지원합니다.

3 자바스크립트의 최신 스펙을 사용합니다. 그러므로 바닐라 자바스크립트를 사용한다면 babel 사용이 필수입니다.

4 HTTP 요청 부분은 추상화된 코드를 제공해 익스프레스와 패스티파이(Fastify)를 사용할 수 있습니다.

 

2. 익스프레스와 NestJS 비교하기

익스프레스는 최소한의 기능을 제공하는 반면 NestJS는 상대적으로 조금 더 많은 기능을 제공합니다. NestJS의 목표 중의 하나가 자바스크립트로 만드는 웹 서버 프레임워크의 아키텍처 문제를 효과적으로 해결하는 겁니다. NestJS가 지금 주목받는 이유로 아키텍처 문제를 잘 해결하고 있기 때문으로 생각합니다.

서버 개발에 아키텍처는 왜 필요할까요? 바로 쉽게 테스트하고, 쉽게 확장이 가능하고, 각 모듈 간의 의존성은 줄이도록 해야 유지보수가 쉬운데 좋은 아키텍처는 이런 목표를 달성할 수 있게 해줍니다. 익스프레스 사용 경험이 있으시다면 서버를 만들 때 폴더 구조들을 어떻게 잡을지 고민을 했을 겁니다. NestJS에서는 컨트롤러를 어디에 둘지, 서비스를 어디에 둘지, 미들웨어를 어떤 식으로 작성할지 등 개발자의 고민거리를 미리 정리해두었습니다. 이를 데코레이터 기반으로 제공하고 있어서, 배우기가 쉽습니다.

\

NestJS는 익스프레스를 품고 있기 때문에 익스프레스 기반의 미들웨어를 거의 대부분 사용할 수 있습니다. 정확하게는 HTTP 요청과 응답에 익스프레스의 Request와 Response 객체를 기본으로 사용합니다. 성능이 중요하다면 패스티파이로 바꿔 쓸 수도 있습니다. 이는 아키텍처 구조를 유연하게 잘 만들었기 때문입니다.


아래 링크 그대로 스크랩

 

2.5 Typescript

> #### 💡 Nest는 타입스크립트를 기본 언어로 채택하고 있습니다. 자바스크립트로 설정을 바꿀 수도 있지만 타입스크립트의 장점을 누리기 위해 기본 설정으로 사용하시기를 추천…

wikidocs.net

NestJS는 Node.js에 기반을 둔 웹 API 프레임워크로써 Express 또는 Fastify 프레임워크를 래핑하여 동작합니다. 기본으로 설치하면 Express를 사용합니다. Node.js는 손쉽게 사용할 수 있고 뛰어난 확장성을 가지고 있지만, 과도한 유연함으로 인해 SW의 품질이 일정하지 않고 알맞은 라이브러리를 찾기 위해 사용자가 많은 시간을 할애해야 합니다. 이에 반해 NestJS는 데이터베이스, ORM, 설정(Configuration), 유효성 검사 등 수많은 기능을 기본 제공하고 있습니다. 그러면서도 필요한 라이브러리를 쉽게 설치하여 기능을 확장할 수 있는 Node.js 장점은 그대로 가지고 있습니다. NestJS는 Angular로부터 영향을 많이 받았습니다. 모듈/컴포넌트 기반으로 프로그램을 작성함으로써 재사용성을 높여줍니다. IoC(Inversion of Control, 제어역전), DI(Dependency Injection, 의존성 주입), AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)와 같은 객체지향 개념을 도입하였습니다. 프로그래밍 언어는 타입스크립트를 기본으로 채택하고 있어 타입스크립트가 가진 타입시스템의 장점을 누릴 수 있습니다.

NestJS는 국내에서도 점점 인기를 얻고 있고 모두싸인과 당근마켓 등 여러 회사에서 적용되어 사용자가 늘고 있습니다. 이 책을 통해 NestJS의 핵심 기능과 원리를 쉽게 배우고 더 나은 웹 개발 환경을 구축할 수 있는 방법을 소개하고자 합니다. 백엔드 개발을 처음 접하는 사람도 쉽게 따라하면서 백엔드에 필요한 기술들을 습득할 수 있도록 하였습니다.

 

 

 

Nest에는 Terminus라고 부르는 헬스 체크 라이브러리를 제공합니다. Terminus가 끝단, 종점이라는 뜻을 가지고 있는데 서비스 마지막 부분까지 정상 동작하는 지 확인한다는 의미를 지니고 있는 듯 합니다. Terminus는 다양한 건강상태 표시기(health indicator, 줄여서 "상태 표시기"라고 하겠습니다)를 제공하고 있고 필요하다면 직접 만들어서 사용할 수도 있습니다. @nestjs/common 패키지에서 제공하고 있는 상태 표시기는 다음과 같습니다.

  • HttpHealthIndicator
  • TypeOrmHealthIndicator
  • MongooseHealthIndicator
  • SequelizeHealthIndicator
  • MicroserviceHealthIndicator
  • GRPCHealthIndicator
  • MemoryHealthIndicator
  • DiskHealthIndicator