관리 메뉴

피터의 개발이야기

[SPRING BOOT] Retrofit vs Feign for Server Side 본문

Programming/Spring

[SPRING BOOT] Retrofit vs Feign for Server Side

기록하는 백앤드개발자 2020. 12. 8. 13:28
반응형

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 기반 마이크로서비스의 서버사이드 서비스 간 통신에 더 적합합니다.

 

반응형
Comments