피드로 돌아가기
The Scoped Singleton DI Bug Your AI Just Suggested
Dev.toDev.to
Backend

Dependency Injection Lifetime Mismatch로 인한 데이터 오염 및 ObjectDisposedException 방지 전략

The Scoped Singleton DI Bug Your AI Just Suggested

agentic.standard.contact2026년 5월 21일5intermediate

Context

Singleton 라이프타임의 서비스가 Scoped 객체인 DbContext나 Entity를 캡처하여 발생하는 Capturing Dependency Bug 분석. AI 코딩 어시스턴트가 DI 등록 컨텍스트를 무시하고 표면적 패턴만 제안함에 따라 프로덕션 환경에서 간헐적인 데이터 오염과 런타임 에러가 발생하는 구조적 한계 노출.

Technical Solution

  • Singleton 서비스 내 Scoped 의존성 직접 주입 금지 및 IServiceScopeFactory를 통한 단위 작업별 Scope 생성 구조 채택
  • Singleton Cache 저장 시 AsNoTracking() 적용 또는 DTO 투영을 통한 DbContext 추적 연결 끊기 설계
  • HttpClient의 소켓 고갈 및 DNS 갱신 이슈 해결을 위한 IHttpClientFactory 기반의 클라이언트 생성 패턴 강제
  • BackgroundService 및 IHostedService 내 Scoped 의존성 직접 참조 배제 및 명시적 Scope 생성 로직 구현
  • .mdc Rule 파일을 활용하여 DI 관련 파일 수정 시 라이프타임 계약을 자동 감사하는 강제적 검증 프로세스 도입

- Singleton 생성자에 Scoped/Transient 타입 주입 여부 확인 - Long-lived Cache에 저장되는 엔티티의 DbContext 추적 여부 검토 - HttpClient 생성 시 'new' 키워드 사용 여부 및 IHttpClientFactory 적용 확인 - IHostedService 내에서 Scoped 서비스 접근 시 IServiceScopeFactory 사용 여부 점검

원문 읽기