#13. feignClient

jychan99·2025년 4월 1일

개념정리

목록 보기
13/22

feignClient란? 넷플릭스에서 개발한 HttpClient이다.

feignClient는 기존 RestTemplate에 비해 선언방식이 간단해서(@feignclient) 가독성 뿐만아니라 코드 재사용의 측면에서도 유리하다.
자체 로드밸런싱 기능을 제공해 대규모 서비스 특히 MSA에 적용하기 적합함

localhost:8080에서 localhost:8081과 통신하는 라이브러리 정도로 이해해도 좋을듯

사용법(실습해본게아니고 gpt로 임시로 생성해본것)

라이브러리 추가

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

클라이언트측 application.yml(port:8080)

server:
  port: 8080
spring:
  application:
    name: client-service
feign:
  client:
    config:
      default:
        connectTimeout: 5000
        readTimeout: 5000
        loggerLevel: full

클라이언트측 메인어플리케이션.java

@SpringBootApplication
@EnableFeignClients //이게 필수로 들어가야한다.
public class ClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ClientApplication.class, args);
    }
}

클라이언트측 서비스

@FeignClient(name = "server-service", url = "http://localhost:8081")
public interface ServerFeignClient {
    @GetMapping("/api/data")
    String getServerData();
}

클라이언트측 Controller에서 feignClient호출

@RestController
@RequestMapping("/client")
@RequiredArgsConstructor
public class ClientController {

    private final ServerFeignClient serverFeignClient;

    @GetMapping("/fetch-data")
    public ResponseEntity<String> fetchData() {
        String response = serverFeignClient.getServerData();
        return ResponseEntity.ok(response);
    }
}

서버측 application.yml(port:8081)

server:
  port: 8081
spring:
  application:
    name: server-service

서버측 serviceImpl

@RestController
@RequestMapping("/api")
public class ServerController {

    @GetMapping("/data")
    public ResponseEntity<String> sendData() {
        return ResponseEntity.ok("Hello from Server!");
    }
}

이제 브라우저에서 http://localhost:8080/client/fetch-data요청을보내면 Hello from Server!라는 응답이 나온다.

profile
내가 지금 두려워 하고 있는 일이 바로 내가 지금 해야 할 일이다. 🐍

0개의 댓글