spring cloud Feign

Sean·2025년 5월 26일

Feign Client : Netflix에서 개발한 선언적인 http client 도구

선언적인 = 어노테이션 사용 의미

  • 인터페이스 작성 & 어노테이션 통해 구현체 없이 http Client 구현 가능.
  • http Client : 특정 프로그램에서 http 요청 간편하게 보낼 수 있도록 돕는 객체

장점

http client 통신 위한 여러 방법 존재하나(RestTemplate, WebClient, Apache의 HttpClient), Feign은 기존 httpClient보다 더욱 간단 사용, 여러 장점 포함

  • 다른 http client보다 코드 수 줄어듦. 가독성 뛰어남
  • 익숙한 springMVC 어노테이션(@PostMapping, @RequestParam, @PathVariable 등) 그대로 사용 가능 -> 새로 배워야하는 것이 많지 않아짐.
  • 통합 테스트 간편 : 인터페이스 기반이고, Bean 등록되기에@MockBean으로 주입받아서 가짜 동작을 설정할 수 있음)
  • 사용자 의도대로 커스텀 간편 : 헤더, 에러 핸들링 방식, 로깅, 타임아웃, 인증처리 -> config 통해 커스텀 가능.

사용 방법

1. build.gradle 디펜던시 추가

dependencyManagement {

    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'

2. 메인 애플리케이션에 @EnableFeignClients

@SpringBootApplication
@EnableFeignClients
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
	}
}

3. 인터페이스 작성 + @FeignClient

@FeignClient(name = "example", url = "http://localhost:8081")
public interface ExampleClient {

    @GetMapping("/examplefeign")
	String getFeign();
}
  • @EnableFeignClients가 지정된 package 돌아다니며 @FeignClient를 찾아 구현체 만들어줌.

구성요소

  • name(또는 value) : Feign Client 이름. eureka 연동할 때, 해당 name으로 서비스 등록됨.
  • url : 호출할 API url.

4. FeignClient 주입받아 사용

@Service
@RequiredArgsConstructor
public class ExampleService {

    private final ExampleClient exampleClient;

    public String ExampleFeign(){
        return exampleClient.getFeign();
    }
}
profile
저스트두잇

0개의 댓글