NestJS 서비스

김동현·2021년 11월 26일

NestJS

목록 보기
6/11

Service란?

  • Service 안에서는 데이터베이스 관련된 로직을 처리한다.
  • 데이터베이스에서 데이터를 가져오거나 데이터베이스안에 게시판 생성할 때 그 생성한 게시판 정보를 넣어주는 등의 로직을 처리한다.

Service 생성

  • nest g service boards --no-spec

    • nest: using nest
    • g: generate
    • service: service schematic
    • boards: name of the schematic
    • --no-spec: 테스트를 위한 소스 코드 생성 X
  • CLI를 이용해서 Service를 생성하면 이렇게 Boards.service.ts파일이 생성된다.

  • 이 생성된 파일 안에는 injectable 데코레이터가 있으며 이 NestJS는 이것을 이용해서 다른 컴포넌트에서 이 서비스를 사용할 수 있게(Injectable)만들어준다.

  • 그리고 CLI로 Service 생성시에는 module에도 자동으로 Service가 추가된다.

  • Board Service를 Board Controller에서 이용할 수 있게 해주기(Dependency Injection)

    • Nest JS에서 Dependency Injection은 클래스의 Constructor안에서 이루어진다.
  • 위 소스 코드가 만들어진 순서

    • 위와 같은 코드는 Typescript의 도움을 받아서 가능하게 된다.
    • 자바스크립트에서는 private같은 접근 제한자(Access modifier)를 사용할 수 없지만 Typescript에서는 사용 가능하다.

    1. boardsService 파라미터에 BoardsService 객체를 타입으로 지정해준다.
    1. 이 boardsService 파라미터를 BoardsController 클래스 안에서 사용하기 위해서 this.boardsService 프로퍼티에 boardsService 파라미터를 할당해준다.
    1. 하지만 타입스크립트에서는 선언한 값만 객체의 프로퍼티로 사용 가능하기 때문에 위에 boardsService: BoardsService로 선언해준다.
    1. 이렇게 갖게된 boardsService 프로퍼티를 이용해서 BoardsController 클래스 안에서 활용을 할 수가 있다.

접근 제한자를 이용해서 소스 간단하게 하기

  • 접근 제한자(public, protected, private)을 생성자(constructor) 파라미터에 선언하면 접근 제한자가 사용된 생성자 파라미터는 암묵적으로 클래스 프로퍼티로 선언된다.

Private을 사용하면?

  • private이 선언되었기 때문에 boardsService 프로퍼티는 BoardsController 클래스 내부에서만 사용 가능하다.
profile
개발자로서의 첫걸음

0개의 댓글