일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- minikube
- 코틀린 코루틴의 정석
- AWS EKS
- 공부
- 티스토리챌린지
- Spring
- 오블완
- 정보처리기사 실기 기출문제
- Linux
- kotlin coroutine
- kotlin
- Elasticsearch
- Pinpoint
- CKA
- kotlin querydsl
- 정보처리기사실기 기출문제
- Java
- Kubernetes
- 기록으로 실력을 쌓자
- PETERICA
- MySQL
- CKA 기출문제
- IntelliJ
- 정보처리기사 실기
- CloudWatch
- AI
- kotlin spring
- APM
- aws
- mysql 튜닝
- Today
- Total
피터의 개발이야기
[SPRING BOOT] Retrofit vs Feign for Server Side 본문
Spring Boot 애플리케이션에서 서버 측 사용을 위해 Retrofit 및 OpenFeign 선언적 REST 클라이언트를 비교합니다.
먼저 Retrofit 및 OpenFeign을 소개하겠습니다.
Retrofit
Android 및 Java를 위한 안전 HTTP 클라이언트입니다. HTTP API를 Java 인터페이스로 바꾸는 선언적 웹 서비스 클라이언트입니다.
자세한 내용은 여기를 참조하세요.
Feign Client
Feign은 선언적 웹 서비스 클라이언트입니다. 웹 서비스 클라이언트를 더 쉽게 작성할 수 있습니다. Feign를 사용하려면 인터페이스를 만들고 어노테이션을 합니다.
https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-feign.html
Spring Cloud OpenFeign
https://cloud.spring.io/spring-cloud-openfeign/reference/html/
Feign Client와 Retrofit의 유사점
1. 둘 다 Android 와 JAVA / Kotlin 의 안전한 HTTP 클라이언트입니다.
2. 둘 다 JSON 또는 XML 데이터를 POJO로 쉽게 사용할 수 있습니다.
둘다 구성 및 사용이 매우 쉽지만 특히 서버 사이드에서 미묘한 차이가 있습니다.
Retrofit보다 Feign Client가 서버사이드에서 장점
- Spring Boot 애플리케이션에서 Feign Client를 만드는 것은 매우 쉽습니다.
build.gradle에 dependencies를 추가하기만 하면 됩니다.
build.gradle
compile('org.springframework.cloud:spring-cloud-starter-openfeign')
compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')
compile('org.springframework.cloud:spring-cloud-starter-loadbalancer')
compile('org.springframework.cloud:spring-cloud-starter-netflix-hystrix')
사업장 서비스를 위한 Feign Client 생성
@FeignClient("stores")
public interface StoreClient {
@RequestMapping(method = RequestMethod.GET, value = "/stores")
List<Store> getStores();
}
- Eureka 검색 클라이언트 통합 :
스프링 부트 애플리케이션이 Eureka 클라이언트 인 경우 Spring 클라우드는 Feign Client eureka를 인식하게합니다.
즉 Feign이 Eureka 서비스 레지스트리에서 서비스를 확인합니다.
따라서 대상 서비스에 대해 host / port /protocol을 하드 코딩 할 필요가 없습니다.
이 작업을 수행하는 데 필요한 것은 spring-cloud-starter-netflix-eureka-client
종속성을 추가 build.gradle하고 아래 두 주석을 기본 클래스에 적용하는 것입니다.
@EnableDiscoveryClient
@EnableFeignClients
public class App {
public static void main(String[] args) {
SpringApplication.run(ShunyaApp.class, args);
}
}
- 리본 통합 : Spring cloud는 이제 Feign은 추가 작업없이 클라이언트 측 부하 분산의 모든 이점을 누리고 있습니다. 이제 Feign은 추가 배관없이 클라이언트 측 부하 분산의 모든 이점을 누리고 있습니다. Ribbon은 원격 서비스의 여러 인스턴스에 부하를 분산합니다.
- 회로 차단기 패턴 : Hystrix가 클래스 경로에 있고 feign.hystrix.enabled=true, Feign은 회로 차단기로 모든 메서드를 래핑합니다.
- Spring Cloud에 의해 Feign 클라이언트에 Spring MVC 주석 지원이 추가되었습니다. 따라서 Feign을 사용하기위한 새로운 구문을 배울 필요가 없습니다.
- 기본 Spring Web HttpMessageConverters은 Spring Cloud와 함께 사용할 때 Feign과 함께 사용하도록 구성됩니다.
- OpenFeign은 필요한 Http 통신을위한 기본 HttpClient로 Apache HttpClient 및 OkHttp 모두에 대한 플러그 형 지원을 제공합니다. 가짜에서 OkHttp를 활성화하려면 다음 속성을 설정할 수 있습니다. 마찬가지로 Json Serialization / DeSerialization을 위해 Jackson과 Gson, 로깅을 위해 Slf4j 중에서 선택할 수 있습니다.
application.yml
spring-cloud-starter-netflix-ribbon이 클래스 경로에있는 경우 클라이언트 측로드 밸런서를 feign과 통합합니다.
feign:
okhttp:
enabled: true
속성이 설정되지 않은 경우 기본적으로 Apache HttpClient가 사용됩니다.
반면 Retrofit v2 +는 OkHttp에서만 작동합니다.
마무리
Retrofit은 Android 개발에 가장 적합하고
OpenFeign은 Spring Cloud 기반 마이크로서비스의 서버사이드 서비스 간 통신에 더 적합합니다.
'Programming > Spring' 카테고리의 다른 글
[Spring] War 배포와 Jar 배포 시 resource 참조 문제 (0) | 2020.12.14 |
---|---|
Spring Profiles (0) | 2020.12.12 |
[Spring] Jackson Annotations (0) | 2020.12.10 |
[Spring] Spring schedule을 조건부로 활성화 하기 (0) | 2020.12.02 |
[Spring] @Transient (0) | 2020.12.02 |