데브허브 | DEVHUB | Executable Agreements: Code, Collaborate, and Deploy with Confidence by Dr. Dimitris DranidisExecutable Agreements: Code, Collaborate, and Deploy with Confidence by Dr. Dimitris Dranidis
- Pact의 핵심 동기: 상호작용하는 시스템에서 엔드투엔드(E2E) 테스트의 높은 비용, 복잡성, 느린 속도 문제를 해결하기 위한 대안 또는 보완책으로 Pact를 소개합니다. 💸
- Pact의 역사와 중요성: 12년 전 시작된 오픈소스 프로젝트로, 2022년 SmartBear에 인수되며 그 유용성과 업계 인정을 입증했습니다. 🚀
- 소비자-제공자 개념: Pact는 데이터를 요청하는 '소비자(Consumer)'와 데이터를 제공하는 '제공자(Provider)' 간의 상호작용을 중심으로 합니다. 🤝
- 계약 테스트의 본질: 소비자-제공자 간의 메시지 교환(요청/응답)에 대한 합의(계약)를 독립적으로 테스트하여, 마치 '타입이 없는 언어에서 강한 타입 언어로 전환'하는 것처럼 런타임 오류를 사전에 방지합니다. 📜
- 소비자 주도 계약 테스트: Pact는 소비자가 자신의 기대치를 명시하고, 제공자가 모든 소비자의 기대치를 충족하는지 확인하는 '소비자 주도(Consumer-driven)' 방식을 채택합니다. 🎯
- Pact Broker의 역할: 소비자가 발행한 계약(pact)과 제공자가 수행한 검증 결과를 중앙에서 관리하며, 시스템 배포 가능 여부를 판단하는 핵심 허브 역할을 합니다. 🌐
- 소비자 측 테스트: 소비자는 목(mock) 제공자를 사용하여 자신의 기대치에 따라 올바르게 동작하는지 테스트하고, 그 결과로 생성된 Pact 파일을 브로커에 게시합니다. 📝
- 제공자 측 테스트: 제공자는 브로커에서 관련 Pact 파일을 가져와 실제 서비스가 소비자의 기대치를 충족하는지 검증하며, 이때 '상태 핸들러(state handler)'를 통해 테스트 전 필요한 환경을 설정합니다. ✅
- 배포 결정 지원: Pact Broker는 모든 검증 결과를 종합하여, 특정 소비자 또는 제공자가 프로덕션 환경에서 안전하게 배포될 수 있는지에 대한 명확한 지표를 제공합니다. 🚦
- Pact의 한계: 엔드투엔드 테스트를 완전히 대체하지는 않으며, 주로 HTTP/메시지 수준의 통신 오류를 방지하지만, 애플리케이션의 모든 로직 문제를 해결하지는 않습니다. 🚧