마이크로서비스와 분산 시스템을 테스트하는 것은 모놀리식을 테스트하는 것보다 복잡합니다 — 서비스가 네트워크를 통해 상호작용하고, 독립적으로 배포되며, 분산 실패 모드를 가집니다. 계약 테스트(contract testing), 서비스 레벨 테스트, 신중한 integration/E2E 접근 같은 전략이 필요합니다.
과제
분산 시스템은 모놀리식보다 테스트하기 어렵다:
→ 많은 서비스가 네트워크를 통해 상호작용 (지연, 실패, 부분 장애)
→ 서비스가 독립적으로 배포됨 → 통합/호환성 우려
→ 많은 서비스에 걸친 E2E 테스트는 느리고, 깨지기 쉽고, 설정이 복잡
→ 분산 실패 모드 (서비스 다운, 느림, 오류 반환)
테스팅 전략
✓ 각 서비스를 격리로 테스트 (자체 unit + integration 테스트) — 토대
✓ 계약 테스트 (예: Pact) → 전체 통합 없이 서비스가 API 계약에 동의하는지 검증
→ 서비스 간(provider/consumer) 깨는 변경 포착 →
마이크로서비스의 핵심 기법 (호환성을 위한 깨지기 쉬운 전체 E2E 회피)
✓ 컴포넌트/서비스 레벨 테스트 → 의존성을 mock/stub한 서비스 테스트
✓ 제한된 E2E → 소수의 중요한 교차 서비스 흐름 (전수가 아님 — 너무 깨지기 쉽고 느림)
✓ 회복력 테스트 → 서비스가 의존성 실패를 어떻게 처리하는가 (타임아웃, 재시도,
서킷 브레이커); 실패 모드를 위한 카오스 테스트
