WEB/Spring

[Spring]Feign Client를 활용한 마이크로서비스 통신 방법

MoonSta 2023. 7. 22. 12:57

마이크로서비스 아키텍처에서는 다양한 서비스들이 작은 단위로 분리되어 개발되고 운영됩니다. 이로 인해 서비스들 사이의 통신이 중요한 이슈가 되며, Spring Feign Client를 활용하면 간편하고 효율적인 통신 방법을 구현할 수 있습니다. 이 블로그에서는 Spring Feign Client를 사용하여 마이크로서비스 간 통신을 설정하는 방법과 이점에 대해 자세히 설명하겠습니다.

     


    Feign Client란?

    Spring Feign Client는 Spring Cloud 프로젝트의 일부로, 마이크로서비스 아키텍처에서 서비스 간 통신을 추상화하는 라이브러리입니다. Feign Client를 사용하면 HTTP RESTful API 호출을 간편하게 처리할 수 있으며, 클라이언트 인터페이스를 정의하여 서비스 간 통신을 마치 로컬 메서드 호출하는 것처럼 편리하게 구현할 수 있습니다.

     


     

    Feign Client 설정

    Spring에서 Feign Client를 사용하기 위해서는 프로젝트 의존성을 추가해주어야 한다. 추가해야 될 의존성은 spring-cloud-starter-openFeign이며 Maven을 사용하는 경우 pom.xml에 아래의 의존성을 추가해주어야 합니다.

     

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>

     


     

    Feign Client 인터페이스 만들기

    Feign Client 인터페이스 작성: Feign Client를 사용하기 위해서는 인터페이스를 작성해야 합니다. 이 인터페이스에는 원격 서비스의 API를 선언합니다. 인터페이스에 @FeignClient 어노테이션을 추가하고, 원격 서비스의 이름을 지정합니다.

     

    @FeignClient(name = "remote-service")
    public interface RemoteServiceClient {
    
        @GetMapping("/api/resource/{id}")
        Resource getResource(@PathVariable("id") Long id);
    }

     


     

    Feign Client를 사용한 통신 방법

    서비스 간 통신 사용: 작성한 Feign Client 인터페이스를 주입받아 해당 인터페이스를 사용하여 원격 서비스와 통신합니다. 자동으로 생성된 Feign Client 구현체가 실제 HTTP 호출을 처리합니다.

     

    @RestController
    public class MyController {
    
        private final RemoteServiceClient remoteServiceClient;
    
        @Autowired
        public MyController(RemoteServiceClient remoteServiceClient) {
            this.remoteServiceClient = remoteServiceClient;
        }
    
        @GetMapping("/get-resource/{id}")
        public Resource getResource(@PathVariable Long id) {
            return remoteServiceClient.getResource(id);
        }
    }

     


     

    Feign Client를 사용함으로써 오는 이점

    1. 편리한 통신: Feign Client를 사용하면 서비스 간 통신을 더 간단하고 편리하게 처리할 수 있습니다. 복잡한 HTTP 호출 코드를 작성할 필요 없이 간단한 인터페이스로 통신할 수 있습니다.
    2. 스프링 클라우드와의 통합: Feign Client는 스프링 클라우드의 기능들과 원활하게 통합됩니다. 서비스 디스커버리, 로드 밸런싱 등의 기능을 사용하면서 Feign Client를 활용할 수 있습니다.
    3. 관리 용이성: Feign Client를 사용하면 인터페이스 단위로 서비스 간 통신을 정의하기 때문에 관리가 용이합니다. API 변경 시 해당 인터페이스만 수정하면 되므로 코드 유지보수가 용이합니다.