@Injectable()과 providers
주입 가능한 클래스가 모듈의 providers 배열에 들어가면
컨테이너가 토큰과 구현체를 기억한다.
컨트롤러는 new UserService()를 호출하지 않고 생성자
타입만 선언하며, 컨테이너가 프로바이더 등록 정보로 의존성 그래프와
인스턴스 수명주기를 관리한다.
@Injectable()과 providers
주입 가능한 클래스가 모듈의 providers 배열에 들어가면
컨테이너가 토큰과 구현체를 기억한다.
UserController의 생성자 매개변수를 보고 필요한
UserService와 그 하위 의존성까지 재귀적으로 찾는다.
대부분의 프로바이더는 애플리케이션 전체에서 하나의 인스턴스를 공유하고, 필요하면 요청 스코프를 선택한다.
수명 주기 관리단위 테스트에서는 실제 DB 연결이 있는 서비스를 대신해 mock 프로바이더를 넣어 컨트롤러 로직만 검증한다.
테스트 용이성