피드로 돌아가기
How Hexagonal Architecture Cut My CI Time From 20 Minutes to 5
Dev.toDev.to
Backend

Hexagonal Architecture 도입으로 CI 시간을 20분에서 5분으로 75% 단축

How Hexagonal Architecture Cut My CI Time From 20 Minutes to 5

Ian Johnson2026년 5월 26일8intermediate

Context

Laravel 기반 시스템에서 RefreshDatabase 패턴 사용으로 인한 DB 의존적 테스트 구조 설계 데이터 스키마 증가에 따른 테스트 수행 시간의 선형적 증가와 강한 결합도로 인한 피드백 루프 저하

Technical Solution

  • 외부 의존성을 애플리케이션 소유의 인터페이스(Port) 뒤로 격리한 Hexagonal Architecture 적용
  • 기술 중심 명칭 대신 ForFindingOrders와 같이 유스케이스 기반의 인터페이스 설계
  • 프로덕션용 Eloquent 어댑터와 테스트용 In-memory 어댑터를 분리하여 데이터베이스 접근 제거
  • Mocking 대신 실제 동작을 구현한 Fake 객체를 사용하여 테스트 신뢰성 확보
  • Laravel TestCase 대신 PHPUnit TestCase를 상속받아 프레임워크 부팅 비용 제거
  • 포트와 프로덕션 어댑터 간 계약 검증을 위한 최소한의 Integration Test만 유지

Impact

  • 전체 CI 수행 시간: 20분 $\rightarrow$ 24분(마이그레이션 정점) $\rightarrow$ 5분으로 단축
  • DB 의존 테스트 클래스 비중: 95%에서 25%로 감소
  • 순수 Unit Test 클래스 비중: 5%에서 75%로 확대

Key Takeaway

아키텍처 변경 초기에는 코드량 증가와 중복 테스트로 인해 성능이 일시적으로 하락하는 J-커브 구간 발생 임계 질량(Critical Mass)을 넘어서는 순간 DB 세금(Database Tax)이 제거되며 비선형적인 성능 향상 달성


- 유스케이스 기반 인터페이스 정의 후 In-memory Fake 구현체 도입 검토 - 프레임워크 부팅이 불필요한 테스트 클래스의 Base Case를 Pure PHPUnit으로 변경 - 전체 마이그레이션 대신 특정 Bounded Context부터 단계적으로 적용하여 성과 증명 - 프로덕션 어댑터 검증용 Integration Test와 비즈니스 로직 검증용 Unit Test를 엄격히 분리

원문 읽기