벡엔드/MSA

OpenFeign (@FeignClient)

코딩하는이씨 2024. 3. 19. 21:44
728x90
반응형

OpenFeign


Java에서 RESTful 웹 서비스 클라이언트를 쉽게 작성할 수 있도록 도와주는 라이브러리이다.

  • REST 클라이언트를 선언적 방식으로 정의
  • RESTful 웹 서비스와 통신할 때 코드를 간소화

💡 Spring Cloud와 같은 마이크로서비스 아키텍처에서 클라이언트 간 통신을 구현할 때 주로 사용한다.

 

예시

OpenFeign을 사용하여 RESTful 서비스에 요청을 Req

import feign.*;

public interface MyServiceClient {
    @RequestLine("GET /api/resource/{id}")
    Resource getResource(@Param("id") String id);
}
  • 인터페이스를 정의하고 Spring 애플리케이션에 등록하면, OpenFeign이 자동으로 이를 구현하여 RESTful 서비스에 대한 클라이언트를 생성한다.

OpenFeign을 사용하여 RESTful 서비스에 GET 요청보내기

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MyService {
    @Autowired
    private MyServiceClient myServiceClient;

    public Resource getResource(String id) {
        return myServiceClient.getResource(id);
    }
}

 

@FeignClient


OpenFeign을 사용하여 RESTful 서비스에 대한 클라이언트를 선언하는 데 사용한다.

  • 이 애너테이션을 사용시 인터페이스를 정의하고 해당 인터페이스에 대한 구현체를 생성하지 않아도된다.
  • Spring이 런타임에 이를 처리하고 필요한 클라이언트 인스턴스를 생성하여 주입한다.

예시

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(name = "my-service", url = "<http://localhost:8080>", 
	fallback = "MyServiceFallback.class")
public interface MyServiceClient {

		// getResource 메서드를 사용 "/api/resource/{id}" 엔드포인트로 GET 요청을 보내는 방법을 정의
    @GetMapping("/api/resource/{id}")
    Resource getResource(@PathVariable("id") String id);
}
  • **@FeignClient**를 사용하여 "my-service"라는 이름의 Feign 클라이언트를 정의하고, 이 클라이언트가 요청을 보낼 기본 URL을 "http://localhost:8080"으로 지정했다.
  • fallback 클래스를 MyServiceFallback.class로 지정해 대체 동작을 정의했다.

옵션

  • value : Feign 클라이언트의 이름 또는 목적지 서비스의 이름
  • url : 요청을 보낼 기본 URL
  • path : 기본 URL에 연결될 상대 경로 (url 과 path가 서로 결합되어 최종 요청 URL이 생성된다.)
  • configuration : Feign 클라이언트의 구성을 지정하는데 사용
  • fallback : Feign 클라이언트의 Fallback클래스를 지정하여 요청 실패시 대체 동작 정의
728x90
반응형