피드로 돌아가기
When adding a feature broke a dozen classes
Dev.toDev.to
Backend

SOLID 원칙 적용을 통한 테스트 시간 77% 단축 및 배포 효율화

When adding a feature broke a dozen classes

Lavkesh Dwivedi2026년 6월 19일3intermediate

Context

단일 클래스에 과도한 책임이 집중된 God Class 구조로 인해 기능 추가 시 다수의 클래스를 동시에 수정해야 하는 Shotgun Surgery 발생. 강한 결합도로 인한 테스트 수행 시간 증가 및 유지보수 비용 상승의 한계 직면.

Technical Solution

  • Single Responsibility Principle 적용을 통한 PaymentProcessor 내 결제, DB, 알림 로직 분리로 코드 복잡도 감소
  • IReportFormatter 인터페이스 추출을 통한 Open/Closed Principle 구현으로 기존 코드 수정 없는 포맷 확장 체계 구축
  • Spring @Component scanning 기반 Plugin System 도입을 통한 GatewayFactory의 분기 로직 제거 및 자동 등록 구조 설계
  • Behavioral Interface 분리를 통한 Liskov Substitution Principle 준수로 런타임 예외 발생 가능성 제거
  • IUserRepository 추상화 계층 도입을 통한 Dependency Inversion 구현으로 저장소 구현체 교체 유연성 확보

Impact

  • PaymentProcessor 리팩토링 후 테스트 수행 시간 18분에서 4분으로 단축
  • Plugin System 도입을 통한 변경 사항당 배포 시간 22분에서 3분으로 감소

1. 클래스가 변경되어야 하는 이유가 두 가지 이상인지 검토

2. 새로운 기능을 추가할 때 기존 소스 코드를 수정하는지 확인

3. 상위 클래스의 계약을 하위 클래스가 강제로 위반하며 예외를 던지는지 체크

4. 구체 클래스가 아닌 인터페이스에 의존하여 구현체 교체 가능성을 확보했는지 분석

원문 읽기