피드로 돌아가기
Writing Testable Code: Common Anti-Patterns and How to Fix Them
Dev.toDev.to
Backend

Dependency Injection을 통한 비결정적 요소 제거 및 Unit Test 가능 구조 설계

Writing Testable Code: Common Anti-Patterns and How to Fix Them

Mark Adel2026년 4월 26일18intermediate

Context

강한 결합도를 가진 Hard-coded dependency와 비결정적(Non-deterministic) 요소로 인해 비즈니스 로직의 독립적 검증이 불가능한 구조적 한계 발생. Infrastructure 레이어와 Business logic이 혼재되어 테스트 시 실제 DB나 외부 API 호출이 강제되는 설계 결함 분석.

Technical Solution

  • Dependency Injection 도입을 통한 외부 의존성 제어권 확보 및 Mock/Fake 객체 대체 구조 설계
  • Clock 및 RandomProvider 추상화를 통한 시간과 난수 생성의 결정론적(Deterministic) 제어 구현
  • Infrastructure와 Business logic의 물리적 분리로 I/O 없이 순수 도메인 로직만 검증하는 환경 구축
  • 인터페이스 남용을 지양하고 교체 가능성이 명확한 의존성에 한해 추상화 레이어를 적용하는 실용적 접근
  • Unit Test로 정밀 로직을 검증하고 Integration Test로 모듈 간 연결성을 확인하는 계층적 테스트 전략 수립

- 클래스 내부에서 'new' 키워드를 통한 직접적인 의존성 생성 여부 검토 - LocalDateTime.now() 등 외부 상태에 의존하는 비결정적 코드의 주입 가능 여부 확인 - 비즈니스 로직 검증 시 실제 I/O 발생 없이 테스트가 수행되는지 체크 - Unit Test와 Integration Test의 역할 분담 및 적절한 테스트 피라미드 구성 확인

원문 읽기