.NET

Dependency Injection

서비스 라이프타임(singleton, scoped, transient), 서비스 등록, IServiceProvider, 모범 사례

24 면접 질문·
Mid-Level
1

Singleton, Scoped, Transient 라이프타임의 주요 차이점은 무엇입니까?

답변

Singleton은 애플리케이션 라이프타임 전체에 대해 단일 인스턴스를 생성하고, Scoped는 HTTP 요청(또는 스코프)당 하나의 인스턴스를 생성하며, Transient는 주입될 때마다 새 인스턴스를 생성합니다. 이러한 라이프타임은 DI 컨테이너가 서비스를 언제, 몇 번 인스턴스화하는지를 결정합니다. 상태가 없는 공유 서비스에는 Singleton, 요청에 바인딩된 서비스(DbContext 등)에는 Scoped, 상태가 없는 경량 서비스에는 Transient를 사용합니다.

2

Entity Framework Core DbContext를 등록하려면 어떤 lifetime을 사용해야 하나요?

답변

DbContext는 thread-safe하지 않고 엔티티 추적 상태를 유지하므로 Scoped lifetime으로 등록해야 합니다. 동시성 문제를 피하려면 각 HTTP 요청마다 자체 DbContext 인스턴스를 가져야 합니다. 등록은 AddDbContext로 하며, 이것이 자동으로 Scoped lifetime을 구성합니다. Singleton을 사용하면 동시성 오류가 발생하고, Transient는 너무 많은 인스턴스를 생성해 리소스를 낭비합니다.

3

interface와 그 구현을 사용하여 서비스를 등록하는 방법은 무엇인가요?

답변

서비스 등록은 AddSingleton, AddScoped 또는 AddTransient 메서드로 interface를 서비스 타입으로, 구체 클래스를 구현으로 지정하여 수행합니다. 구문은 services.Add{Lifetime}<IInterface, Implementation>()입니다. 이 방식은 의존성 역전 원칙을 따르며, 구현을 대체할 수 있게 하여 테스트를 용이하게 합니다. DI 컨테이너는 interface를 주입할 때 구체 구현을 자동으로 해결합니다.

4

AddScoped보다 AddSingleton을 선호해야 하는 경우는 언제인가요?

5

DI 시스템에서 IServiceProvider의 역할은 무엇인가요?

+21 면접 질문

다음 면접을 위해 .NET을 마스터하세요

모든 질문, flashcards, 기술 테스트, 코드 리뷰 연습, 면접 시뮬레이터에 접근하세요.

무료로 시작하기