| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- SpringSecurity
- spring
- 스프링부트
- 자료구조
- 백엔드공부
- 핵심가이드
- 개발자
- ORM
- error
- queue
- restTemplate
- array
- actuator
- TestCode
- 컴퓨터 공학
- spring boot
- 백엔드스쿨
- 서버
- 연관관계
- 백준
- JPA
- 제로베이스
- SpringBoot
- QueryDSL
- JWT
- 프로그래머스
- LinkedList
- 백엔드
- Java
- 컴퓨터 구조
- Today
- Total
be_better
[Springboot] 서버 간 통신 - RestTemplate 소개 본문
목차
최근에 개발되는 서비스들은 마이크로서비스 아키텍처(MSA)를 주로 채택하고 있다. MSA는 말 그대로 애플리케이션이 가지고 있는 기능(서비스)이 하나의 비즈니스 범위만 가지는 형태이다. 각 애플리케이션은 자신이 가진 기능을 API로 외부에 노출하고, 다른 서버가 그러한 API를 호출해서 사용할 수 있게 구성되므로 각 서버가 다른 서버의 클라이언트가 되는 경우도 많다.
RestTemplate이란?
RestTemplate은 스프링에서 HTTP 통신 기능을 손쉽게 사용하도록 설계된 템플릿이다. HTTP 서버와의 통신을 단순화한 이 템플릿을 이용하면 Restful 원칙을 따르는 서비스를 편리하게 만들 수 있다. RestTemplate은 기본적으로 동기 방식으로 처리되며, 비동기 방식으로 사용하고 싶을 경우 AsyncRestTemplate을 사용하면 된다.
다만 RestTemplate은 협업에서 많이 쓰이나 지원 중단된 상태라서 향후 빈번하게 쓰이게 될 WebClient 방식도 함께 알아두어야 한다.
RestTemplate의 특징들은 다음과 같다.
- HTTP 프로토콜의 메서드에 맞는 여러 메서드를 제공한다.
- RESTful 형식을 갖춘 템플릿이다.
- HTTP 요청 후 JSON, XML, 문자열 등의 다양한 형식으로 응답을 받을 수 있다.
- 블로킹(blocking) I/O 기반의 동기 방식을 사용한다.
- 다른 API를 호출할 때 HTTP 헤더에 다양한 값을 설정할 수 있다.
RestTemplate의 동작 원리
RestTemplate의 동작 도식화

1. 애플리케이션은 우리가 직접 작성하는 애플리케이션 코드 구현부를 의미한다. 애플리케이션에서는 RestTemplate을 선언하고 URI와 HTTP 메서드, Body 등을 설정한다.
2. 외부 API로 요청을 보내게 되면 RestTemplate에서 HttpMessageConverter를 통해 RequestEntity를 요청 메시지로 변환한다.
3. RestTemplate에서는 변환된 요청 메시지를 ClientHttpRequestFactory를 통해 ClientHttpRequest로 가져온 후 외부 API로 요청을 보낸다.
4. 외부에서 요청에 대한 응답을 받으면 RestTemplate은 ResponseErrorHandler로 오류를 확인하고, 오류가 있다면 ClientHttpResponse에서 응답 데이터를 처리한다.
5. 받은 응답 데이터가 정상적이라면 다시 한번 HttpMessageConverter를 거쳐 자바 객체로 변환해서 애플리케이션으로 반환한다.
RestTemplate의 대표적인 메서드

'Springboot > 이론' 카테고리의 다른 글
| [Springboot] 서버 간 통신 - WebClient (0) | 2023.11.29 |
|---|---|
| [Springboot] 서버 간 통신 - RestTemplate 사용해보기 (0) | 2023.11.29 |
| [Springboot] 액추에이터 활용하기 - 커스텀 (0) | 2023.11.29 |
| [Springboot] 액추에이터 활용하기 - 액추에이터 기능 (0) | 2023.11.29 |
| [Springboot] 액추에이터 활용하기 - 엔드포인트 (0) | 2023.11.29 |