가을기 Workspace

NestJS provider 본문

개발/nodejs

NestJS provider

가을기_ 2021. 5. 9. 20:41

본 포스팅은 사이드프로젝트 스케치데브를 사용하면서 공부한 nestjs를 정리한 글입니다.

스케치데브가 궁금하시다면: https://sketchdev.kr

 

스케치데브 - 개발자 캐치마인드

스케치데브는 개발자들만의 IT용어로 즐기는 스케치퀴즈 연상 캐치마인드 게임입니다. 고득점을 한번 노려보세요!

sketchdev.kr

 

provider: 비즈니스 로직이 담겨있는 services, repositories, factories, helpers 들을 통칭.

Spring이라면 bean의 개념.

참고: provider는 모두 singleton이다. node.js는 싱글스레드 기반이므로 동시성 이슈에서 자유롭다.

 

서비스

import { Injectable } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';

@Injectable()
export class CatsService {
  private readonly cats: Cat[] = [];

  create(cat: Cat) {
    this.cats.push(cat);
  }

  findAll(): Cat[] {
    return this.cats;
  }
}

Injectable이 중요하다.

이게 있어야 Nest IoC가 관리할 수 있게 된다.

 

 

Dependency Injection

constructor(private catsService: CatsService) {}

constructor parameter로 붙이기만 하면 해결

 

 

Optional Parameter

import { Injectable, Optional, Inject } from '@nestjs/common';

@Injectable()
export class HttpService<T> {
  constructor(@Optional() @Inject('HTTP_OPTIONS') private httpClient: T) {}
}

개발자의 시간은 소중하다. 우리는 개발자다.

그러니 바빠서, 혹은 귀찮아서 provider 설정을 안할 수도 있다.

그때 Optional로 default provider를 줄 수도 있다.

 

 

Provider 등록

import { Module } from '@nestjs/common';
import { CatsController } from './cats/cats.controller';
import { CatsService } from './cats/cats.service';

@Module({
  controllers: [CatsController],
  providers: [CatsService],
})
export class AppModule {}

 

Spring과는 다르게 Nest는 Component Scan을 하지 않는다.

속도와 가벼움을 위해서라고 추측한다.

 

 

이렇게 해서 완성되는 디렉터리 구조

대략 위와 같다.

cats라는 도메인 아래 controller, service, dto, interface 등.

 

 

 

글 읽어주셔서 감사합니다.

'개발 > nodejs' 카테고리의 다른 글

Typescript로 object 초기화  (0) 2021.06.16
NestJS mongodb module  (0) 2021.05.09
NestJS module  (0) 2021.05.09
NestJS controller  (0) 2021.05.09
NestJS 시작하기  (0) 2021.05.09
Comments