작성
·
94
·
수정됨
0
providers를 통해 등록된 UsersService는 싱글톤인지 궁금하여 nest.js 공식문서를 찾아보았습니다.
UsersModule의 exports를 통해 캡슐화된 공급자들을 내보내고,
AppModule에 UsersModule을 imports배열에 추가해서 가져오면
providers에 등록하지 않아도 자동으로 주입을 해주며,
인스턴스를 공유하는 싱글톤으로 주입받는다고 이해했습니다.
반면, UsersService를 필요한 모듈 각각의 providers 배열에 등록하게 된다면 등록된 모듈마다 인스턴스가 생성해서 주입하는 것으로 이해하였습니다.
공식문서에는 싱글톤으로 생성되서 관리된다면 메모리를 아낄 수 있고, 리소스의 관리가 쉬워진다는데
질문 1. 리소스의 관리가 쉬워지는건 같은 변수를 공유하기 때문이라고 이해해도 괜찮을까요?
질문 2. 제가 이해한 내용에서 잘못된 부분이 있는지 궁금합니다.
질문 3. providers 배열에 모듈마다 등록해서 인스턴스를 계속 찍어내야 하는 예시가 궁금합니다.
(싱글톤의 장점은 어느정도 이해가 되지만, 그 반대의 경우에는 어떤 상황에서 사용할 때 장점이 있는지 생각이 떠오르지 않습니다)
(집에 가면서 생각해봤는데 설정이 서로 다르게 주입되어야 하는 경우가 있다면 사용될 수 있을 것 같습니다.)
답변 2
1
UsersModule에 연결한 UsersService는 싱글톤이 됩니다. imports UsersModule해서 사용하면 같은 UsersService를 사용합니다.
네 같은 인스턴스이므로 this로 등록해둔 값들도 공유할 수 있습니다.
잘 이해하셨습니다.
UsersModule을 import하면 UsersModule의 프로바이더 전체가 import되므로 불필요한 서비스를 임포트하게될 수도 있고, UsersModule의 프로바이더와 내 프로바이더가 겹칠 수도 있습니다. 말씀하신대로 설정이 다른 경우도 있고 서비스 내에서 request에 접근하는 경우도 있을 수 있습니다(다만 이건 request scope라는 기능이 내장되어있어서 설정만 해두면 알아서 매 요청마다 새로운 인스턴스를 생성합니다)
0
An evolving a cappella track is created by all of these sections working in harmony with one another. sprunki incredibox