728x90

이번 포스팅에서는 OpenFeign 통합을 통해 Spring 환경과 다른 Spring 프로그래밍 모델에서의 자동구성과 바인딩을 해보도록 하겠습니다. 

 

1.  선언적 REST Client: Feign

Feign은 선언적 웹 서비스 클라이언트로 web service client를 쉽게 해줍니다.

먼저, Feign을 사용하려면 인터페이스를 만들고 주석을 달아야 합니다. Feign annotation과 JAX-RS annotation을 포함한 플러그형 주석을 제공합니다. Feign은 플러그형 인코더와 디코더를 지원합니다.

Spring Cloud는 Spring MVC annotation과 Spring web에서 HttpMessageConverters와 같이 사용하기 위해 추가합니다. Spring Cloud는 Feign을 사용할 때 부하 분산 http 클라이언트를 제공하기 위해 Eureka, Spring Cloud CircuitBreaker, Spring Clould LoadBalancer를 통합합니다.

 

1.1 Feign 사용법

Feign을 프로젝트에 사용하기 위해 org.springframework.cloudartifact id spring-cloud-starter-openfeign을 포함합니다. 

 

spring boot app 예제

@SpringBootApplication
@EnableFeignClients
public class Application {

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

}

 

 

StoreClient.java

@FeignClient("stores")
public interface StoreClient {
    @RequestMapping(method = RequestMethod.GET, value = "/stores")
    List<Store> getStores();

    @RequestMapping(method = RequestMethod.GET, value = "/stores")
    Page<Store> getStores(Pageable pageable);

    @RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json")
    Store update(@PathVariable("storeId") Long storeId, Store store);

    @RequestMapping(method = RequestMethod.DELETE, value = "/stores/{storeId:\\d+}")
    void delete(@PathVariable Long storeId);
}

@FeignClient annotation에서 String value("sotres" above)는 임의의 클라이언트 이름으로, Spring Cloud LoadBalnacer 클라이언트를 생성하는 데 사용됩니다. URL 속성(절대값 또는 호스트이름)을 사용하여 지정할 수도 있습니다. application context에서 bean의 이름은 인터페이스의 정규화된 이름입니다. 원하는 alias를 지정하기 위해서는 @FeignClient annotation의 qualifiers 값을 사용하면 됩니다.

 

load-balancer client는 "stores"서비스에 대한 물리적 주소를 알아내고자 할 것입니다. Eureka 클라이언트의 경우 Eureka 서비스 레지스트리에서 서비스를 확인합니다. Eureka를 사용하지 않으려면 SimpleDiscoveryClient를 사용하여 외구 구성에서 서버 목록을 구성할 수 있습니다.

 

Spring Clould OpenFeign은 Spring Clould LoadBalancer의 차단모드에서 사용가능한 모등기능을 지원합니다. 이는 프로젝트 설명서에서 자세히 알아볼 수 있습니다.(https://docs.spring.io/spring-cloud-commons/docs/current/reference/html/#spring-cloud-loadbalancer)

 

1.1.1 Attrivute resolution mode

Feign client bean을 생성하는 동안 @FeignClient 주석을 통해 전달된 값을 확인합니다. 4.x부터 즉시 확인가능하고 대부분의 사용 사례에 적합한 솔루션이며 AOT 지원도 가능합니다. 속성을 지연되는 경우 spring.cloud.openfeign.lazy-attributes-resolution property 값을 true로 변경해 보세요.

728x90
반응형
728x90

오랜만에 java 소스를 살펴보니 feign이라는 게 있어 feign에 대해 알아보려고 합니다.

 

 

Spring Feign Client란?

Netflix에서 개발된 Http Client Binder로 REST call을 추상화한 Spring Clould Netfix 라이브러리입니다.

이를 이용하면 Web Service 클라이언트를 보다 쉽게 작성할 수 있고, RestTemplate보다 직관적이고 간단하며 코드가 짧습니다.

 

가장 큰 장점은 MSA(Microservice Architecure)의 분산 애플리케이션에서 RESTful 클라이언트를 작성할 때, REST API 호출을 쉽게하고, 분산 애플리케이션의 성능과 안정성을 향상시킬 수 있습니다.

 

java에 손놓고 있다 봐보니 제가 느끼기에 Spring Feign은 선언적 방식을 띄고 있고, 인터페이스를 통해 클라이언트 측 프로그램을 작성, Spring이 런타임에 구현체를 제공한다 이렇게 보여집니다.

 

사용방법에 대해서는 추후 요약하여 올려보도록 하겠습니다.

728x90
반응형
728x90

spring boot로 구현되어 있는 backend에서 aws sqs sdk 사용을 해보려고 합니다.

소스는 aws 개발자 안내서를 참조하여 작성하였습니다.

https://docs.aws.amazon.com/ko_kr/sdk-for-java/v1/developer-guide/setup-project-gradle.html

 

Gradle에서 SDK 사용하기 - AWS SDK for Java

이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.

docs.aws.amazon.com

 

개발자 가이드에 따르면 Gradle의 버전에 따라 프로젝트 설정 방법이 달라지므로, 사용 중인 Gradle의 버전부터 확인해 보도록 하겠습니다.

 

현재 사용 중인 Intellij에서 Gradle Version 확인 방법은 아래와 같습니다.

1. 프로젝트 내에서 gradle 폴더를 찾습니다.

2. wrapper 내 2개의 파일 중 gradle-wrapper.properties 파일을 찾아 열어봅니다.

gradle version 확인

저의 버전은 7.1을 사용하고 있습니다.

 

아래에서 보듯이 5.0 이상이면 1단계는 건너뛸 수 있어요. 2단계부터 진행해보도록 하겠습니다.

 

기존에 소스를 살펴보면 build.gradle에 dependency가 정리되어 있습니다.

이 부분에 implemention을 추가해 줍니다.

implementation platform('com.amazonaws:aws-java-sdk-bom:1.11.1000')
implementation 'com.amazonaws:aws-java-sdk-s3'
implementation "com.amazonaws:aws-java-sdk-sqs"

"com.amazonaws:aws-java-sdk-sqs" 뒷부분에 ":version 정보"를 입력하여 특정 정보의 sdk를 사용하도록 설정할 수도 있습니다. 생각보다 간단하네요;;;

다음에는 sqs 연결을 하여 메시지를 전송하는 부분에 대하여 포스팅해보도록 하겠습니다.

728x90
반응형

+ Recent posts