NestJS의 아키텍처 구성 _ 모듈(Module), 컨트롤러(Controller), 서비스(Service), 프로바이더(Provider)
* nest: using nestcli
* g: generate
* --no-spec: 테스트를 위한 소스 코드 생성하지 않음
모듈(Module)
모듈(Module) 생성하기
$ nest g module 'moduleName' --no-spec // generage를 g로 줄일 수 있다.
$ nest g mo 'moduleName' // module을 mo로 줄일 수 있다.
* generage를 g로 줄일 수 있다. module을 mo로 줄일 수 있다.
NestJS 모듈: App Module안에 AuthModule과 같은 필요한 모듈들이 있으며 각 모듈안에 Controller, Entity, Service 등이 있다.
모듈은 @Module() 데코레이터로 주석이 달린 클래스이다.
@Module() 데코레이터는 Nest가 애플리케이션 구조를 구성하는데 사용하는 메타데이터를 제공한다.
각 응용프로그램에는 하나이상의 모듈(루트 모듈)이 있다. 루트 모듈은 Nest가 사용하는 시작점이다.
모듈은 밀접하게 관련된 기능 집합으로 구성 요소를 구성하는 효과적은 방법이다.
-> 기능별로 만든다_ ex) 유저 모듈, 주문 모듈, 챗 모듈
같은 기능에 해당하는 것들은 하나의 모듈 폴더안에 넣어서 사용한다.
-> (UserController, UserService, UserEntity 다 같은 기능이기에 UserModule안에 넣는다.)
모듈은 기본적으로 싱글톤이므로 여러 모듈간에 쉽게 공급자의 동일한 인스턴스를 공유할 수 있다.
컨트롤러(Controller)
Controller 생성하기
$ nest g controller 'controllerName' --no-spec
$ nest g co 'controllerName'
* generage를 g로 줄일 수 있다. controller를 co로 줄일 수 있다.
컨트롤러는 들어오는 요청을 처리하고 클라이언트에 응답을 반환한다.
컨트롤러는 @Controller 데코레이터로 클래스를 데코레이션하여 정의된다.
데코레이터는 인자를 Controller에 의해서 처리되는 "경로"로 받는다.
서비스(Service)
Service 생성하기
nest g service 'serviceName' --no-spec
nest g s 'serviceName'
* generage를 g로 줄일 수 있다. service를 s로 줄일 수 있다.
CLI를 이용해서 Service를 생성하면 이렇게 'serviceName'.service.ts파일이 생성된다.
이 생성된 파일 안에는 Injectable 데코레이터가 있으며 이 NestJs는 이것을 이용해서 다른 컴포넌트에서 이 서비스를 사용할 수 있게(Injectable) 만들어준다. 그리고 CLI로 Service 생성시에는 module에도 자동으로 Service가 추가된다.
개념: 서비스는 소프트웨어 개발내의 공통 개념이며, NestJS, Javascript에서만 쓰이는 개념이다.
@Injectable 데코레이터로 감싸져서 모듈에 제공되며, 이 서비스 인스턴스는 애플리케이션 전체에서 사용한다.
서비스는 컨트롤러에서 데이터의 유효성 체크를 하거나 데이터베이스에 아이템을 생성하는 등의 작업을 하는 부분을 처리한다.
+ 추가개념
Handler란?
핸들러(handler)는 @Get, @Post, @Delete 등과 같은 데코레이터로 장식된 컨트롤러 클래스 내의 단순한 메서드이다.
프로바이더(Provider)
프로바이더는 Nest의 기본 개념이다.
대부분의 기본 Nest 클래스는 서비스들(services), 리포지토리들(repositories), 팩토리들(factories), 헬퍼들(helpers)등 프로바이더로 취급될 수 있다.
프로바이더의 주요 아이디어는 종속성으로 주입할 수 있다는 것이다.
즉, 객체는 서로 다양한 관계를 만들 수 있으며 객체의 인스턴스를 "연결"하는 기능은 대부분 Nest 런타임 시스템에 위임될 수 있다.
Provider 등록하기: Provider를 사용하기 위해서는 이것을 Nest에 등록해줘야지 사용할 수가 있다. 등록하기 위해서는 module 파일에서 할 수 있다. module 파일에 providers항목안에 해당 모듈에서 사용하고자 하는 Provider를 넣어주시면 된다.
Provider의 종류: Service, Helper, Factory, Repository 등
-> 실제 코드에서 Module, Service, Controller를 주로 쓰지만 NestJS는 코드를 거시적인 관점에서 Provider, Controller, Module로 분리하며 이런 작은 컴포넌트들끼리의 조합(DI)을 통해 전체 애플리케이션을 완성시킨다.
'개발 프레임워크 > NestJS' 카테고리의 다른 글
[NestJS] Swagger(스웨거)란? (0) | 2023.02.06 |
---|---|
[NestJS] Typescript(타입스크립트) (0) | 2023.02.05 |
[NestJS] NestJS 실행 및 테스트 명령어 (0) | 2023.02.05 |
[NestJS] NestJS 설치 시 있는 파일? (0) | 2023.02.05 |
[NestJS] NestJS 사용 이유(Why NestJS)? (0) | 2023.02.05 |
댓글