Spring Cloud Contract

2022. 8. 3. 15:54OpenSource/Spring

반응형

https://spring.io/projects/spring-cloud-contract

Spring Cloud Contract is an umbrella project holding solutions that help users in successfully implementing the Consumer Driven Contracts approach

위의 내용은
spring.io에 spring cloud contract 설명을 한 내용인데 내용중에 Consumer Driven Contracts라는 내용이 나온다.
한글로 번역하면 "소비자 주도 계약" 이것은 무엇을 말하는걸까?

CDC flow


제공자(Producer) 가 소비자(Consumer)에 대한 연동을 확인하면서 모듈화된 시스템 구성 요소를
TEST하는데 사용되는 소프트웨어 테스트 방법론이다.
즉, 소비자(Consumer)의 요구사항을 중심으로 제공자의 서비스를 TEST하기 위한 방법론!

근래에 MSA구조를 많이 사용하고 있는 추세인데
보통 MSA를 테스트 하기 위해서는 모든 모듈들을 올리고 end to end로 테스트를 했다.
또는 다른 마이크로 서비스 Mock을 만들어서 유닛 또는 통합 테스트를 했다.

모든 마이크로서비스를 올리고 end to end로 테스트 했을때
Advantages: 서비스를 실제적으로 통신하여 시뮬레이터를 할 수 있다.
Disadvantages: test를 위해 연관된 모든 모듈을 다 실행해야 한다.
그만큼 테스트 하려면 번거롭고 시간이 오래 걸린다.
디버깅하기도 빡셈.

다른 마이크로 서비스 Mock을 만들어 유닛 또는 통합 테스트를 했을 때는
Advantages: 빠른 피드백과 인프라에 대한 부담이 없다.
Disadvantages: Mock을 만드는데 빡셀수 있으며 Mock 테스트이기 때문에 실제 real 환경에서 동작하지 않을수 있다.

위의 문제를 해결 하기위해 Stub Runner가 있는 Spring Cloud Contract Verifier가 생성 되었습니다.

Spring Cloud Contract Verifier란?

   - Producer에서 Contract 등록을 위해 필요
   - groovy DSL or yml로 표현된 REST 또는 메시징 contract가 있는 파일을 추가할 수 있습니다.
   - 플러그인을 셋팅하면 추가된 contract에 대한 테스트 코드가 자동으로 생성 됩니다.
아래의 링크를 통해 groovy, yaml, java, kotlin등 여러가지 버전을 제공 합니다.
https://docs.spring.io/spring-cloud-contract/docs/current/reference/html/project-features.html#contract-dslSpring Cloud Contract Stub Runner란?
  - Consumer 측에서 사용하며 Producer에서 생성한 Stub과 함께 테스트를 진행 합니다.
  - 실제 서비스를 시뮬레이션하는 실행 중인 WireMock 인스턴스를 사용 합니다.
>> stub이란? dummy객체가 마치 실제로 동작하는것 처럼 보이도록 만들어놓은것
      구현되지 않은 함수나 라이브러리를 제공하는 함수를 사용하고자할 때
      함수가 반환하는 값을 임의로 생성하고 싶을 때
      의존하는것에 대한 독립적으로 개발/테스트가 가능합니다. 
Spring Cloud Contract WireMock이란?
  - SpringBoot application에서 WireMock과의 통합을 지원 합니다.
  - @AutoConfigureWireMock을 통해 WireMock을 테스트시에 Stub Server로 실행이 가능 합니다.
  - json or java DSL을 사용하여 WireMock을 Stub 동작을 등록 할수 있습니다.
참고 : https://wiremock.org/docs/stubbing/


 

 

반응형

'OpenSource > Spring' 카테고리의 다른 글

Spring Cloud Contract  (0) 2022.08.03
Jackson Annotation Examples  (0) 2020.11.17
@Retryable  (0) 2020.11.17
@PreDestory란?  (0) 2020.11.12
@PostConstruct란?  (0) 2020.11.10
Spring WebFlux  (0) 2017.04.26