피드로 돌아가기
Dev.toBackend
원문 읽기
Singleton 제거 및 Dependency Injection 도입을 통한 테스트 안정성 및 개발 속도 확보
Why I Stopped Using Singletons (And How It Saved Our Architecture and My Sanity)
AI 요약
Context
전역 상태 관리 편의성을 위해 Singleton 패턴을 광범위하게 적용한 레거시 구조 분석. 프로젝트 규모 확장 과정에서 State Leakage로 인한 테스트 불확실성 증대와 모듈 간 강한 결합도로 인한 유지보수 비용 상승이 병목 지점으로 작용함.
Technical Solution
- Interface 기반의 경계 설정을 통한 의존성 추상화 구현
- Constructor Injection 방식을 도입하여 클래스 간 의존 관계를 명시적으로 정의
- Global State 접근을 차단하고 필요한 서비스만 주입받는 제어 역전(IoC) 구조 설계
- 자체 구현한 DI Container의 메모리 누수 문제를 인지하고 검증된 외부 라이브러리로 교체하여 안정성 확보
- Composition Root에서 구현체를 관리하여 런타임 시 유연한 교체 구조 마련
실천 포인트
1. 생성자에서 의존성을 명시적으로 요구하여 클래스의 책임과 요구사항을 문서화할 것
2. 전역 객체 사용 시 Mocking 가능 여부를 검토하여 테스트 격리 가능성을 확보할 것
3. 아키텍처 패턴 구현 시 직접 개발보다 검증된 표준 라이브러리 활용을 우선할 것
4. 상태 공유로 인한 Side Effect가 발생하는 지점을 파악하여 인터페이스 기반으로 디커플링할 것