📚FOS Study
홈카테고리
홈카테고리

카테고리

  • AI 페이지로 이동
    • RAG 페이지로 이동
    • agents 페이지로 이동
    • custom-agents 페이지로 이동
    • Claude Code의 Skill 시스템 - 개발자를 위한 AI 자동화의 새로운 차원
    • 멀티모달 LLM (Multimodal Large Language Model)
  • architecture 페이지로 이동
    • 디자인 패턴
    • 분산 트랜잭션
    • 슬롯 게임 엔진 고도화 — 2025년 회고
  • css 페이지로 이동
    • FlexBox 페이지로 이동
  • database 페이지로 이동
    • mysql 페이지로 이동
    • opensearch 페이지로 이동
    • 김영한의-실전-데이터베이스-설계 페이지로 이동
    • 커넥션 풀 크기는 얼마나 조정해야할까?
    • 인덱스 - DB 성능 최적화의 핵심
  • devops 페이지로 이동
    • docker 페이지로 이동
    • k8s 페이지로 이동
    • k8s-in-action 페이지로 이동
    • monitoring 페이지로 이동
  • go 페이지로 이동
    • Go 언어 기본 학습
  • http 페이지로 이동
    • HTTP Connection Pool
  • interview 페이지로 이동
    • 210812 페이지로 이동
    • 뱅크샐러드 AI Native Server Engineer
    • CJ 올리브영 지원 문항
    • CJ 올리브영 커머스플랫폼유닛 Back-End 개발 지원 자료
    • 마이리얼트립 - Platform Solutions실 회원주문개발 Product Engineer
    • NHN 서비스개발센터 AI서비스개발팀
    • nhn gameenvil console backend 직무 인터뷰 준비
    • 면접을 대비해봅시다
    • Tossplace Node.js Developer
    • 토스플레이스 Node.js 백엔드 컬처핏
  • java 페이지로 이동
    • jdbc 페이지로 이동
    • opentelemetry 페이지로 이동
    • spring 페이지로 이동
    • spring-batch 페이지로 이동
    • Java의 로깅 환경
    • MDC (Mapped Diagnostic Context)
    • OpenTelemetry 란 무엇인가?
    • Virtual Thread와 Project Loom
  • javascript 페이지로 이동
    • Data_Structures_and_Algorithms 페이지로 이동
    • Heap 페이지로 이동
    • typescript 페이지로 이동
    • AbortController
    • Async Iterator와 제너레이터
    • CommonJS와 ECMAScript Modules
    • 제너레이터(Generator)
    • Http Client
    • Node.js
    • npm vs pnpm 선택기준은 무엇인가요?
    • `setImmediate()`
  • kafka 페이지로 이동
    • Kafka 기본
    • Kafka를 사용하여 **데이터 정합성**은 어떻게 유지해야 할까?
    • 메시지 전송 신뢰성
  • network 페이지로 이동
    • L2(스위치)와 L3(라우터)의 역할 차이
    • L4와 VIP(Virtual IP Address)
    • IP Subnet
  • react 페이지로 이동
    • JSX 페이지로 이동
    • VirtualDOM 페이지로 이동
    • v16 페이지로 이동
  • redis 페이지로 이동
    • Redis
    • Redis Hash와 Lua 스크립트로 잭팟 누적 구현하기
  • task 페이지로 이동
    • ai-service-team 페이지로 이동
    • nsc-slot 페이지로 이동
📚FOS Study

개발 학습 기록을 정리하는 블로그입니다.

바로가기

  • 홈
  • 카테고리

소셜

  • GitHub
  • Source Repository

© 2025 FOS Study. Built with Next.js & Tailwind CSS

목록으로 돌아가기
☕java/ spring

RestClient

약 2분
2026년 2월 25일
2026년 3월 22일 수정
GitHub에서 보기

RestClient

  • 스프링 부트 3.2에서 새롭게 도입
  • RestTemplate이나 WebClient를 사용했을 텐데 RestClient로 그 간극을 메워줄 수 있다.

1. RestClient란 무엇인가?

  • RestClient란 동기식(Synchronous) API 호출을 위한 현대적인 인터페이스
  • 기존 RestTemplate의 고질적인 문제인 "지나치게 많은 오버로딩 메서드"와 WebClient의 장점인 "Fluent API(체이닝)" 방식을 결합함
    • 동기 방식 : RestTemplate 처럼 블로킹 방식으로 동작
    • 현대적 문법 : WebClient 처럼 .get(), uri(), retrieve() 형태로 가독성 좋게 코드를 짤 수 있음
    • Spring Boot 3.2+ : 최신 버전 프로젝트라면 이제 RestTemplate 대신 권장되는 선택지

2. 기본적으로 어떤 HTTP Client를 사용하는가?

  • 실제 통신은 하위의 ClientHttpREquestFactory가 담당하는 추상화 구조를 가짐
  • 기본 라이브러리
    • 따로 설정을 하지 않는다면, **JDK의 표준 HttpURLConnection**을 사용함
    • 하지만 이는 커넥션 풀링 같은 고급 기능을 지원하지 않아 운영 환경에서는 보통 교체해서 사용함
  • 라이브러리 감지 및 자동 설정
    • Spring Boot는 클래스패스에 어떤 라이브러리가 있느냐에 따라 우선순위를 두고 라이브러리를 선택
    • Apache HttpClient 5 : 클래스패스에 있으면 최우선으로 사용 (가장 많이 쓰이는 옵션)
      • HttpComponentsClientHttpRequestFactory
    • Jetty HttpClient : Apache가 없고 Jetty가 있으면 사용
    • Reactor Netty : WebFlux 환경일 떄 주료 사용
    • JDK HttpClient : Java 11 이상에서 제공하는 표준 클라이언트를 명시적으로 설정할 수 있음

3. Apache HttpClient 5를 사용하면 좋은 이유?

  • Connection Pooling : 매 요청마다 연걸을 맺고 끊는 오버헤드를 줄임
  • Keep-Alive 전략 : 서버와의 연결 유지 시간을 정교하게 제어
  • Retry 전략 : 네트워크 일시 오류 시 재시도 로직을 태울 수 있음
java 카테고리의 다른 글 보기수정 제안하기

댓글

댓글을 불러오는 중...
목차
  • RestClient
  • 1. RestClient란 무엇인가?
  • 2. 기본적으로 어떤 HTTP Client를 사용하는가?
  • 3. Apache HttpClient 5를 사용하면 좋은 이유?