앞서 컨트롤러가 요청과 응답을 가공하고 처리한다고 배웠다. 하지만, 서버가 제공하는 핵심기능은 전달받은 데이터를 어떻게 비즈니스 로직으로 해결하는가? 이다.
즉, 앱이 제공하고자 하는 핵심 기능, 즉 비즈니스 로직을 수행하는 역할을 하는 것이 프로바이더이고, 컨트롤러가 이를 수행할 수도 있지만, 역할을 분리해 두는 것이 단일 책임 원칙(SRP)에 더 부합하다.
프로바이더는 아래에 정리한 여러가지 형태로 구현이 가능하다.
Nest는 일반적으로 종속 주입으로 알려진 강력한 디자인 패턴을 중심으로 구축되었다.
Nest.js에서 제공하는 Provider의 주요 아이디어는 **의존성 주입(Dependency Injection, DI)**이다.
컨트롤러를 먼저 살펴보면, 비즈니스 로직을 직접 수행하지 않는 것을 볼 수 있다.
@@filename(boards.controller)
@Controller('boards')
export class BoardsController {
constructor(**private boardsService: BoardsService**) {}
@Get('/:id')
getBoardById(@Param('id') id: number): Promise<Board> {
return this.boardsService.getBoardById(id);
}
}