앞서 컨트롤러가 요청과 응답을 가공하고 처리한다고 배웠다. 하지만, 서버가 제공하는 핵심기능은 전달받은 데이터를 어떻게 비즈니스 로직으로 해결하는가? 이다.

즉, 앱이 제공하고자 하는 핵심 기능, 즉 비즈니스 로직을 수행하는 역할을 하는 것이 프로바이더이고, 컨트롤러가 이를 수행할 수도 있지만, 역할을 분리해 두는 것이 단일 책임 원칙(SRP)에 더 부합하다.

프로바이더는 아래에 정리한 여러가지 형태로 구현이 가능하다.

Dependency Injection

Nest는 일반적으로 종속 주입으로 알려진 강력한 디자인 패턴을 중심으로 구축되었다.

Nest.js에서 제공하는 Provider의 주요 아이디어는 **의존성 주입(Dependency Injection, DI)**이다.

Services

컨트롤러를 먼저 살펴보면, 비즈니스 로직을 직접 수행하지 않는 것을 볼 수 있다.

@@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);
  }
}