전체 목록
테스트Hard#246

Contract Test는 마이크로서비스 환경에서 어떤 문제를 줄이나요?

#테스트#ContractTest#API#마이크로서비스

답변 포인트

서비스 간 API 계약 검증를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.

정답 및 해설

빠른 요약

Contract Test는 제공자와 소비자가 합의한 API 요청/응답 계약이 깨지지 않았는지 확인합니다. 독립 배포 환경에서 호환성 문제를 조기에 찾습니다.

Contract Test는 서비스 간 API 계약이 깨지는 문제를 배포 전에 발견하기 위한 테스트입니다. 마이크로서비스에서는 소비자와 제공자가 독립적으로 배포되기 때문에 “내 서비스 테스트는 통과했지만 상대 서비스와 붙으면 실패”하는 일이 생깁니다.

해결하려는 문제

주문 서비스가 결제 서비스의 응답을 이렇게 기대한다고 가정합니다.

JSON
{ "paymentId": "p1", "status": "APPROVED" }

결제 서비스가 필드명을 state로 바꾸면 주문 서비스는 런타임에 깨집니다. Contract Test는 이런 변경을 계약 위반으로 잡습니다.

Consumer-driven contract

소비자가 기대하는 요청/응답 계약을 정의하고, 제공자가 그 계약을 만족하는지 검증합니다. Pact 같은 도구가 대표적입니다.

장점

  • 모든 서비스를 실제로 띄우는 무거운 E2E를 줄입니다.
  • API breaking change를 빠르게 발견합니다.
  • 소비자 관점의 실제 사용 필드가 계약에 반영됩니다.

주의점

계약이 너무 세부 구현까지 묶으면 변경이 어려워집니다. 또한 인증, 에러 응답, optional field, 하위 호환성 정책을 명확히 해야 합니다.

면접 답변 포인트

Contract Test는 서비스 간 요청/응답 형식과 의미의 계약을 검증해 독립 배포에서 생기는 호환성 문제를 줄입니다. E2E를 대체하기보다 중간 계층에서 빠르게 깨짐을 감지하는 역할입니다.

관련 질문

같은 카테고리/태그 기준