[SpringBoot] 외부 API 연동하기 (RestTemplate, RestClient, WebClient, OpenFeign)

2026. 1. 28. 16:56·공부/Spring

➕ 부족한 내용 추후 추가 예정


 

API(Application Programming Interface)

소프트웨어 애플리케이션끼리 서로 소통하고 상호작용하기 위해 정의된 규약이나 프로토콜.

다양한 형태로 존재할 수 있으며 주로 웹 서비스, 운영체제, 라이브러리, 또는 다른 소프트웨어에 대한 접근 방법으로 사용된다.

 

🔍 API 활용의 효과

1. 데이터 교환

다른 소프트웨어와 데이터를 교환할 수 있는 방법을 제공한다. API를 제공하는 프로그램에 API로 연결하면 데이터를 공유, 처리 또는 조작을 할 수 있다. 송금 서비스 앱인 토스는 데이터 교환 API를 이용해서 한 개인의 계좌 및 카드 내역 정보를 앱 내에서 확인할 수 있게 한다.

 

2. 다른 소프트웨어의 기능 실행

다른 소프트웨어의 기능을 호출하고 실행할 수 있는 방법을 제공한다. 이를 활용하여 애플리케이션은 다른 애플리케이션의 기능을 활용하여 복잡한 작업을 간편하게 수행할 수 있다. 결제가 필요한 애플리케이션에서 카카오페이, 네이버페이 및 PG사의 결제 서비스의 API를 활용하여 결제 시스템을 구축한 사례를 많이 볼 수 있다.


3. 서비스 접근

웹 서비스나 클라우드 서비스에 접근할 수 있는 방법을 제공. 이를 통해 개발자는 다양한 서비스를 사용하여 애플리케이션 기능을 간편하게 확장할 수 있고, 성능을 개선할 수 있다. 클라우드 서비스의 시장 점유율이 가장 높은 AWS는 API로 제공하는 서비스를 액세스할 수 있게 제공하고 있다. 개발자는 AWS API를 이용하여 애플리케이션 서버의 성능을 조절하거나, 데이터 분석 솔루션을 적용하는 등의 작업을 간편하게 할 수 있다.

 

 

외부 API 중에서 오픈 API는 누구나 사용할 수 있도록 공개된 API를 말한다.
오픈 API는 데이터를 표준화하여 외부 소프트웨어 개발자나 사용자가 바로 개발에 활용할 수 있도록 제공되는 개방형 인터페이스이다.
이러한 오픈 API를 활용하면 다양한 서비스나 애플리케이션, 플랫폼을 개발할 수 있으며, API 제공 업체가 정의한 표준 규격에 따라 요청(Request)을 보내고 응답(Response)을 받아 데이터를 활용한다.
따라서 개발 시에는 반드시 해당 업체에서 제공하는 API 문서를 확인하는 것이 중요하다.

 

 

스프링에서 외부 API를 호출하는 방법

개인 플젝을 만드는데 외부 API를 연동해야 해서 방법을 알아보았다.

RestTemplate, RestClient, WebClient, OpenFeign

 

1. RestTemplate

RestTemplate은 Spring 3에서 도입된 외부 API 연동 방식으로, REST 방식의 HTTP 통신을 간편하게 처리할 수 있도록 Spring에서 제공하는 내장 클래스이다.

 

RestTemplate (Spring Framework 7.0.0 API)

Synchronous client to perform HTTP requests, exposing a simple, template method API over underlying HTTP client libraries such as the JDK HttpURLConnection, Apache HttpComponents, and others. RestTemplate offers templates for common scenarios by HTTP metho

docs.spring.io


GET, POST, PUT, DELETE 등의 HTTP 메서드를 직관적인 메서드 호출 방식으로 사용할 수 있어 구현이 쉽다는 장점이 있다.

내부적으로는 Apache HttpClient나 java.net.HttpURLConnection 등의 HTTP 클라이언트를 추상화하여 제공하며, 개발자는 저수준의 HTTP 처리 로직을 직접 구현하지 않아도 된다.

다만 RestTemplate은 동기·블로킹 방식으로 동작하기 때문에, 요청을 보낸 스레드는 응답을 받을 때까지 대기하게 된다.
이로 인해 대용량 트래픽이나 비동기 처리가 필요한 환경에서는 성능 및 확장성에 한계가 있다.

현재는 유지보수 모드에 있으며, Spring에서는 비동기·논블로킹 기반의 WebClient 사용을 권장하고 있다.

 

 

2. RestClient

