RestTemplate vs RestClient vs WebClient vs FeignClient

Regular Kim·2025년 6월 1일
0

기타

목록 보기
7/19

HTTP Client 종류 알아보기

  • RestTemplate : 동기/블로킹 전통 http 클라이언트
  • RestClient : 스프링 6.1+ 최신 동기/블로킹 클라이언트 (RestTemplate 대체)
  • WebClient : 비동기/논블로킹 리액티브 http 클라이언트
  • FeignClient : 스프링 클라우드용 http 클라이언트

1. RestTemplate

동기 방식
오래됐으나 여전히 많이 사용됨

로드밸런싱 연동 : @LoadBalanced + lb://

스프링 5부터는 유지보수 모드


@Bean
@LoadBalanced
public RestTemplate restTemplate() {
	return new RestTemplate();
}

restTemplate.getForObject("lb://order-service/orders", String.class);

2. RestClient

동기 방식
스프링 6.1+ 부터 새로 추가된 최신 동기/블로킹 HTTP 클라이언트.

로드밸런싱 연동 : @LoadBalanced + lb://

@Bean
@LoadBalanced
public RestClient.Builder restClientBuilder() {
    return RestClient.builder();
}

// 사용 예시
RestClient restClient = restClientBuilder.build();

String response = restClient.get()
    .uri("lb://order-service/orders")
    .retrieve()
    .body(String.class);

3. WebClient

비동기 방식
Spring WebFlux와 연동

로드밸런싱 연동 : @LoadBalanced + lb://

WebFlux 뿐만 아니라 mvc 에서도 사용 가능

@Bean
@LoadBalanced
public WebClient.Builder webClientBuilder() {
	return WebClient.builder();
}

webClientBuilder.build()
	.get()
	.uri("lb://order-service/order")
	.retrieve()
	.bodyToMono(String.class);

4. FeignClient

동기 방식

로드밸런싱 연동 : @FeignClient(name = "service-name") -> 자동으로 lb:// 사용

인터페이스 선언만으로 통신 가능

@FeignClient(name = "order-service")
public interface OrderServiceClient {

	@GetMapping("/orders")
	String getOrders(@RequestParam String userId);
}
profile
What doesn't kill you, makes you stronger

0개의 댓글