피드로 돌아가기
Dev.toBackend
원문 읽기
Runtime 모델 변경으로 드러난 Singleton Mutable State 기반 데이터 격리 실패 해결
When “Works on Lambda” Breaks on ECS: A Concurrency Bug from Misusing Singletons in .NET
AI 요약
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을 통해 생명주기 격리