피드로 돌아가기
Dependency Injection in Go Without a Framework
Dev.toDev.to
Backend

Framework-less DI 도입을 통한 테스트 시간 4초에서 밀리초 단위로 단축

Dependency Injection in Go Without a Framework

Odilon HUGONNOT2026년 6월 2일7intermediate

Context

생성자 내부에서 SMTP 클라이언트를 직접 생성하는 Hidden Dependency 구조로 인한 테스트 병목 발생. 실제 메일 발송으로 인한 테스트 실행 속도 저하 및 외부 의존성으로 인한 결정론적 테스트 불가능 상태 분석.

Technical Solution

  • Consumer side 인터페이스 정의를 통한 구체 구현체와 비즈니스 로직의 Decoupling 달성
  • 외부 라이브러리 없이 Inline Fake 구현체를 활용한 Side-effect 없는 단위 테스트 환경 구축
  • main.go를 Composition Root로 설정하여 모든 의존성 주입 및 구체 클래스 결정을 한 곳으로 집중
  • 필수 의존성은 Explicit Constructor를 통해 명시하고 선택적 의존성은 Functional Options 패턴으로 유연하게 처리
  • Reflection 기반 DI Framework 배제로 컴파일 타임 에러 포착 및 런타임 오버헤드 제거

1. 함수 내부에서 NewXXX()로 구체 객체를 생성하고 있는지 확인

2. 인터페이스를 제공자(Provider)가 아닌 소비자(Consumer) 패키지에 정의했는지 검토

3. main.go 외의 다른 패키지에서 구체 구현체에 의존하고 있는지 체크

4. Mock 프레임워크 도입 전 Inline Fake로 대체 가능한지 우선 확인

원문 읽기