스프링 부트 3.2 (Spring Framework 6) 부터 새롭게 추가된 RestClient는 요청을 수행하기 위한 직관적인 API를 제공하는 동기식 HTTP 클라이언트이다.
기존의 저수준 HTTP 라이브러리 위에 추상화 계층을 형성하여, 개발자가 복잡한 네트워크 처리 로직을 직접 다루지 않도록 돕는다.

 

REST Clients :: Spring Framework

You can define an HTTP Service as a Java interface with @HttpExchange methods, and use HttpServiceProxyFactory to create a client proxy from it for remote access over HTTP via RestClient, WebClient, or RestTemplate. On the server side, an @Controller class

docs.spring.io

 

HTTP 요청과 응답을 처리하는 과정에서 JSON, XML 등의 HTTP 메시지 콘텐츠를 상위 수준의 Java 객체로 변환하거나,
반대로 Java 객체를 HTTP 요청 바디로 변환하는 역할을 수행한다.

기존 RestTemplate의 사용 방식과 유사하면서도 더 현대적인 API 설계를 제공하며, 동기 방식의 HTTP 호출이 필요한 경우 간결하고 가독성 높은 코드 작성이 가능하다.

다만 RestClient 역시 동기 방식(blocking)으로 동작하기 때문에, 대규모 트래픽 처리나 비동기·논블로킹 환경이 필요한 경우에는 WebClient 사용을 고려하는 것이 적절하다.

 

 

3. WebClient

spring 5.0에서 부터 등장한 HTTP 클라이언트 라이브러리로,  비동기/논블로킹 방식으로 외부 API를 호출한다.

spring에서 다른 서버와 통신을 하기 위해서는 restTemplate를 사용하고는 했는데 webClient가 등장한 이후로는 webClient의 사용을 권장한다.

 

비동기/논블로킹 방식을 지원하여 높은 처리량과 확장성을 제공한다.
요청을 보낸 후 응답을 받을 때까지 스레드가 대기하지 않기 때문에, 동일한 자원으로 더 많은 요청을 처리할 수 있다.
이러한 non-blocking 구조로 인해 대용량 트래픽 처리에 유리하며, 시스템 확장성 확보할 수 있다.
또한 리액티브 프로그래밍을 지원하여 데이터 스트림을 효율적으로 처리할 수 있다.

 

 

WebClient (Spring Framework 7.0.0 API)

post

docs.spring.io

 

 

WebClient를 사용하기 위해 의존성을 추가해야 한다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
}

 

 

 

 

4. OpenFeign

 Netflix에 의해 처음 만들어진 Declarative(선언적인) HTTP Client 도구로써, 외부 API 호출을 쉽게할 수 있도록 도와준다. 

여기서 선언적이라는 의미는 구현 코드를 직접 작성하지 않고, 인터페이스에 어노테이션만 선언하면 HTTP 클라이언트가 자동으로 구현된다는 뜻이다. 이 방식은 Spring Data JPA의 Repository 패턴과 유사하여, 상당히 직관적이고 생산성이 높은 개발을 가능하게 한다.

 

 

Spring Cloud OpenFeign

Feign is a declarative web service client. It makes writing web service clients easier. To use Feign create an interface and annotate it. It has pluggable annotation support including Feign annotations and JAX-RS annotations. Feign also supports pluggable

docs.spring.io

 

    • 인터페이스와 어노테이션만으로 HTTP API 클라이언트를 작성할 수 있다.
    • @RequestMapping, @PathVariable, @RequestParam 등 스프링 MVC 어노테이션을 그대로 사용할 수 있다.
    • 인터셉터, 디코더, 인코더 등을 커스터마이징할 수 있다.
    • Ribbon과 통합되어 클라이언트 사이드 로드 밸런싱을 지원한다.
    • Hystrix/Resilience4j와 통합하여 장애 허용 패턴을 구현할 수 있다.

* Ribbon : 클라우드 환경에서 검증된 클라이언트 측 IPC 라이브러리 (부하 분산, 내결함성, 비동기 및 반응형 모델에서 여러 프로토콜(HTTP, TCP, UDP)을 지원, 캐싱 및 배치 처리와 같은 기능 제공)
* 로드밸런싱 : 같은 기능을 하는 서버가 여러 대 있을 때, 요청을 골고루 나눠서 보내는 것

※ Hystrix vs Resilience4j

 

Spring Cloud 초창기에는 Netflix Hystrix가 표준으로 사용되었으나, 현재는 Resilience4j가 권장된다.

