NestJS에서 서비스(Service) 개념 및 서비스 생성하기
BE/NestJS2023. 11. 19. 18:33Table of Contents
반응형
서비스(Service)란
서비스는 NestJS에서만 사용하는 개념은 아니고, 소프트웨어 개발시 공통적으로 사용하는 개념입니다. 서비스는 보통 복잡한 비지니스 로직 또는 데이터베이스 관련된 로직을 처리할때 사용합니다.
정답은 없겠지만 종종 Controller에서 비지니스 로직을 처리하는 경우를 종종 보게 되는데, 컨트롤러는 라우팅을 정의하는 목적으로만 사용하고 복잡한 비지니스 로직은 서비스로 분리하는 것이 유지 보수 측면에서도 좋을거 같다고 생각합니다.
NestJS에서의 서비스
NestJS에서 서비스를 정의할때는 @Injectable
데코레이터를 사용합니다. (Injectable 영어 단어로만 보더라도, "주입할 수 있는"로 해석할 수 있는데, Spring에서 DI와 동일한 개념) 해당 데코레이터에 의해, 해당 서비스의 인스턴스는 App 전체에서 사용 될 수 있게됩니다.
주입 범위(Injection scope)는 Default로 싱글톤(Singleton
)이며, App이 부트스트랩되는 시점에 서비스의 인스턴스가 생성됩니다. 만약, scope를 변경하고 싶은 경우 아래와 같이 사용할 수 있습니다
import { Injectable, Scope } from '@nestjs/common';
@Injectable({ scope: Scope.REQUEST })
export class CatsService {}
Scope의 종류
Scope.DEFAULT
: 싱글톤Scope.REQEUST
: 요청마다 새로운 인스턴스가 생성됨. 요청이 완료되면 GA에 의해 인스턴스가 삭제됨Scope.TRANSIENT
: Provider간에 공유되지 않고 새로 생성됨
Service 생성하기
service도 module과 controller와 같이 명령어를 사용해서 생성할 수 있습니다. nest g service <서비스명> --no-spec
명령어 사용
nest g service boards --no-spec
import { Module } from '@nestjs/common';
import { BoardsController } from './boards.controller';
import { BoardsService } from './boards.service';
@Module({
controllers: [BoardsController],
providers: [BoardsService], // 모듈의 Provider에 자동으로 추가됨
})
export class BoardsModule {}
의존성 주입(DI)
생성된 서비스를 의존성 주입(Dependency Injection)을 하려면 아래 코드와 같이 할 수 있습니다.
@Controller('boards')
export class BoardsController {
private boardsService: BoardsService;
constructor(boardsService: BoardsService) {
this.boardsService = boardsService;
}
// ... 생략 ...
}
javascript는 private, public와 같이 scope를 제공하지 않지만, typescript에서는 기능을 제공해줌
이걸 더 간략하게 작성하면 한줄로 표현할 수 있습니다.
@Controller('boards')
export class BoardsController {
constructor(private boardsService: BoardsService) {}
// ... 생략 ...
}
Reference
반응형
'BE > NestJS' 카테고리의 다른 글
NestJS + postgres + typeorm 연동하기 (서버 DB 연결) (0) | 2023.11.21 |
---|---|
NestJS Pipe를 이용하여 데이터 변환 및 검증 (1) | 2023.11.20 |
NestJS 컨트롤러(Controller) 개념 및 정의하기 (0) | 2023.11.17 |
NestJS의 모듈(module) 개념 및 module 정의하기 (0) | 2023.11.17 |
NestJS로 프로젝트 생성 및 서버 개발하기 (0) | 2023.11.17 |
@bluemiv :: BLUEMIV
IT 기술에 대한 글을 주로 작성하고, 일상 내용, 맛집/숙박/제품 리뷰 등 여러가지 주제를작성하는 블로그입니다. 티스토리 커스텀 스킨도 개발하고 있으니 관심있으신분은 Berry Skin을 검색바랍니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!