--- title: Spring RestClient — synchronous HTTP client baseline (Spring 6.1+) source_type: official-doc status: raw confidence: high url: https://docs.spring.io/spring-framework/reference/integration/rest-clients.html archive_url: related_branches: [feature-outbound-http-client-baseline, feature-integration-adapter-templates] related_projects: [ca-tmpl] tags: [ca-outbound-http, spring, restclient, resttemplate, webclient] created: 2026-05-22 last_reviewed: 2026-05-27 --- # Spring RestClient — synchronous HTTP client baseline > Layer: `raw/official-docs/` — Spring Framework reference "REST Clients" 페이지 + RestTemplate Javadoc 의 RestClient 정의 / WebClient·RestTemplate 비교 / 6.1 NOTE 발췌. ca-tmpl outbound Group G-C 의 대안 2 (RestClient baseline 채택) 의 1차 공식 근거. ## Parent / 활용 branch (필수) | Branch | 이 자료가 정당화하는 결정 | |---|---| | [[raw/branch-notes/feature-outbound-http-client-baseline]] | outbound HTTP baseline 으로 RestClient 채택 (sync default + WebClient extension + RestTemplate 회피) 근거 | | [[raw/branch-notes/feature-integration-adapter-templates]] | adapter template 의 client 구성에서 `RequestInterceptor` / `ResponseErrorHandler` chain 의존 결정 근거 | ## 컨텍스트 ca-tmpl outbound HTTP baseline **"Spring RestClient"** 결정의 공식 근거. RestTemplate / WebClient 와의 위치를 명시. ## 출처 / Source - Spring Framework Reference, "REST Clients": https://docs.spring.io/spring-framework/reference/integration/rest-clients.html - RestTemplate Javadoc (current): https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html - 아카이브 URL: (미수집) - 저자 / 조직: Spring Framework (VMware/Broadcom) - 발행일: rolling docs (확인 시점 Spring Framework 7.0.7) - 마지막 확인일: 2026-05-27 ## 핵심 인용 / Key quotes (verbatim) > [§REST Clients — RestClient] "RestClient is a synchronous HTTP client that provides a fluent API to perform requests. It serves as an abstraction over HTTP libraries, and handles conversion of HTTP request and response content to and from higher level Java objects." > [§REST Clients — Choices for making calls to REST endpoints] "The Spring Framework provides the following choices for making calls to REST endpoints:" / "RestClient — synchronous client with a fluent API" / "WebClient — non-blocking, reactive client with fluent API" > [§REST Clients — RestTemplate deprecation] "As of Spring Framework 7.0, `RestTemplate` is deprecated in favor of `RestClient` and will be removed in a future version, please use the [\"Migrating to RestClient\"] guide." > [§REST Clients — RestClient] "For asynchronous and streaming scenarios, consider the reactive [WebClient]." > [§RestTemplate Javadoc — NOTE] "NOTE: As of 6.1, `RestClient` offers a more modern API for synchronous HTTP access. For asynchronous and streaming scenarios, consider the reactive `WebClient`." > [§RestTemplate Javadoc] "RestTemplate and RestClient share the same infrastructure (i.e. request factories, request interceptors and initializers, message converters, etc.), so any improvements made therein are shared as well." > [§RestTemplate Javadoc] "However, `RestClient` is the focus for new higher-level features." ## Claims Extracted / 추출된 주장 | Claim ID | Claim (이 자료가 직접 말하는 것) | Evidence quote | Strength | Applies to | Does not prove | |---|---|---|---|---|---| | RESTCLIENT-C1 | RestClient 는 **synchronous HTTP client** 이며 fluent API 와 HTTP library 추상화 + Java object 변환을 제공 | [§REST Clients — RestClient] "RestClient is a synchronous HTTP client that provides a fluent API to perform requests. It serves as an abstraction over HTTP libraries, and handles conversion of HTTP request and response content to and from higher level Java objects." | `official-vendor-doc` | Spring Framework 6.1+ sync HTTP 사용 | "sync" 가 단일 thread / blocking I/O 의 모든 detail (예: virtual thread 호환) 을 의미한다는 뜻은 아님 | | RESTCLIENT-C2 | Spring Framework 가 공식으로 제공하는 REST endpoint 호출 선택지는 **2개** — `RestClient` (sync) 와 `WebClient` (non-blocking, reactive) | [§Choices] "The Spring Framework provides the following choices for making calls to REST endpoints:" + "RestClient — synchronous client with a fluent API" + "WebClient — non-blocking, reactive client with fluent API" | `official-vendor-doc` | Spring Framework 7.0+ 신규 코드 권장 | RestTemplate 가 사용 불가하다는 뜻은 아님 — deprecated 이지만 존재 | | RESTCLIENT-C3 | **Spring Framework 7.0 에서 RestTemplate 는 deprecated** 되었으며, 향후 버전에서 제거 예정. RestClient 가 권장 마이그레이션 경로 | [§REST Clients — RestTemplate deprecation] "As of Spring Framework 7.0, `RestTemplate` is deprecated in favor of `RestClient` and will be removed in a future version" | `official-vendor-doc` | Spring Framework 7.0+ 환경 | 6.1 ~ 6.x 에서 RestTemplate 가 동일하게 deprecated 라는 뜻은 아님 (Javadoc 은 "maintenance" 뉘앙스의 NOTE 사용) | | RESTCLIENT-C4 | RestTemplate Javadoc 은 **"As of 6.1, `RestClient` offers a more modern API for synchronous HTTP access"** 를 명시하며, async/streaming 은 reactive WebClient 권장 | [§RestTemplate Javadoc — NOTE] "NOTE: As of 6.1, `RestClient` offers a more modern API for synchronous HTTP access. For asynchronous and streaming scenarios, consider the reactive `WebClient`." | `official-vendor-doc` | Spring Framework 6.1+ 마이그레이션 판단 | Javadoc 의 "more modern" 이 자동 마이그레이션 가능을 의미하는 뜻은 아님 — API 차이 존재 | | RESTCLIENT-C5 | RestTemplate 와 RestClient 는 **같은 infrastructure 공유** (request factory / interceptor / initializer / message converter) — 양쪽 개선이 공유됨 | [§RestTemplate Javadoc] "RestTemplate and RestClient share the same infrastructure (i.e. request factories, request interceptors and initializers, message converters, etc.), so any improvements made therein are shared as well." | `official-vendor-doc` | RestClient 마이그레이션 시 기존 ClientHttpRequestFactory / ClientHttpRequestInterceptor 재사용 | 두 API 의 시그니처가 동일하다는 뜻은 아님 — 호출 패턴 (fluent vs imperative) 이 다름 | | RESTCLIENT-C6 | **RestClient 가 새로운 higher-level feature 의 focus** — RestTemplate 는 신규 기능 대상 아님 | [§RestTemplate Javadoc] "However, `RestClient` is the focus for new higher-level features." | `official-vendor-doc` | 향후 Spring HTTP client 기능 의존도 판단 | "RestTemplate 신규 기능 0개" 라는 뜻은 아님 — 명시는 focus shift | | RESTCLIENT-C7 | reference 는 async/streaming 시나리오에서 reactive WebClient 사용을 권장 | [§REST Clients — RestClient] "For asynchronous and streaming scenarios, consider the reactive [WebClient]." | `official-vendor-doc` | sync vs reactive 분기 판단 | WebClient 가 모든 sync 환경에서 우월하다는 뜻은 아님 — [[outbound-webclient-vs-restclient-spring]] 의 `block()` 위험 별도 | ## Usage Boundaries / 적용 경계 - **이 자료가 직접 증명하는 것**: - `RESTCLIENT-C1` ~ `C7`: RestClient 정의, Spring 의 공식 2-선택지, 7.0 deprecation, 6.1 NOTE, 공유 infrastructure, focus shift, async/streaming → WebClient 권장 - **이 자료가 증명하지 않는 것**: - "As of 6.1, `RestTemplate` is in maintenance mode" 라는 **정확한 문구** — Framework 7.0.7 reference 페이지에는 "deprecated" 사용 (`RESTCLIENT-C3`), Javadoc 에는 "As of 6.1, `RestClient` offers a more modern API" 사용 (`RESTCLIENT-C4`). "maintenance mode" 라는 **문구 자체** 는 본 두 출처에서 확인 안 됨 — 이전 메모는 표현 변경된 인용 - timeout 설정의 정확한 API (`JdkClientHttpRequestFactory` / `ReactorClientHttpRequestFactory` / `setConnectTimeout` / `setReadTimeout` / Duration) — 본 인용 범위 밖, 별도 페이지 확인 필요 - `DefaultResponseErrorHandler` 의 4xx → `HttpClientErrorException` / 5xx → `HttpServerErrorException` 매핑 동작 — 본 인용 범위 밖 - **내 프로젝트에 적용하려면 추가 확인이 필요한 것**: - ca-tmpl 의 timeout 정책 (connect 2s / read 5s / call 10s) 을 RestClient 에 적용하는 정확한 builder 코드 - error mapper 에서 `DEPENDENCY_*` 코드 변환 시 `ResponseErrorHandler` vs `onStatus` 의 선택 - Spring Boot 3.x 의 RestClient auto-configuration (`RestClient.Builder` Bean 노출 여부) ## 메모 / Notes (내 프로젝트 해석) > 본 섹션은 자료 직접 인용 아님. ca-tmpl 결정 컨텍스트 해석. - 세 client 의 위치 (Spring 7.0 기준, `RESTCLIENT-C3` + 6.1 NOTE 결합): - `RestTemplate` — **deprecated as of 7.0** (`RESTCLIENT-C3`). 신규 코드 권장 X. - `RestClient` — **sync 표준** (`RESTCLIENT-C2`, `C4`, `C6`). 신규 코드 default. - `WebClient` — async/streaming/reactive 필요할 때 (`RESTCLIENT-C7`). - ca-tmpl 결정과의 매핑 (해석): - "기본 outbound HTTP 는 RestClient" ← Spring 공식 권장과 일치 (`RESTCLIENT-C4`). - "WebClient 는 별도 extension 문서" ← reactive 를 baseline 에 강제하지 않음 (`RESTCLIENT-C2` 의 2-선택지를 환경에 맞춰 분기). - "provider SDK bypassing mapper forbidden" ← RestClient 의 `RequestInterceptor` / `ResponseErrorHandler` chain 을 강제 경유 (`RESTCLIENT-C5` 의 infrastructure 공유 사실 기반 가정). - timeout 설정 (ca-tmpl: connect 2s / read 5s / call 10s) 적용 방법 (해석 — 별도 출처 검증 필요): - Spring Boot 3.x: `ClientHttpRequestFactory` 에 `JdkClientHttpRequestFactory` 또는 `ReactorClientHttpRequestFactory` 사용. - `RestClient.builder().requestFactory(factory)` + factory 의 `setConnectTimeout` / `setReadTimeout`. "call timeout" 은 `JdkClientHttpRequestFactory` + `HttpClient` Duration 으로 별도 설정. - 오류 매핑 (해석 — 별도 출처 검증 필요): - 기본 `DefaultResponseErrorHandler` 는 4xx → `HttpClientErrorException`, 5xx → `HttpServerErrorException`. ca-tmpl error mapper 에서 `DEPENDENCY_*` 코드로 변환해야 함. - 시사점: RestClient 선택은 **공식 deprecation 정책과 일치**. RestTemplate 를 baseline 으로 두면 ca-tmpl 이 deprecated 위에 서는 문제 발생. ## Related / 관련 - 같은 주제 다른 official-doc: - [[raw/official-docs/outbound-webclient-vs-restclient-spring]] — sync baseline vs reactive 선택의 별도 출처 - [[raw/official-docs/outbound-openfeign-declarative-client]] — declarative 대안 배제 근거 - [[raw/official-docs/outbound-resilience4j-vs-spring-retry]] — retry/circuit breaker library 비교 - 같은 주제 company-tech-blog: - [[raw/company-tech-blogs/outbound-stripe-rate-limit-retry-engineering]] — Stripe retry/backoff/idempotency 사례 - 인용하는 branch: - [[raw/branch-notes/feature-outbound-http-client-baseline]] - [[raw/branch-notes/feature-integration-adapter-templates]] - 인용하는 wiki: (미작성)