피드로 돌아가기
When “Works on Lambda” Breaks on ECS: A Concurrency Bug from Misusing Singletons in .NET
Dev.toDev.to
Backend

Runtime 모델 변경으로 드러난 Singleton Mutable State 기반 데이터 격리 실패 해결

When “Works on Lambda” Breaks on ECS: A Concurrency Bug from Misusing Singletons in .NET

Pankaj Sharma2026년 5월 1일3intermediate

Context

AWS Lambda에서 ECS로 마이그레이션하며 Execution Model이 격리 환경에서 Concurrent 환경으로 변경됨. .NET Singleton 서비스 내에 Request-specific 데이터인 Authorization Header를 저장하는 Mutable Shared State 구조로 인해 사용자 간 데이터 교차 노출 및 권한 침해 사고 발생.

Technical Solution

  • Request-specific 데이터를 담는 ConnectionOptions 객체의 Singleton 등록 해제
  • Scoped Lifetime 도입을 통한 Request 단위의 인스턴스 격리 보장
  • IReadOnlyDictionary 적용을 통한 객체 Immutability 확보 및 런타임 상태 변경 원천 차단
  • Shared State 의존성을 제거하기 위해 API 호출 시 Header를 명시적으로 전달하는 Parameter Passing 방식으로 로직 수정
  • State를 갖지 않는 Stateless Service 설계 원칙 적용을 통한 동시성 버그 제거

1. Singleton 서비스 내에 Request-specific 데이터를 저장하는 Mutable 필드가 존재하는지 전수 조사

2. Lambda에서 ECS/K8s 등 Long-lived Service로 이전 시 Thread-safety 및 Concurrency 모델 재검토

3. 가급적 모든 설정 및 옵션 객체를 Immutable 구조로 설계하여 Side-effect 방지

4. 공유 상태가 필요한 경우 Scoped 또는 Transient Lifetime을 통해 생명주기 격리

원문 읽기