NestJS란
- Node.js 서버 측 애플리케이션을 구축하기 위한 프레임워크
핵심 아키텍쳐
- 의존성 주입 (Dependency Injection): 클래스가 필요한 의존성(객체)을 외부에서 주입받는 디자인 패턴. 이를 통해 구성 요소 간의 결합도를 낮추고 테스트 용이성을 높임.
- 모듈성 (Modularity): 애플리케이션의 코드를 관련된 기능 집합인 모듈 단위로 구성. 각 모듈은 특정 기능에 관련된 구성 요소들을 캡슐화함.
- 데코레이터 (Decorators): 클래스, 메서드, 프로퍼티에 메타데이터를 추가하는 TypeScript 기능. NestJS는 데코레이터를 사용하여 라우팅, 의존성 주입 등 프레임워크의 핵심 기능을 정의함.
구성 요소
- 컨트롤러 (Controllers): 특정 경로(Endpoint)로 들어오는 클라이언트의 요청을 받고 응답을 반환하는 역할.
- 프로바이더 (Providers): 서비스(Services), 리포지토리(Repositories) 등을 포함하는 개념. 주로 비즈니스 로직을 처리하고, 컨트롤러나 다른 프로바이더에 주입될 수 있는 클래스를 의미함. @Injectable() 데코레이터로 정의됨.
- 모듈 (Modules): 애플리케이션의 구조를 조직하는 기본 단위. @Module() 데코레이터로 정의되고, 관련된 컨트롤러와 프로바이더의 집합을 캡슐화하여 관리함.
- 파이프 (Pipes): 클라이언트 요청의 데이터를 유효성 검사(validation)하거나 필요한 형태로 변환(transformation)하는 역할.
- 가드 (Guards): 특정 경로에 대한 요청을 허가할지 여부를 결정하는 인증 및 인가 로직을 처리.
- 인터셉터 (Interceptors): 메서드 실행 전후에 추가적인 로직을 바인딩하는 기능을 제공함. 주로 로깅, 캐싱, 응답 데이터 변환 등에 사용.