NestJS - Service, Provider

aydennote·2023년 5월 2일
0

Backend

목록 보기
4/6
post-thumbnail

1. Service란?

비즈니스 로직을 담당하는 컴포넌트로 @Injectable() 데코레이터로 감싸져서 모듈에 제공된다.

2. Service 생성

NestJS CLI를 사용하여 서비스를 생성할 수 있다.

nest g service boards --no-spec

nest : nest CLI 사용
g : generage
service : 생성할 틀
boards : 이름
--no-spec : 테스트 코드 생성 X

3. Provider란?

NestJS의 기본 개념이다. 대부분의 Nest 클래스는 서비스, 리포지토리, 팩토리, 헬퍼 등 Provider로 취급될 수 있다. Provider의 주요 아이디어는 종속성으로 주입 할 수 있다는 것이다.

4. 종속성 주입(DI)

컨트롤러에서 서비스에 작성된 비즈니스 로직을 실행할 때 종속성을 주입해야된다.

import { CatsService } from './cats.service';

@Controller('cats')
export class CatsController {
  constructor(private catsService: CatsService) {}
  ...
}

위에 예시는 클래스에 생성자를 이용해 종속성을 주입하는 코드이다. catsService를 인스턴스화하여 컨트롤러 안에서 사용이 가능하게 된다.


✍ 종속성 주입을 하는 이유는 모듈 간의 결합도를 낮추고 코드의 재사용성을 높이기 위함이다.
컨트롤러에서 직접 서비스를 생성하거나 가져와서 사용하는 경우, 컨트롤러와 서비스 간의 결합도가 높아지게 되며, 만약 서비스를 변경해야 할 경우에는 컨트롤러도 함께 변경되어야 한다. 이는 코드의 유지보수를 어렵게 만들어 직관적인 코드 분석과 수정이 어렵게 만든다.
반면, 종속성 주입을 사용하면 컨트롤러와 서비스는 서로 독립적으로 작성되며, 서비스의 변경이 컨트롤러에 영향을 주지 않는다. 이는 유연한 코드를 작성할 수 있게 해주며, 코드의 재사용성을 높여준다.

5. 내가 이해한 종합 로직

서비스에서는 @injectable() 데코레이터를 사용해 서비스를 Provider 모듈에 제공한다. 이를 컨트롤러에서는 종속성 주입(DI)를 통해 서비스를 인스턴스화하여 사용한다. 즉, 모듈은 컨트롤러와 Provider를 묶어주고 컨트롤러에서 Provider를 종속성 주입을 통해 사용 가능하도록 한다.

참고 강의
참고 사이트

profile
기록하는 개발자 Ayden 입니다.

0개의 댓글