피드로 돌아가기
Part 5: Mastering Dependency Resolution in Go with Parsley
Dev.toDev.to
Backend

Parsley의 Lazy Proxy와 Service List를 통한 DI 유연성 및 효율성 최적화

Part 5: Mastering Dependency Resolution in Go with Parsley

Matthias Friedrich2026년 5월 16일5intermediate

Context

단순한 Register-Resolve 패턴으로는 초기화 비용이 높은 서비스의 리소스 낭비와 다중 구현체 관리의 복잡성을 해결하기 어려움. 특히 런타임 시 특정 의존성을 동적으로 교체해야 하는 요구사항에 대응하는 구조적 한계 존재.

Technical Solution

  • features.Lazy[T] 인터페이스 기반의 Lazy Proxy 도입을 통한 무거운 서비스의 초기화 시점 지연 및 리소스 낭비 방지
  • RegisterList[T]를 활용해 동일 인터페이스의 모든 구현체를 Slice 형태로 주입함으로써 Open-Closed Principle을 준수하는 Aggregator 패턴 구현
  • ResolveWithOptionsWithInstance 옵션을 통한 런타임 의존성 덮어쓰기로 테스트 모킹 및 동적 설정 주입 가능
  • Value(ctx) 호출 시점에 실제 인스턴스를 생성하고 이후 캐싱하는 메커니즘으로 불필요한 중복 초기화 제거
  • 리플렉션 기반의 타입 매칭을 통해 컨테이너에 등록되지 않은 외부 인스턴스를 런타임에 유연하게 결합

1. 네트워크 연결이나 대량 I/O가 필요한 서비스는 `RegisterLazy`를 적용해 Startup Time 단축 검토

2. 플러그인 구조나 유효성 검사 파이프라인 설계 시 `RegisterList`를 통한 구현체 자동 집계 적용

3. 런타임 설정 변경이나 유닛 테스트 시 `ResolveWithOptions`를 활용한 특정 의존성 Override 전략 수립

4. Lazy Proxy 사용 시 발생하는 `Value(ctx)` 호출 오버헤드와 실제 이득 간의 Trade-off 분석

원문 읽기