Spring Boot (23) 서버 간 통신

넙데데맨·2022년 10월 26일
0

MSA

마이크로서비스 아키텍처

애플리케이션이 가지고 있는 기능(서비스)이 하나의 비즈니스 범위만 가지는 형태를 뜻한다.

특징

API 사용 상호작용

서비스의 접근점을 API 형태로 외부에 노출하고 실질적 세부 사항은 모두 추상화한다.
내부의 기술적인 사항은 서비스 API에 의해 가려짐

각각 서비스의 모듈화

각각 개별 서비스의 개발 속도 향상 및 유지 보수 용이

팀 단위로 기술 스택을 다르게 가져갈 수 있다.

MSA를 적용해 다른 기술 스택을 사용해도 연동 가능

서비스 분산

내부 시스템의 통신이 복잡하다.

통합 테스트의 어려움

RestTemplate

HTTP 통신 기능을 손쉽게 사용하도록 설계된 템플릿
기본적으로 동기 방식이지만 AsyncRestTemplate 사용 시 비동기 방식도 사용 가능
현재 deprecated 상태기 때문에 향후 WebClient 방식으로 사용될 것

특징

  • HTTP 프로토콜의 메소드에 맞는 여러 메소드 제공
  • RESTful 형식 갖춘 템플릿
  • HTTP 요청 후 JSON, XML, 문자열 등 다양한 형식 응답
  • blocking I/O 기반 동기 방식 사용
  • 다른 API 호출 시 HTTP 헤더에 다양한 값을 설정할 수 있음

동작 원리


1. 애플리케이션에서 RestTemplate를 선언하고 URI, HTTP 메소드, Body 등 설정
2. 외부 API로 요청을 보내면 HttpMessageConverter를 통해 RequestEntity를 요청 메세지로 변환
3. RestTemplate에서 변환된 요청 메시지를 ClientHttpRequestFactory를 통해 ClientHttpRequest로 가져온 후 외부 API로 요청 보냄
4. 요청에 대한 응답을 받으면 ResponseErrorHandler로 오류를 확인하고, 오류가 있다면 ClientResponse에서 응답 데이터 처리
5. 데이터가 정상적이라면 HttpMessageConverter를 거쳐 자바 객체로 변환해서 애플리케이션 반환

대표 메소드

구현

RestTemplate은 별도 유틸리티 클래스로 생성하거나 서비스, 비즈니스 계층에 구현된다.

RestTemplate 구현

UriComponentsBuilder를 사용해 URI 객체를 리턴 받아 RestTemplate이 외부 API를 요청하는 데 사용한다.

UriComponentsBuilder

스프링 프레임워크에서 제공
여러 파라미터를 연결해서 URI 형식으로 만드는 기능 수행
빌더 형식으로 객체를 생성한다.

GET 형식 RestTemplate

  1. UriComponentsBuilder를 사용해 URI 객체에 URI 담기
  2. RestTemplate 객체 생성
  3. RestTemplate 객체의 메소드를 활용해 요청 후 결과 받아오기

POST 형식 RestTemplate

  1. UriComponentsBuilder를 사용해 파라미터 값을 담은 URI 생성(파라미터 값 담기)
  2. 전달할 객체 생성(RequestBody에 값 담기)
  3. RestTemplate 객체 생성
  4. RestTemplate 객체의 메소드를 활용해 요청 후 결과 받아오기

RestTemplateController

서비스와 연결되는 Controller를 만들어 restTemplateService를 호출하면 uri를 통해 외부 API를 불러 작업할 수 있다.

커스텀 설정

RestTemplate은 기본적으로 커넥션 풀을 지원하지 않아 호출할 때 마다 커넥션을 생성해야한다.

TIME_WAIT 상태가 된 소켓을 다시 사용하려고 접근한다면 재사용하지 못하게 된다.

이를 방지하기 위해 아파치에서 제공하는 HttpClient로 대체해서 사용한다.

profile
차근차근

0개의 댓글