> For the complete documentation index, see [llms.txt](https://wannaqueen.gitbook.io/spring5/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://wannaqueen.gitbook.io/spring5/spring-boot/undefined-1/36.-rest-webclient-by-ys.md).

# 36. REST 서비스 호출 WebClient by ys

classpath에 Spring WebFlux가 있으면 `WebClient`를 사용하여 원격 REST 서비스를 호출하도록 선택할 수도 있습니다. `RestTemplate`과 비교하여, 이 클라이언트는 더 기능적인 느낌을 가지며 완전히 반응합니다. `WebClient`에 대한 자세한 내용은 [Spring 프레임 워크 문서](https://docs.spring.io/spring/docs/5.1.7.RELEASE/spring-framework-reference/web-reactive.html#webflux-client)의 전용 섹션에서 확인할 수 있습니다.

Spring Boot는 `WebClient.Builder`를 생성하고 사전 구성합니다. 구성 요소에 삽입하여 `WebClient` 인스턴스를 만드는 것이 좋습니다. Spring Boot는 HTTP 리소스를 공유하고 코덱을 서버와 같은 방식으로 반영하도록 해당 빌더를 구성합니다 ([WebFlux HTTP 코덱 자동 구성](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-webflux-httpcodecs)참조).

다음 코드는 일반적인 예를 보여줍니다.

```java
@Service
public class MyService {

	private final WebClient webClient;

	public MyService(WebClient.Builder webClientBuilder) {
		this.webClient = webClientBuilder.baseUrl("https://example.org").build();
	}

	public Mono<Details> someRestCall(String name) {
		return this.webClient.get().uri("/{name}/details", name)
						.retrieve().bodyToMono(Details.class);
	}

}
```

### 36.1 WebClient 런타임

Spring Boot는 응용 프로그램 클래스 경로에서 사용할 수있는 라이브러리에 따라 `WebClient`를 구동하는 데 사용할 `ClientHttpConnector`를 자동으로 감지합니다. 지금은 Reactor Netty 및 Jetty RS 클라이언트가 지원됩니다.

`spring-boot-starter-webflux`스타터는 기본적으로 `io.projectreactor.netty:reactor-netty`에 의존하며, 이는 서버와 클라이언트 구현 모두를 가져옵니다. Jetty를 반응 형 서버로 대신 사용하는 경우 Jetty Reactive HTTP 클라이언트 라이브러리 인 `org.eclipse.jetty:jetty-reactive-httpclient`를 추가해야합니다. 서버와 클라이언트에 동일한 기술을 사용하면 클라이언트와 서버간에 HTTP 리소스를 자동으로 공유하므로 이점이 있습니다.

개발자는 사용자 정의 `ReactorResourceFactory` 또는 `JettyResourceFactory` 빈을 제공하여 Jetty 및 Reactor Netty의 자원 구성을 대체 할 수 있습니다. 이는 클라이언트와 서버 모두에 적용됩니다.

클라이언트에 대한 선택 사항을 대체하려면 클라이언트 고유의 `ClientHttpConnector` Bean을 정의하고 클라이언트 구성을 완전히 제어 할 수 있습니다.

[`WebClient`](https://docs.spring.io/spring/docs/5.1.7.RELEASE/spring-framework-reference/web-reactive.html#webflux-client-builder) 구성 옵션에 대한 자세한 내용은 [Spring Framework 레퍼런스 문서](https://docs.spring.io/spring/docs/5.1.7.RELEASE/spring-framework-reference/web-reactive.html#webflux-client-builder)를 참조하십시오.

### 36.2 WebClient 사용자 정의

`WebClient`커스터마이제이션을 적용하려는 세 가지 방법에 따라 세 가지 주요 방법 이 있습니다.

가능한 모든 사용자 정의 범위를 좁히려면 자동 구성된 `WebClient.Builder`를 삽입 한 다음 필요에 따라 해당 메서드를 호출하십시오. `WebClient.Builder` 인스턴스는 상태 정보입니다. 빌더의 모든 변경 사항은 이후에 작성된 모든 클라이언트에 반영됩니다. 동일한 빌더로 여러 클라이언트를 작성하려는 경우 `WebClient.Builder other = builder.clone();`을 사용하여 빌더 복제를 고려할 수도 있습니다.

모든 `WebClient.Builder`인스턴스에 대한 응용 프로그램 차원의 추가 사용자 지정을 수행하려면 `WebClientCustomizer` Bean을 선언하고 `WebClient.Builder`를 주입 지점에서 로컬로 변경할 수 있습니다.

마지막으로 원래 API로 되돌아 가서 `WebClient.create()`를 사용할 수 있습니다. 이 경우 자동 구성 또는 `WebClientCustomizer`가 적용되지 않습니다.
