빙응의 공부 블로그
[Spring]OpenFeign 본문
📝1. OpenFeign이란?
OpenFeign이란?
Open Feign는 선언적인 HTTP Client 도구로써, 외부 API 호출을 쉽게할 수 있도록 도와줍니다.
여기서 "선언적인" 이란 어노테이션 사용을 의미합니다. Open Feign은 인터페이스에 어노테이션들만 붙여주면 구현이 됩니다. 이러한 방식은 Spring Data JPA와 유사하다고 합니다.
@FeignClient(name = "apiFeignClient", url = "https://apis.data.go.kr")
public interface ApiFeignClient {
@GetMapping("/1613000/RTMSDataSvcAptTrade/getRTMSDataSvcAptTrade")
String getAptTradeData(@RequestParam("serviceKey") String serviceKey,
@RequestParam("LAWD_CD") String lawdCd,
@RequestParam("DEAL_YMD") String dealYmd);
}
OpenFeign의 장점
- 인터페이스와 어노테이션 기반으로 작성할 코드가 줄어든다.
- 익숙한 Spring MVC 어노테이션으로 개발이 가능하다.
- 다른 Spring Cloud 기술과 통합이 쉽다.
OpenFeign의 단점 및 한계
- 기본 Http Cilen가 Http2를 지원안함
- 테스트 도구를 제공하지 않는다.
📌 인터페이스와 어노테이션 기반으로 작성할 코드가 줄어든다.
- OpenFeign의 가장 큰 장점은 인터페이스와 어노테이션 기반으로 작성할 코드가 줄어든다는 것입니다.
@Service
public class ApiService {
private final RestTemplate restTemplate;
public String getAptTradeData(String serviceKey, String lawdCd, String dealYmd) {
String url = "https://apis.data.go.kr/1613000/RTMSDataSvcAptTrade/getRTMSDataSvcAptTrade";
String uri = UriComponentsBuilder.fromHttpUrl(url)
.queryParam("serviceKey", serviceKey)
.queryParam("LAWD_CD", lawdCd)
.queryParam("DEAL_YMD", dealYmd)
.toUriString();
return restTemplate.getForObject(uri, String.class);
}
}
@FeignClient(name = "apiFeignClient", url = "https://apis.data.go.kr")
public interface ApiFeignClient {
@GetMapping("/1613000/RTMSDataSvcAptTrade/getRTMSDataSvcAptTrade")
String getAptTradeData(@RequestParam("serviceKey") String serviceKey,
@RequestParam("LAWD_CD") String lawdCd,
@RequestParam("DEAL_YMD") String dealYmd);
}
📝 Spring Cloud OpenFeign
이번 포스팅에서 OpenFeign 예시를 만들겠습니다.
1. 의존성 추가하기
ext {
set('springCloudVersion', "2023.0.3")
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
해당 코드 추가 이유는 OpenFeign도 Spring Cloud이기 때문에 의존성을 추가해 줘야합니다.
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
}
2. OpenFeign 활성화하기
OpenFeign을 활성화하려면 Config에 @EnableFeignCilents를 붙여주면됩니다.
설정시 반드시 인터페이스들의 위치를 지정해주어야합니다.
@Configuration
@EnableFeignClients("com.example.demo")
public class OpenFeignConfig {
}
3. FeignCilen 구현하기
API 호출을 수행할 클라이언트는 인터페이스에 @FeignCilent 어노테이션을 붙여주면 됩니다.
그리고 value와 url 설정을 필요합니다. url은 호출할 주소, value는 임의의 이름을 적어주면 됩니다.
@FeignClient(name = "apiFeignClient", url = "https://apis.data.go.kr")
public interface ApiFeignClient {
@GetMapping("/1613000/RTMSDataSvcAptTrade/getRTMSDataSvcAptTrade")
String getAptTradeData(@RequestParam("serviceKey") String serviceKey,
@RequestParam("LAWD_CD") String lawdCd,
@RequestParam("DEAL_YMD") String dealYmd);
}
OpenFeign은 스프링 어노테이션과 호환이 가능해 그리 어렵지는 않을 겁니다.
🧷추가
1.13. Reactive Support
As the OpenFeign project does not currently support reactive clients, such as Spring WebClient, neither does Spring Cloud OpenFeign. We will add support for it here as soon as it becomes available in the core project.
Until that is done, we recommend using feign-reactive for Spring WebClient support
이제 더 이상 Spring에서는 OpenFeign를 지원하지 않는다고 합니다.
그렇기에 다른 방법을 사용하는 것이 좋습니다. 해당 글에서는 Spring Interface Client를 쓰는 것을 권장하고 있습니다.
'Spring > 개인공부_이론' 카테고리의 다른 글
[Spring]스프링의 트랜잭션 전파 속성 (2) | 2024.12.03 |
---|---|
[Spring]단위 테스트 정리하기 Mockito 실습 (3/3) (2) | 2024.10.18 |
[Spring]단위 테스트 정리하기 Mockito (2/3) (2) | 2024.10.18 |
[Spring]단위 테스트 정리하기 JUnit(1/3) (1) | 2024.10.18 |
[Spring API]Spring WebFlux와 WebClient (0) | 2024.05.24 |