마이크로서비스 아키텍처
애플리케이션이 가지고 있는 기능(서비스)이 하나의 비즈니스 범위만 가지는 형태를 뜻한다.
서비스의 접근점을 API 형태로 외부에 노출하고 실질적 세부 사항은 모두 추상화한다.
내부의 기술적인 사항은 서비스 API에 의해 가려짐
각각 개별 서비스의 개발 속도 향상 및 유지 보수 용이
MSA를 적용해 다른 기술 스택을 사용해도 연동 가능
내부 시스템의 통신이 복잡하다.
HTTP 통신 기능을 손쉽게 사용하도록 설계된 템플릿
기본적으로 동기 방식이지만 AsyncRestTemplate
사용 시 비동기 방식도 사용 가능
현재 deprecated 상태기 때문에 향후 WebClient 방식으로 사용될 것
1. 애플리케이션에서 RestTemplate
를 선언하고 URI, HTTP 메소드, Body 등 설정
2. 외부 API로 요청을 보내면 HttpMessageConverter
를 통해 RequestEntity를 요청 메세지로 변환
3. RestTemplate
에서 변환된 요청 메시지를 ClientHttpRequestFactory
를 통해 ClientHttpRequest
로 가져온 후 외부 API로 요청 보냄
4. 요청에 대한 응답을 받으면 ResponseErrorHandler
로 오류를 확인하고, 오류가 있다면 ClientResponse
에서 응답 데이터 처리
5. 데이터가 정상적이라면 HttpMessageConverter
를 거쳐 자바 객체로 변환해서 애플리케이션 반환
RestTemplate은 별도 유틸리티 클래스로 생성하거나 서비스, 비즈니스 계층에 구현된다.
UriComponentsBuilder를 사용해 URI 객체를 리턴 받아 RestTemplate이 외부 API를 요청하는 데 사용한다.
스프링 프레임워크에서 제공
여러 파라미터를 연결해서 URI 형식으로 만드는 기능 수행
빌더 형식으로 객체를 생성한다.
서비스와 연결되는 Controller를 만들어 restTemplateService를 호출하면 uri를 통해 외부 API를 불러 작업할 수 있다.
RestTemplate은 기본적으로 커넥션 풀을 지원하지 않아 호출할 때 마다 커넥션을 생성해야한다.
TIME_WAIT 상태가 된 소켓을 다시 사용하려고 접근한다면 재사용하지 못하게 된다.
이를 방지하기 위해 아파치에서 제공하는 HttpClient로 대체해서 사용한다.