Openfeign 런타임(runtime) 시 URI 변경

1 분 소요

👉 해당 포스트를 읽는데 도움을 줍니다.

1. Dynamic URI FeignClient on Runtime

1.1. Spring Cloud Openfeign 포스트의 SimpleClient 인터페이스

Spring Cloud Openfeign 포스트에서 사용한 FeignClient 코드를 보면 직관적으로 URL이 고정되어 있다고 느낄 수 있습니다.

@FeignClient(name = "simple-client", url = "http://localhost:8081")
interface SimpleClient {

    @GetMapping(path = "/api/cors/health")
    String health();

1.2. 런타임 시 URI 지정할 수 있는 FeignClient 생성하기

사실 FeignClient는 보다 더 유연한 프로그램 개발을 위해 런타임(runtime) 시 URL을 변경하는 기능을 제공하고 있습니다. 관련된 내용을 stack overflow 답변에서 확인할 수 있었습니다. 설명을 보면 애너테이션이 붙어있지 않은 URI 파라미터를 추가하면 해당 URI로 요청을 보낸다는 내용 같습니다.

stack overflow - How can I change the feign URL during the runtime?
You can add an unannotated URI parameter (that can potentially be determined at runtime) and that will be the base path that will be used for the request. E.g.:

@FeignClient(name = "dummy-name", url = "")
public interface MyClient {
    @PostMapping(path = "/create")
    UserDto createUser(URI baseUrl, @RequestBody UserDto userDto);

2. 테스트 코드



import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.web.bind.annotation.GetMapping;

import feign.Response;
import lombok.extern.log4j.Log4j2;

@FeignClient(name = "dynamic-url-client", url = "any-value")
interface DynamicUrlClient {

    @GetMapping(path = "/")
    Response getMethod(URI uri);

public class DynamicUrlTest {

    private DynamicUrlClient dynamicUrlClient;

    public void test() {
        try {
            Response response = dynamicUrlClient.getMethod(new URI(""));
  "response from naver: " + response.body());
            response = dynamicUrlClient.getMethod(new URI(""));
  "response from google: " + response.body());
        } catch (Exception e) {
            log.error("error while using feignclient", e);
테스트 수행
  • 주소를 가진 URI 객체를 getMethod() 메소드의 매개변수로 전달합니다.
  • 주소를 가진 URI 객체를 getMethod() 메소드의 매개변수로 전달합니다.
  • 각 결과를 확인합니다. 요청 결과 요청 결과