API를 호출하는 로직을 테스트할 때, 어떻게 외부 서비스에 대한 의존성을 제거하고 신뢰성 있는 테스트를 만들 수 있을까요? 🚀
WireMock은 HTTP 요청과 응답을 시뮬레이션할 수 있는 강력한 도구입니다.
실제 외부 API 없이도 자체적으로 제어된 환경에서 테스트를 수행할 수 있게 해 줍니다.
WireMock
WireMock은 주로 HTTP 기반의 API를 모킹하기 위한 강력한 도구입니다.
Spring Boot와 쉽게 통합할 수 있어 REST 클라이언트나 외부 API와 상호작용하는 코드를 테스트하는 데 매우 적합합니다.
WireMock을 사용하면 외부 API에 대한 의존성을 제거하여 더 독립적이고 신뢰성 있는 테스트 환경을 만들 수 있습니다.
WireMock을 사용하는 이유
- 독립성 유지
실제 외부 API와의 의존성을 없애 테스트 환경의 독립성을 유지할 수 있습니다. - 테스트 안전성
외부 서비스의 가용성에 영향을 받지 않고, 항상 동일한 응답을 얻을 수 있어 테스트의 신뢰성을 높입니다. - 쉬운 설정
WireMock은 간단한 설정으로 다양한 HTTP 요청과 응답을 모킹할 수 있습니다. - 다양한 응답 시뮬레이션
다양한 시나리오를 테스트할 수 있도록, 정상 응답뿐만 아니라 오류 응답도 시뮬레이션할 수 있습니다.
WireMock을 사용한 REST 클라이언트 테스트
Spring Boot 애플리케이션에서 WireMock을 설정하여 외부 API 호출을 모킹해봅시다. 이를 통해 외부 API와의 의존성을 없애고, 보다 독립적인 테스트 환경을 구축할 수 있습니다.
1. Spring Boot에서 WireMock 설정하기
먼저, build.gradle 파일에 WireMock 의존성을 추가합니다.
// build.gradle
testImplementation 'com.github.tomakehurst:wiremock:2.27.2'
2. WireMock을 사용하여 REST 클라이언트 테스트하기
예를 들어, 조직명을 조회하기 위해 외부 API를 호출하는 로직이 있는 서비스가 있다고 가정해보겠습니다!
@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class Service {
@Transactional
public ResponseDto findConfig(Long officeNo) {
ApiResponseDto organization = orgApi.findRootOrganization(officeNo);
return ResponseDto.from(organization);
}
}
3. WireMock 서버 설정
테스트 구성 파일에 WireMock 서버를 설정하는 Bean을 추가합니다.
@TestConfiguration
public class WireMockServerConfig {
@Bean(initMethod = "start", destroyMethod = "stop")
public WireMockServer wireMockServer() {
return new WireMockServer(56789);
}
}
4. Mock 서버 응답 설정
WireMock 서버가 특정 엔드포인트에 대해 미리 정의된 응답을 반환하도록 설정합니다.
public class MockServerSetupHelper {
public static void stubGetEndpoint(WireMockServer wireMockServer) {
wireMockServer.stubFor(WireMock.get(WireMock.urlMatching("/api/[0-9]+.*"))
.willReturn(WireMock.aResponse()
.withStatus(HttpStatus.OK.value())
.withHeader("Content-Type", MediaType.APPLICATION_JSON_VALUE)
.withBodyFile("payload/get-org.json")));
}
}
5. JSON 응답 예시
payload/get-org.json 파일의 내용은 다음과 같이 구성할 수 있습니다:
{
"data": [
{
"org_id": 1111,
"org_name": "개발 부서"
}
]
}
이 설정을 통해, WireMock 서버는 /api/[0-9]+ 패턴에 맞는 모든 요청에 대해 지정된 JSON 응답을 반환하게 됩니다.
💡 WireMock은 이렇게 간단한 설정으로도 다양한 테스트 시나리오를 지원하여 개발자가 외부 API와의 의존성을 걱정하지 않고도 테스트를 진행할 수 있도록 도와줍니다. 이를 통해 애플리케이션의 신뢰성을 높이고, 유지 보수성을 향상시킬 수 있습니다.
'Spring' 카테고리의 다른 글
[Spring] @NotNull, @NotEmpty, @NotBlank 차이점 (0) | 2024.09.21 |
---|---|
[Spring] AOP에 @EnableAspectJAutoProxy는 왜 필요할까? (0) | 2024.09.07 |
Failed to validate connection 해결하기 (0) | 2024.08.17 |
[Spring] @Scheduled 주기적인 작업 처리하기 (0) | 2024.07.27 |
[Spring] ArgumentResolver 사용하기 (0) | 2024.07.20 |