Feign는 Netflix에서 개발한 HTTP 클라이언트 바인더로, Spring Cloud와 통합되어 마이크로서비스 간의 통신을 간소화합니다. Feign을 사용하면 인터페이스를 통해 RESTful 웹 서비스 호출을 추상화할 수 있습니다. 이를 통해 복잡한 HTTP 통신 코드를 줄이고, 선언적 방식으로 마이크로서비스 간의 호출을 관리할 수 있습니다.
FeignClient는 주로 다음과 같은 목적을 위해 사용됩니다:
build.gradle 파일에 FeignClient 의존성을 추가합니다.
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
}
Spring Boot 애플리케이션 클래스에 @EnableFeignClients 어노테이션을 추가하여 FeignClients를 활성화합니다.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication
@EnableFeignClients
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
다른 마이크로서비스의 API를 호출하기 위한 FeignClient 인터페이스를 정의합니다.
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(name = "order-service")
public interface OrderClient {
@GetMapping("/orders/{id}")
Order getOrderById(@PathVariable("id") Long id);
}
정의한 FeignClient 인터페이스를 서비스 클래스에서 주입 받아 사용합니다.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class ProductService {
private final OrderClient orderClient;
@Autowired
public ProductService(OrderClient orderClient) {
this.orderClient = orderClient;
}
public Order getOrder(Long orderId) {
return orderClient.getOrderById(orderId);
}
}
FeignClient는 MSA 환경에서 마이크로서비스 간의 통신을 단순화하고, 코드를 간결하게 유지하는 데 큰 도움이 됩니다. 선언적 방식으로 REST API를 호출할 수 있어, 비즈니스 로직과 통신 로직을 분리할 수 있으며, Spring Cloud와의 통합을 통해 다양한 기능을 쉽게 활용할 수 있습니다.