비교 항목 Hystrix Resilience4j
지원 상태 Netflix에서 지원 종료 현재 Spring 공식 권장
구현 방식 Thread/Signal 기반 (Heavy) Functional Interface 기반 (Lightweight)
성능 상대적으로 높은 오버헤드 비동기·반응형 환경에 적합
통합성 Spring Cloud Netflix Spring Boot 2.x/3.x 완전 호환

 

따라서, 신규 프로젝트나 Spring Boot 2.x 이상 환경에서는 Resilience4j 사용을 권장한다.

 

 

🔍 RestTemplate / RestClient / WebClient / OpenFeign 비교 


구분
방식 동기/비동기 특징 추천 상황
RestTemplate 명령형 동기 가장 단순, 유지관리 모드 학습용 / 기존 코드
RestClient 명령형 동기 최신 API, 직관적 단순 외부 호출
WebClient 리액티브 비동기 논블로킹, 고성능 대량 트래픽
OpenFeign 선언형 동기 인터페이스 기반 MSA / API 많을 때

 

 

👇🏻추가로 외부 API를 연동할 때 고려하면 좋을 점

https://dkswnkk.tistory.com/742

 

외부 API를 연동할 때 고려하면 좋은 점들

개요최근 프로젝트에서 외부 API를 연동하는 일이 굉장히 많았었는데, 작업하면서 얻은 다양한 경험과 지식을 공유하고자 작성하게 되었습니다. 피드백은 언제든 환영이며 댓글 남겨주시면 감

dkswnkk.tistory.com

 

 

 

 

 

📍참조

https://docs.spring.io/spring-framework/reference/integration/rest-clients.html

https://www.elancer.co.kr/blog/detail/199

https://swmobenz.tistory.com/33

https://jforj.tistory.com/319#google_vignette

https://dev-ignuy.tistory.com/44

https://m.blog.naver.com/seek316/223327989579

https://ittrue.tistory.com/568#google_vignette

https://mangkyu.tistory.com/278

https://adjh54.tistory.com/616#hELLO

https://github.com/Netflix/ribbon

https://hoilog.tistory.com/413

 

 

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'공부 > Spring' 카테고리의 다른 글

[SpringBoot] Thymeleaf 타임리프  (0) 2026.01.07
[스프링 부트 핵심 가이드] 유효성 검사와 예외 처리_예외 처리  (0) 2025.12.01
[스프링 부트 핵심 가이드] 유효성 검사와 예외 처리_유효성 검사  (0) 2025.11.29
[스프링 부트 핵심 가이드] Spring Data JPA 활용  (0) 2025.11.20
[스프링 부트 핵심 가이드] 테스트 코드 작성  (0) 2025.11.18
'공부/Spring' 카테고리의 다른 글
  • [SpringBoot] Thymeleaf 타임리프
  • [스프링 부트 핵심 가이드] 유효성 검사와 예외 처리_예외 처리
  • [스프링 부트 핵심 가이드] 유효성 검사와 예외 처리_유효성 검사
  • [스프링 부트 핵심 가이드] Spring Data JPA 활용
amying
amying
공부해보겠슨
  • amying
    꽁꽁 얼어붙은 자바 위를 자박자박
    amying
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (332)
      • 공부 (55)
        • JAVA (17)
        • Spring (17)
        • Java Script (1)
        • React (0)
        • SQL (3)
        • DB (1)
        • CS (13)
        • 기술면접 (3)
      • Git (2)
      • 강의 (36)
        • 부스트코스: Connect On: 테크와 나를 잇.. (16)
        • 부스트코스: CS50 (20)
      • 네이버 부스트캠프 베이직 (25. 06) (0)
      • 에러 (10)
      • 코테 (205)
        • 백준 (29)
        • 프로그래머스 JAVA Lv.0 (116)
        • 프로그래머스 JAVA Lv.1 (7)
        • 프로그래머스 SQL (53)
      • 개인 프로젝트 (16)
        • 책첵 CHAEKCHECK (2)
        • 일정 관리 서비스 만들기 (0)
        • 게시판 만들기 (eclipse-JSP) (14)
      • 이것저것 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    데이터연동
    git명령어
    Java
    알고리즘
    부스트코스
    부스트코스강의
    CS50
    lombok
    오라클에러
    springbot
    에러
    프로그래머스
    업무자동화
    코테
    코딩테스트_입문
    ORACLE에러
    책첵개발일지
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
amying
[SpringBoot] 외부 API 연동하기 (RestTemplate, RestClient, WebClient, OpenFeign)
상단으로

티스토리툴바