본문 바로가기
Software Test/Contract Test In Microservice

1. Contract Test?

by kellis 2020. 6. 7.

마이크로서비스에서 Contract란 서비스 provider와 consumer 사이의 합의를 의미합니다.(일반적으로 클라이언트와 서버간의 합의라고 흔히 표현하나, 마이크로서비스에서는 메시지 큐를 이용하여 통신하는 등 이 용어들이 항상 적절하지는 않으므로 consumer와 producer라는 용어를 사용합니다)

Contract, 즉 계약을 통해 각각의 consumer는 어떻게 서비스를 사용하는지, 무슨 데이터가 전송되고 무슨 응답을 받게 될지 알게 됩니다. 즉 Contract Test란 서비스가 다른 서비스와 커뮤니케이션할 수 있는지를 보장합니다. 이는 결국 서버 provider와 consumer가 모두 contract를 만족하는지 테스트해야 하므로 두 가지 관점이 존재하게 됩니다.

 

 (1) service provider side : 백엔드 서비스가 계약한 API 스펙대로 동작하는지 확인합니다. REST 서비스의 경우에는 아래와 같은 몇 가지 사항을 확인해야 합니다.

     - 서비스가 요청 및 응답 데이터를 올바르게 처리하는가 : XML, JSON, Query params 등

     - 완성된 데이터 포맷인가 : 최대길이, 데이터타입, 요구되는 필드 등

     - HTTP 코드가 올바르게 사용되었는가

     - 백엔드가 리소스/메서드마다 다른 요청에 대해 응답하는가

 (2) consumer side : consumer가 계약에 명시한대로 api를 통해 백엔드 서비스와 상호작용할 수 있는지 여부를 확인합니다. 요청을 보내고 응답을 올바로 처리하는지 확인해야 합니다.

 

결론적으로 contract test는 계약한 대로 동작하도록 보장하는데 초점이 맞추어져 있고, 일반적으로 이 계약은 마이크로서비스가 제공하는 API 스펙으로 제한됩니다. 유의해야 할 점은 이 테스트는 컴포넌트 테스트가 아니므로, 서비스의 동작을 깊숙이 테스트하지는 않지만 서비스 호출의 입력과 출력에 필수적인 속성은 포함되어야 하며 응답 대기 시간과 처리량은 허용 가능한 한도 내에 있어야 합니다. 

댓글