[ 백엔드 공부하기 : Nest.js ] NestJS란 무엇이고, 왜 사용하는 것일까?
∇ BackEnd_NestJS : NestJS란 무엇이고, 왜 사용할까?
목 차
1. NestJS란?
2. NestJS를 사용하는 이유
4. NestJS의 기본 구조.
5. NestJS 의 장점.
6. NestJS 의 단점.
Ⅰ. NestJS란?
JS와 사용되는 Node.JS는 높은 성능으로 빠른 개발이 가능하며, 동시에 많은 연결을 다루는데에 적합합니다.
하지만! Node.JS는 로직 구성이 너무 자유롭다는 단점을 지적받아왔습니다.
Node.js는 정해진 아키텍쳐 구조가 없기 때문에, 개발자마다 다른 구조로 코드를 작성하게 됩니다.
아키텍쳐가 잘 구조화된 프로젝트라 할지라도, 코드 작성자 이외의 사람들이 코드를 분석할 때는
아키텍쳐의 구조부터 파악해야 하기에 코드의 가독성이나 생산성이 좋지 않습니다.
[ (협업이나 유지보수에 어려움) + (커뮤니케이션 비용 발생) 등의 문제 ]
※ Express의 문제점 정리.
- 정해진 아키텍쳐 디자인 패턴이 없다.
-> 협업환경에서 서로의 코드를 쉽게 이해 가능해야 하는데,
개발자마다 작성 스타일이 다르다는 것은 매우 큰 단점으로 작용.
- 필요한 기능을 직접 구현해야 한다.
-> 데이터 유효성 검사 등의 기능들을 직접 구현해야 하며,
안정적 서비스를 위해서 테스트를 진행해야 합니다.
§ 이러한 점(아키텍쳐 문제)을 보완하기 위해 나온 것이 NestJS입니다.
√ NestJS는 Node.JS 환경에서 동작하는 프레임워크로, Node.JS를 기반으로 만들어졌습니다.
+√ Node.js의 Express 위에서 구축된 프레임워크로,
Express의 기능을 확장시켜서 보다 체계적이고 모듈화된 구조를 제공합니다.
[ == 효율적이고 확장 가능한 Node.js 서버 측 애플리케이션을 구축하기 위한 프레임워크 ]
*express의 단점이, 하나부터 열까지 개발자가 정하고 구현해야 한다는 점
++ HTTP 요청 및 응답을 처리하고, 미들웨어를 사용하여 요청, 응답 주기를 조작하는 역할도 수행.
** 아키텍쳐에 대한 정의를 제공하기 때문에,
동일한 아키텍쳐에서 다른 개발자가 작성한 코드를 쉽게 이해 가능합니다.
( 느슨한 결합과 유지보수성이 뛰어난 애플리케이션을 만들 수 있도록 아키텍쳐를 제공 )
+√ 구조는 Java Spring을 차용했습니다.
Ⅱ. NestJS를 사용하는 이유.
◎ TypeScript 사용.
' NestJS ' 는 ' TypeScript ' 언어 기반으로 작성되어 있기 때문에,
'TypeScript'의 ' 강력한 정적 타입 검사 ' , ' 객체지향프로그램 기능' 등의 기능을 제공 가능합니다.
== "개발 단계에서 버그를 사전에 방지하고, 코드 재사용성 및 유지 보수성을 높여줍니다 "
◎ Java Spring의 구조를 차용한 프레임워크이므로, "구조화된 아키텍쳐"
√ MVC디자인패턴 ( Controller, Service, Entity, Repository 등)을 기본 패턴으로 하므로,
역할과 구현(혹은 책임)이 명확하게 구분됩니다.
=>> 협업 시 매우 효율적 !
◎ 잘 정리되어있는 공식 문서.
◎ 라이브러리 및 편의 기능.
: NestJS는 필수적인 라이브러리 및 편의 기능을 기본으로 포함하고 있습니다.
[ HTTP, 웹소켓, 미들웨어, 가드, 예외 필터, 로깅 등 서버 동작에 필수적인 기능들을 사전에 포함 ]
<-> exprexx는 필요한 기능을 위해 라이브러리 추가 설치하거나 구현해야함.
◎ 별도의 cli를 제공.
npm i =g @nestjs/cli
nest new 프로젝트 이름
Ⅲ. NestJS의 기본 구조
※ Express로 개발한 대부분의 서버 애플리케이션의 구조는 다음과 같습니다.
○ App : Express 애플리케이션
○ Router: 라우터 경로 및 미들웨어 설정.
○ Controller: 라우터 경로에 따른 모든 비즈니스 로직 처리.
○ Model: 데이터베이스의 데이터 모델을 객체로 매핑한 모델 객체.
※ NestJS의 기본 구조는 App과 여러 개의 Module로 나눌 수 있으며, 다음과 같은 구조로 구성됩니다.
● Module : 특정 기능의 의존성 주입(DI)을 위한 모듈.
● Controller: 라우터 경로 및 미들웨어 설정
● Service: 모든 비즈니스 로직 처리
● Entity: 데이터베이스의 데이터 모델을 객체로 매핑한 엔티티
● Repository: 실제 데이터베이스 처리를 담당하는 부분.
● Pipe: Express의 미들웨어와 비슷한 개념.
Ⅳ. NestJS의 장점.
▽ TypeScript 지원 : NestJS는 TypeScript로 구축되었으므로 정적 타이핑 및 인터페이스와 같은 언어의 기능 활용 가능.
▽ 모듈성 : NestJS의 모듈식 아키텍쳐를 사용하면, 복잡한 애플리케이션을 더 쉽게 관리하고 코드 품질 유지 가능.
▽ 확장성 : NestJS의 아키텍쳐는 확장 가능하도록 설계되어 트래픽과 부하 증가를 쉽게 처리 가능
▽ 성능: 미들웨어 및 예외 처리와 같은 NestJS의 기본 제공 최적화 및 기능은
애플리케이션의 성능을 개선하는데 도움이 될 수 있습니다.
▽ 테스트: NestJS의 기본 제공 테스트 프레임워크를 사용하면,
애플리케이션에 대한 테스트를 더 쉽게 작성하고 실행할 수 있으므로
코드 품질을 개선하고 버그를 줄일 수 있습니다.
▽ 커뮤니티: 활발한 NestJS 커뮤니티가 존재.
Ⅳ. NestJS의 단점.
▽ Express에 비해서 정형화된 구조.
▽ Java Spring의 구조를 토대로 한 프레임워크이다보니, DI, IOS 등의 OOP 개념 습득 필요.
▽ TypeScript를 기본 언어로 제공하므로, 정적 타입(타이핑)에 대한 이해가 필요.
'Back_End > NestJS' 카테고리의 다른 글
[ 백엔드 공부하기 : Nest.js ] NestJS의 특징과 아키텍쳐 구조. (1) | 2024.12.12 |
---|---|
[ 백엔드 공부하기 : Nest.js ] NestJS를 본격적으로 공부하기 전에 (2) | 2024.12.12 |