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!라는 응답이 나온다.