### RestTemplate 사용하기
`RestTemplate`은 Spring에서 오래전부터 제공해 온 HTTP 요청 기능을 갖춘 클래스입니다. 동기적인 메소드 호출을 제공하며, 다양한 HTTP 메소드(GET, POST, PUT, DELETE 등)를 실행할 수 있습니다.
#### RestTemplate 예제
```java
import org.springframework.web.client.RestTemplate;
import org.springframework.http.ResponseEntity;
public class RestTemplateExample {
private static final String API_URL = "https://api.example.com/data";
private RestTemplate restTemplate;
public RestTemplateExample() {
this.restTemplate = new RestTemplate();
}
public String getData() {
ResponseEntity<String> response = restTemplate.getForEntity(API_URL, String.class);
return response.getBody();
}
public static void main(String[] args) {
RestTemplateExample example = new RestTemplateExample();
System.out.println(example.getData());
}
}
```
위 예제에서 `RestTemplate`을 이용하여 GET 요청을 전송하고, 응답을 받아오는 간단한 API 호출을 보여주고 있습니다.
### WebClient 사용하기
`WebClient`는 `RestTemplate`의 비동기적 대안으로, Spring WebFlux에서 제공하는 비동기, 논블로킹 HTTP 요청/응답을 지원하는 클라이언트입니다. 비동기 처리와 스트림을 활용할 수 있는 환경에서 보다 적합합니다.
#### WebClient 예제
```java
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
public class WebClientExample {
private static final String API_URL = "https://api.example.com/data";
private WebClient webClient;
public WebClientExample() {
this.webClient = WebClient.builder()
.baseUrl(API_URL)
.build();
}
public Mono<String> getData() {
return webClient.get()
.retrieve()
.bodyToMono(String.class);
}
public static void main(String[] args) {
WebClientExample example = new WebClientExample();
example.getData().subscribe(data -> System.out.println(data));
}
}
```
위 코드는 `WebClient`를 사용하여 비동기적으로 GET 요청을 수행하는 예제입니다. `Mono`를 사용하여 비동기 결과를 받으며, subscriber 패턴을 통해 데이터를 처리할 수 있습니다.
### 결론
FeignClient가 제공하는 고급 기능을 필요로 하지 않거나, 비동기적인 요청이 필요할 때 `RestTemplate`과 `WebClient`는 적절한 대체제가 될 수 있습니다. `RestTemplate`은 동기적인 요청 및 전통적인 Spring MVC 환경에서 자주 사용되며, `WebClient`는 비동기 처리 및 리액티브 프로그래밍을 필요로 하는 환경에서 유용하게 사용될 수 있습니다. 프로젝트의 요구사항에 맞춰 적절한 방법을 선택하는 것이 중요합니다.