SMALL
정의
RestTemplate은 Spring에서 제공하는 Http Client
REST 서비스를 호출하는 복잡한 과정을 단순한 방식으로 만들어 주는 클래스
( 기계적이고 반복적인 코드를 깔끔하게 만들 수 있도록 도와준다)
Http Client 종류
RestTemplate 뿐만 아니고 다른 종류의 Http Client가 존재하는데 각각의 특징을 간단하게 알아보자.
- RestTemplate
- Spring 3.0에서부터 지원
- REST API 호출 후, 응답을 받을 때까지 기다리는 동기 방식
- AsyncRestTemplate
- Spring 4.0에서부터 지원
- 비동기 RestTemplate
- WebClient
- Spring 5.0에서부터 지원
- 논 블록, 리엑티브 웹 클라이언트
- 동기, 비동식 방식 모두 지원
사용법(예시)
Bean 등록
@RequiredArgsConstructor
@Configuration
public class WebConfig {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder
.requestFactory(() ->
new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory())
)
.setConnectTimeout(Duration.ofMillis(5000)) // connection-timeout
.setReadTimeout(Duration.ofMillis(5000)) // read-timeout
.build();
}
}
예시
@RequiredArgsConstructor
@Service
public class RestTestService {
private final RestTemplate template;
private String getLoggerFromActuator(String url) {
ResponseEntity<String> response =
template.getForEntity(url + "/actuator/loggers", String.class);
HttpStatus statusCode = response.getStatusCode(); //상태코드확인
HttpHeaders headers = response.getHeaders(); //헤더정보확인
String body = response.getBody(); //바디정보확인
return body;
}
}
( 각 메서드 별 자세한 예시 : https://advenoh.tistory.com/46 )
RestTemplate 메서드
Connection Pool 사용
기본적으로 제공되는 RestTemplate는 Connection Pool을 사용하지 않는다.
원한다면 추가적인 설정이 필요하다.
Connection Pool이 존재하지 않는다면,
RestTemplate을 호출할 때마다, TCP 소켓을 열고, 3-way hand shaking이 발생하여 성능에 문제가 될 수 있고,
요청량이 많아지게 되면 connection을 재활용할 수 없기 때문에 응답이 지연될 수 있다.
@RequiredArgsConstructor
@Configuration
public class WebConfig {
@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setReadTimeout(5000); // 읽기시간초과, ms
factory.setConnectTimeout(3000); // 연결시간초과, ms
HttpClient httpClient = HttpClientBuilder.create()
.setMaxConnTotal(100) // connection pool 적용
.setMaxConnPerRoute(5)
.build();
factory.setHttpClient(httpClient); // HttpClient 세팅
return new RestTemplate(factory);
}
}
추가 참고 사항
RestTemplate 내부에서는 HttpURLConnection, HttpClient 등을 사용하는데,
해당 클래스들의 대한 내용( https://amagrammer91.tistory.com/65 )
LIST
'Spring > etc' 카테고리의 다른 글
[Spring] Mybatis란, SpringBoot에서 Mybatis 사용해보기 (0) | 2022.05.18 |
---|---|
[Spring] Transaction (Declarative, Programmatic) 관리 (0) | 2022.04.08 |
[Spring] ResponseBodyAdvice 사용 ( + @ControllerAdvice ) (0) | 2022.02.14 |
[Spring] Spring Boot Profile 환경별 설정 (2.4버전) (1) | 2022.01.29 |
[Spring] 설정 파일 분리 및 여러 개 설정하기 (application.yml) (0) | 2022.01.26 |