[NestJS] nest.js mvc 아키텍쳐 Controller, Module, Service,Midddleware 정리
NestJS는 Angular에서 영감을 받아 만들어진 프레임워크로, Angular와 비슷한 구조와 아키텍처를 가지고 있습니다.
주로 사용되는 아키텍처는 "모듈 (Modules)", "컨트롤러 (Controllers)", "서비스 (Services)", 그리고 "미들웨어 (Middleware)"로 구성된 "MVC(Model-View-Controller)" 아키텍처입니다.
모듈 (Modules): 애플리케이션을 기능별 또는 도메인별로 나누어 모듈화합니다. 각 모듈은 관련된 컨트롤러, 서비스, 그리고 다른 관련 파일들을 함께 묶습니다.
- Nest.js 애플리케이션을 여러 부분으로 나누는 데 사용됩니다.
- 주로 관련된 컨트롤러, 서비스, 및 기타 관련된 모듈을 그룹화하는 데 사용됩니다.
- 모듈은 @Module() 데코레이터를 사용하여 정의되며, 해당 모듈에 속하는 구성 요소들을 선언합니다.
컨트롤러 (Controllers): HTTP 요청을 처리하고 응답을 반환하는 역할을 합니다. 컨트롤러는 특정 엔드포인트에 매핑되어 있고, 각 엔드포인트에서 실행될 메서드를 가지고 있습니다.
- HTTP 요청을 받아들이고 해당 요청에 대한 응답을 생성하는 데 사용됩니다.
- 주로 특정 엔드포인트에 대한 로직을 처리하는 역할을 합니다.
- 컨트롤러는 @Controller() 데코레이터를 사용하여 정의되며, 해당 컨트롤러가 어떤 엔드포인트들을 다룰지 지정합니다.
서비스 (Services): 비즈니스 로직이나 데이터 처리와 같은 작업을 수행하는 곳입니다. 서비스는 컨트롤러에서 호출되어 특정 기능을 수행하고 결과를 반환합니다.
- 애플리케이션의 비즈니스 로직을 담당합니다.
- 컨트롤러에서 요청된 작업을 수행하고 데이터를 가공하며, 데이터베이스와 상호 작용할 수 있습니다.
- 서비스는 @Injectable() 데코레이터를 사용하여 정의되며, 해당 서비스를 사용하는 컨트롤러나 다른 서비스에 주입됩니다.
미들웨어 (Middleware): 요청과 응답 사이에서 동작하는 함수로, 주로 요청 전처리나 후처리 작업을 수행합니다. NestJS에서는 Express 미들웨어와 비슷한 개념을 가지고 있습니다.
- HTTP 요청과 응답 사이에 위치하며, 요청이 처리되기 전이나 후에 특정 작업을 수행합니다.
- 주로 요청의 가공, 권한 확인, 로깅 등과 같은 작업을 수행하는 데 사용됩니다.
- 미들웨어는 NestMiddleware 인터페이스를 구현하여 정의되며, 모듈에서 use() 메서드를 사용하여 등록됩니다.
이러한 구조는 각각의 역할을 분리함으로써 코드를 보다 모듈화하고 유지보수하기 쉽게 만듭니다. 또한 의존성 주입(Dependency Injection)이나 프로바이더 등을 활용하여 코드의 테스트 용이성을 높이는데 기여합니다.
추가로, NestJS에서는 프레임워크 자체에서 제공하는 다양한 기능들을 활용하여 데이터베이스 연동, 인증 및 권한 부여, 예외 처리 등을 편리하게 처리할 수 있도록 지원하고 있습니다.