-
Adaptor 패턴으로 호출가능한 Local 환경 만들기Spring Framework 2024. 3. 8. 00:01
개요
FeignClient를 활용하다 보면 Local 호출 테스트를 수행하기 위해 MockServer를 띄우는 작업을 수행해야 합니다.
어떻게 하면 Dummy값으로라도 Local에서도 호출 테스트를 수행해 볼 수 있을까요?
문제 상황
@FeignClient( name = "localTestFeign", url = "http://external-service:8080", dismiss404 = true, ) interface ExternalServiceCallFeignClient { @GetMapping("/external-service-call") fun getExternalInformation(): String }
feignClient url을 가상의 외부 도메인을 호출한다고 가정하겠습니다.
@RestController class TestController( private val externalServiceCallFeignClient: ExternalServiceCallFeignClient, ) { @GetMapping("/test") fun test() = externalServiceCallFeignClient.getExternalInformation() }
이때 Local에서 바로 호출하는 테스트를 수행해보려면 어떻게 될까요?
java.net.ConnectException: Connection refused: no further information
ConnectException이 발생하게 됩니다.
해결방법
FeignClient 자체를 제어하지 못하기 때문에 Port & Adaptor 패턴으로 호출가능하게 만들 수 있습니다.
interface InformationPort { fun getInformation(): String @Component @Profile("local") class DummyInfomationAdpator: InformationPort { override fun getInformation(): String { return "DUMMY INFORMATION" } } @Component @Profile("!local") class DefaultInformationAdaptor( private val feignClient: ExternalServiceCallFeignClient ): InformationPort{ override fun getInformation(): String{ return feignClient.getExternalInformation() } } }
InformationPort를 두고 Adpator 클래스를 통하여 Local 환경에서는 더미값을 제공하고 Local 환경이 아니라면 실제로 FeignClient를 호출하도록 구성합니다.
호출결과
local에서도 호출할 수 있는 환경으로 만들 수 있습니다.
'Spring Framework' 카테고리의 다른 글
프로젝트에 Feature Flag 적용하기 (0) 2024.06.01 Spring Batch 대신 @Scheduled 활용해보기 (1) 2024.05.08 JsonTypeInfo, JsonSubTypes 어노테이션 (0) 2024.02.27 Spring 단일 Endpoint에 여러 요청 처리하기 (0) 2024.02.13 Spring Boot 2.x 프로젝트 만들기 (0) 2024.02.07