openFeign
- netflix에서 만든 Http Client 도구
- 어노테이션을 주로 사용하는 선언적 요청 방식
- Feign -> Open Feign -> spring Cloud로 통합되었다.
언제 사용하나?
MSA 방식 및 Spring Cloud 사용시 좋은 선택일 수 있음. Spring Cloud에 통합되어 있어서 다른 내부 기술들과 쉽게 통합될 수 있으므로.
feign이 RestTemplate와 WebClient에 비해 가지는 이점과 트레이드오프
- RestTemplate는 로깅이나 재시도등, Feign에 비해 확장성과 관리비용이 아쉬움
- WebClient는 비동기식으로 동작하므로, 비동기 처리에 더 강점이 있음
- Feign은 선언적이다보니 통신자동화에 유리, 커스터마이징(인터셉터, 엔코더등)가능
- RestTemplate는 maintenance mode이고 ,스프링에서도 WebClient 추천
Rest Api:
Rest를 기반으로 만들어진 API
Rest:
자원을 이름으로 구분해서 해당 자원의 상태를 주고받는 모든것.
1. 자원을 명시한다. (Http URI로. 예를 들어 스키마라던가 서버 주소라던가, 자원 위치등등)
2. 자원에 대한 행위를 명시한다. (POST, GET 등등)
3. 자원에 대한 행위의 내용. 요청 body나 응답에 담기는 것. amount라던지
전체적인 구조를 얘기하는 것으로 보인다.
장점:
- 외부 API호출을 매우 간소화하여 다른 비즈니스 로직에 더많은 집중 가능.
- 다른 Spring Cloud 기술과 쉽게 통합 가능
단점
- 클라우드 의존성 필요
- 비공식적인 비동기 모델 feign-reactive
- Http2 지원안되서 추가설정 필요
- 독자적 테스트 도구 부재
사용 방법
메인 클래스에 @EnableFeignClients를 달아준다. @FeignClient를 적용한 인터페이스 스캔 및
애플리케이션 컨텍스트에 빈으로 등록해주기 떄문에.
이렇게 하면 테스트에도 동일하게 적용되서 불필요하게 무겁고 시간을 길게 만드는 단점 존재
-> 그래서 Config 파일을 따로 만들어서 어노테이션을 적용할 수 있다.
@FeignClient(name = "koreaApi", url = "https://example.com")
public interface KoreaApiService {
@GetMapping("/test")
TourismListUseCase findList(
@RequestParam("pageNo") int pageNo,
@RequestParam("serviceKey") String serviceKey);
}
다른 옵션
openfeign 커스터마이징
Encoder
요청에 대해서 웹에 맞게 인코딩 처리
Decoder
응답에 대해서 웹에 맞게 인코딩 처리
Feign 비동기
비동기처리도 가능하다!
https://junuuu.tistory.com/770
https://github.com/PlaytikaOSS/feign-reactive
implementation("io.github.openfeign:feign-hc5")
hc-5를 이용해서 네트워크 적으로 비동기처리가 가능하도록 만드는게 가능하다.
3.대 버전에서는 위에만 추가하면 끝.
이전 버전에는 설정이 추가로 필요하다.
spring:
cloud:
openfeign:
httpclient:true
HttpClient5를 사용했을때의 이점은 무엇일까?
RequestInterceptor
Feign 클라이언트가 HTTP 요청을 보내기 전에 요청을 수정할 수 있도록 지원하는 인터페이스.
HTTP 요청 자체를 수정하거나 처리할 때 사용.
- 공통 헤더설정
- 인증 토큰 추가
- 로깅
Encoder와의 차이
Encoder는 요청 본문을 변환할 떄 사용한다.(json이나 form, xml등등)
https://khdscor.tistory.com/128
OpenFeign을 통한 외부 API (With Spring Boot)
들어가기 최근 프로젝트를 진행하면서 비즈니스 로직을 수행하는 도중 외부 API를 호출해야 하는 기능을 구현해야 하는 경우가 있었다. RestTemplate, WebClient 등 다양하게 있겠지만, Spring Data Jpa
khdscor.tistory.com
https://techblog.woowahan.com/2630/
우아한 feign 적용기 | 우아한형제들 기술블로그
안녕하세요. 저는 비즈인프라개발팀에서 개발하고 있는 고정섭입니다. 이 글에서는 배달의민족 광고시스템 백엔드에서 feign 을 적용하면서 겪었던 것들에 대해서 공유 하고자 합니다. 소개 Feign
techblog.woowahan.com
https://sabarada.tistory.com/115
[MSA] Spring Cloud Feign - 기본 사용 및 기본 설정편
안녕하세요. 오늘은 오랜만의 Spring Cloud에 대해서 알아보는 시간을 가지려고 합니다. 오늘 알아 볼 프로젝트는 Spring Cloud Feign 프로젝트입니다. MSA로 시스템 아키텍처가 많이 변경되면서 시스템
sabarada.tistory.com
[Feign] HTTP 구현체 성능 비교: HttpURLConnection vs Apache HttpComponents 5
MSA(Microservice Architecture) 환경에서는 서비스 간 통신이 매우 중요하다. Spring Cloud에서 제공하는 Feign 클라이언트는 선언적 방식으로 HTTP API 통신을 쉽게 구현할 수 있게 해주는 도구이다.Feign의 기
velog.io
RestTemplate · WebClient · FeignClient 비교 (OAuth 로그인 예시로)
OAuth 로그인을 구현하기 위해 스프링에서 HTTP 통신을 위해 RedisTemplate을 사용한 경험이 있어요. 하지만 다른 방식도 존재함을 인지하게 되어, 블로그에 정리하려고 해요. 이 글은 RestTemplate, WebClien
velog.io
https://huisam.tistory.com/entry/apache-http-client5
[Kotlin/Feign] Apache Http Client5 에 대해 알아보자
Apache Http Client5 비동기 I/O 처리가 가능한 Apache 의 새로운 Client 에 대해 알아보자 🔌 Apache Client4 우리가 일반적으로 사용하는 Client 는 대부분 동기 방식의 client 인 4.5.3 Version을 사용하고 있어요
huisam.tistory.com
'D' 카테고리의 다른 글
| 라이브러리 의존 (0) | 2025.01.26 |
|---|---|
| @JsonProperty 깊게 이해하기 (0) | 2025.01.18 |
| 코틀린 JPA PostgreSql json 입력 이슈 (0) | 2025.01.07 |
| 제로 쓰러스트 추가하기 + 인터셉터에서 RequestBody 조회 (0) | 2025.01.01 |
| yml과 환경에 따라 yml파일 분기 되는 이유 (0) | 2024.12.03 |