[Nest.js] 3. Providers, Service

sookyung kang·2023년 3월 13일

Nest.js

목록 보기
3/8
post-thumbnail

참고강의

Providers 란?

대부분 기본 Nest class는 서비스, 레포지터리, 팩토리, 핼퍼 등 Provider 로 취급될수 있습니다.
Provider 는 종속성을 주입할 수 있습니다. (서로 다양한 관계를 만들고 객체의 인스터스를 연결하는 기능)

Service 란?

컨트롤러에서 데이터 유효성을 체크하거나 DB에 아이템을 생성하는 등의 작업을 합니다.
@Injectable 데코레이터로 감싸져서 모듈에 제공되며, 어플리케이션 전체에서 사용 가능합니다.

유저 -> Request -> controller -> Service -> Controller -> Response -> 유저

그러나, Service를 Controller에서 바로 사용할 수 있는 것은 아니고 종속성 주입 필요! -> Dependency Injection

Provider 등록하기

module 파일에서 provider를 등록해줘야 사용가능합니다.
module 파일 안에 providers 항목 안에 해당 모듈에서 사용하고자 하는 Provider을 넣으면 됩니다.

실습1

Setting

새로 프로젝트를 생성해 주고

$ nest new nestjs-board-app

module과 Controller, Service 도 생성해 줍니다.

$ nest g module boards
$ nest g controller boards --no-spec
$ nest g service --no-spec

그리고

몇 개의 파일을 삭제하여 위 파일 목록과 똑같이 만들어 줍니다.

자동으로 module에 Service가 추가된 모습을 확인합니다.

Board Service를 Board Controller에서 이용할 수 있도록 해주기 -> Dependency Injection


boards.controller.ts 에 위와 같이 코드를 입력하여 줍니다.

+참고

<출처 : inflearn 따라하며 배우는 nest.js 강의자료>

또한, 접근제한자를 이용하여 이 코드를 아래와 같이 간단하게 쓸 수 있습니다.

실습 2 - 모든게시물을 가져오는 Service 만들기

boards.service.ts 에서

@Injectable()
export class BoardsService {
    private boards = [];

    getAllBoards() {

        return this.boards;
    }
}

위와 같이 코드를 작성해 줍니다

boards.controller.ts 에서

@Controller('boards')
export class BoardsController {
    

   constructor(private boardsService: BoardsService){ }

    @Get()   
    getAllBoard(){

    return this.boardsService.getAllBoards();

    }
}

위와 같이 코드를 작성하여 줍니다.

터미널에

$ npm run start:dev

http://localhost:3000/boards
위 링크에 들어가면

정상적으로 나오는 것을 확인 할 수 있습니다.

정리

유저 -> Request -> controller -> Service -> Controller -> Response -> 유저

  1. 클라이언트에서 요청을 보내면 먼저 컨트롤러로 가며 컨트롤러에서 알맞은 요청 경로에 라우킹해서 해당 핸들러로 가게 해줍니다.
  2. 그 후 요청을 처리해주기위해 서비스로 들어가며 그 요청에 맞는 로직을 서비스에서 처리해준 후 컨트롤러에 리턴값을 보내줍니다.
  3. 리턴 값을 받은 컨트롤러는 클라이언트로 결과값을 보내줍니다.

0개의 댓글