싱글턴 패턴
nestjs에서는 모듈들(@Module, @Injectable 데코레이터를 사용하여 등록한 것들)에 싱글턴 패턴을 적용하여 사용한다.
싱글턴 패턴은 뭐고 왜 사용하는 것일까??
싱글턴 패턴은 인스턴스를 메모리에 최초로 만들어두고 사용하는 디자인 패턴이다.
매 요청마다 인스턴스를 생성하면 메모리 관리에 어려울 수 밖에 없다(언제 삭제해줘야하는지 알수가 없음)
따라서 nestjs에서는 의존성이 주입된 모듈들을 global scope로 최초 실행시 메모리에 인스턴스를 띄워두고 각 모듈들을 사용해야 하면 메모리에서 꺼내 쓴다. (scope는 설정 가능)
Node 는 싱글스레드로 동작하기 때문에 싱글턴 패턴으로 모듈들을 관리해도 문제가 없다(동시성 이슈가 발생 안함, 데드락과 같은 상황 발생 x)
프로세스 여러개를 띄워도 각자 서로의 싱글턴 객체 들을 가지기 때문에 문제가 없다.
의존성 주입
위에서 나온 의존성 주입은 뭘까?? 예전에 위키피디아에서 읽어본 글을 참고 하면
만약 너가 냉장고에 가서 막 문을 여닫고 뭔가를 찾는다면 문제가 발생할 수 있단다.
문을 연채로 돌아갈수도 있고 엄마나 아빠가 너가 먹길 원하지 않는 음식들을 먹을수도 있겠지.
유통기한이 지났거나 이제껏 사본적 없는 물건들을 찾고 있는 것일수도 있어
너가 해야할것은 필요한 것을 말하는 것 뿐이야. '나는 점심에 마실것이 필요해요' 하면 우리가 필요한것을 준비해줄수 있어!!!!
=> 설명이 쉽게 이해가 되었다(이게 맞다면)
nestjs에서 의존성을 주입(나는 이것들을 필요로 해요)하는 부분은 아래 코드에 있다
@Controller('api/faqs')
export class FaqsController {
constructor(private readonly faqsService: FaqsService) {}
}
constructor에 필요한 것들을 명시해줌으로써 의존성을 주입해 준다.
nest 에서는 constructor에 명시된 것들을 메모리에 생성된 싱글턴 객체중에 찾아서 의존성을 주입해 주는 것이다.
> 싱글턴 객체는 여러 모듈들에서 접근할 수 있기 때문에 private readonly를 명시해주어서 혹시 override되거나 하는 과정을 방지하여야 한다.
https://docs.nestjs.com/modules#shared-modules
https://en.wikipedia.org/wiki/Dependency_injection#AngularJS_example
'Node' 카테고리의 다른 글
data mapper 패턴, active record 패턴 🌱 (0) | 2022.04.02 |
---|---|
npm link (0) | 2022.03.04 |
npm 만드는 법 && 출시 (0) | 2022.02.07 |
.npmignore (0) | 2022.02.07 |
algorithm-cli 생성기 (0) | 2022.02.07 |