Nestjs를 배워보자 3일차 - Service와 Provider (John ahn님 강의)

0

Nestjs

목록 보기
3/9
post-custom-banner

Nestjs

1. Provider , Service 란?

프로바이더는 Nest의 기본 개념이다. 대부분의 기본 Nest 클래스는 서비스, 리포지토리, 팩토리, 헬퍼 등 프로바이더로 취급될 수 있다. 프로바이더의 주요 아이디어는 종속성으로 주입될 수 있다는 것이다. 즉, 객체는 서로 다양한 관계를 만들 수 있으며 객체의 인스턴스를 연결하는 기능 대부분은 Nest 런타임 시스템에 위임될 수 있다.

[이미지1]

위와 같이 컨트롤러가 필요로 하는 컴포넌트들이 기능 별로 존재할 때, 컨트롤러가 해당 컴포넌트를 필요할 때 주입시켜주는 것을 주입이라고 한다.

여기서 각 요소들은 프로바이더가 되는 것이다.

우리는 이전에 service를 controller에 주입시켰다. 즉, service는 큰 의미로 provider인 것이다.

service란?

서비스는 sw 개발내의 공통 개념이다. 즉 Nest, js에서만 사용되는 개념이 아니다.

데이터의 유효성을 체크하거나 데이터베이스 아이템을 생성하는 등의 작업을 처리한다.

@Injectable 데코레이터로 감싸져서 모듈에 제공되며, 이 서비스 인스턴스는 어플리케이션 전체서 사용될 수 있다.

즉, A 컨트롤러에서 해당 서비스를 사용한다해서 B 컨트롤러에서 사용 못하는 것이 아니라, B도 해당 서비스를 사용할 수 있고, 다른 컨트롤러 모두 사용할 수 있다.

프로바이더를 Controller에서 사용할 수 있는 방법

프로바이더는 종속성으로 주입되어야 한다.

서비스는 프로바이더이기 때문에 종속서으로 주입되어야 하고, 우리는 이전에 DI(의존성)으로 서비스를 주입했던 것이다.

@Controller('boards')
export class BoardsController {

    constructor(private boardService : BoardsService){}
}

바로 이렇게 말이다.

그런데, 여기서 끝나는 것이 아니다.

provider를 의존성으로 Nest 프레임워크가 다루기 위해서는 Nest가 해당 의존성을 다룰 수 있도록 등록해주어야 한다.

즉, 우리가 만든 서비스를 Nestjs 프레임워크가 다룰 수 있도록 프레임워크에 알려주어야 한다는 것이다.

그래서 우리는 app.module.ts로 가보도록 하자

import { Module } from '@nestjs/common';
import { BoardsModule } from './boards/boards.module';
import { BoardsService } from './boards/boards.service';
@Module({
  imports: [BoardsModule],
  providers: [BoardsService]
})
export class AppModule {}

다음과 같이 코드를 변경해주면 된다.

@Module 데코레이터에 provider로 우리가 만든 서비스가 추가된 것을 확인할 수 있다.

이로써 이게 Nestjs는 해당 서비스를 다룰 수 있게되고, 컨트롤러가 필요로 할 때 주입할 수 있게 되는 것이다.

post-custom-banner

0개의 댓글