스프링 클라우드 컨트랙트 공식 레퍼런스를 한글로 번역한 문서입니다.
전체 목차는 여기에 있습니다.
Artifactory나 Nexus, Git에 있는 스텁stub, 명세contract 정의를 다운받는 대신, 드라이브나 클래스패스 상의 경로를 가리킬 수도 있다. 이는 멀티 모듈 프로젝트에서 특히 유용한데, 특정 모듈에서 다른 모듈에 있는 스텁stub이나 명세contract를 재사용할 수 있기 때문이다. 이렇게 하면 실제로 메이븐 로컬 레포지토리에 있는 스텁stub과 명세contract를 설치하지 않아도 Git에 변경 사항을 커밋할 수 있다.
드라이브나 클래스패스를 이용하려면, Stub Runner 또는 Spring Cloud Contract 플러그인의 repository root 파라미터를 stubs://
프로토콜을 사용해 설정하면 된다.
이 예제에서는 producer
프로젝트를 정상적으로 빌드했고, target/stubs
폴더 아래에 스텁stub을 생성했다고 가정한다. 컨슈머consumer는 Stub Runner를 설정할 때 stubs://
프로토콜을 사용해, 해당 경로에서 스텁stub을 조회하도록 만들 수 있다.
@AutoConfigureStubRunner(
stubsMode = StubRunnerProperties.StubsMode.REMOTE,
repositoryRoot = "stubs://file://location/to/the/producer/target/stubs/",
ids = "com.example:some-producer")
@Rule
public StubRunnerRule rule = new StubRunnerRule()
.downloadStub("com.example:some-producer")
.repoRoot("stubs://file://location/to/the/producer/target/stubs/")
.stubsMode(StubRunnerProperties.StubsMode.REMOTE);
@RegisterExtension
public StubRunnerExtension stubRunnerExtension = new StubRunnerExtension()
.downloadStub("com.example:some-producer")
.repoRoot("stubs://file://location/to/the/producer/target/stubs/")
.stubsMode(StubRunnerProperties.StubsMode.REMOTE);
명세contract와 스텁stub은 명세contract와 스텁stub 매핑 정보를 위한 각 프로듀서producer의 전용 폴더에 저장할 수 있다. 컨슈머consumer는 이 폴더 아래에 고유한 설정을 가질 수 있다. Stub Runner가 지정한 ID에 맞는 전용 폴더를 바라보도록 만들려면 stubs.find-producer=true
프로퍼티 또는 시스템 프로퍼티 stubrunner.stubs.find-producer=true
를 전달하면 된다. 다음은 명세contract와 스텁stub을 각 폴더에 나눠 배치하는 예시다:
└── com.example // (1)
├── some-artifact-id // (2)
│ └── 0.0.1
│ ├── contracts // (3)
│ │ └── shouldReturnStuffForArtifactId.groovy
│ └── mappings // (4)
│ └── shouldReturnStuffForArtifactId.json
└── some-other-artifact-id // (5)
├── contracts
│ └── shouldReturnStuffForOtherArtifactId.groovy
└── mappings
└── shouldReturnStuffForOtherArtifactId.json
(1) 컨슈머consumer의 그룹 ID
(2) [some-artifact-id]라는 아티팩트 id를 사용하는 컨슈머consumer
(3) [some-artifact-id]라는 아티팩트 id를 사용하는 컨슈머를 위한 명세contract
(4) [some-artifact-id]라는 아티팩트 id를 사용하는 컨슈머를 위한 매핑 정보
(5) [some-other-artifact-id]라는 아티팩트 id를 사용하는 컨슈머consumer
@AutoConfigureStubRunner(
stubsMode = StubRunnerProperties.StubsMode.REMOTE,
repositoryRoot = "stubs://file://location/to/the/contracts/directory",
ids = "com.example:some-producer",
properties="stubs.find-producer=true")
static Map<String, String> contractProperties() {
Map<String, String> map = new HashMap<>();
map.put("stubs.find-producer", "true");
return map;
}
@Rule
public StubRunnerRule rule = new StubRunnerRule()
.downloadStub("com.example:some-producer")
.repoRoot("stubs://file://location/to/the/contracts/directory")
.stubsMode(StubRunnerProperties.StubsMode.REMOTE)
.properties(contractProperties());
static Map<String, String> contractProperties() {
Map<String, String> map = new HashMap<>();
map.put("stubs.find-producer", "true");
return map;
}
@RegisterExtension
public StubRunnerExtension stubRunnerExtension = new StubRunnerExtension()
.downloadStub("com.example:some-producer")
.repoRoot("stubs://file://location/to/the/contracts/directory")
.stubsMode(StubRunnerProperties.StubsMode.REMOTE)
.properties(contractProperties());
Next :
3.6.9. Generating Stubs at Runtime
런타임에 스텁 생성하기
전체 목차는 여기에 있습니다.