# Spring HTTP 연동 Example
HTTP 연동로직 예시
@Service
@Slf4j
@RequiredArgsConstructor
public class UnsafeLogService {
private final RestTemplate restTemplate;
@Value("${tech.unsafe.api.host}")
private String host;
@Value("${tech.unsafe.api.unsafe-log-uri}")
private String logUri;
@Value("${tech.unsafe.api.unsafe-log-count-uri}")
private String logCountUri;
public UnsafeLogDetailDto getUnsafeLogDetail(String utteranceId) {
HttpHeaders headers = new HttpHeaders();
HttpEntity<?> request = new HttpEntity<>(headers);
UriComponents baseUri = UriComponentsBuilder.fromUriString(host + logUri + "/" + utteranceId)
.build();
ResponseEntity<UnsafeLogDetailResponse> result = restTemplate.exchange(baseUri.toString(), HttpMethod.GET, request, UnsafeLogDetailResponse.class);
UnsafeLogDetailResponse body = result.getBody();
if (body == null) throw new InternalServerException();
return new UnsafeLogDetailDto(body);
}
# getUnsafeLogDetail 함수 내용 설명
HttpHeaders 깔끔하게 정리하기
HttpHeaders 는 HTTP Header를 구성해 준다.
HttpEntity 깔끔하게 정리하기
HttpEntity 는 HTTP Header 와 Body 를 조합해주지만, 여기서는 GET 방식이므로...Body 는 존재하지 않는다.
UriComponents 깔끔하게 정리하기
URI를 동적으로 생성해준다.
파라미터가 조합된 URI를 손쉽게 만들어 주는 역할을 해서 코드상에 직접 문자열을 조합할때 생기는 실수들을 미연에 방지할 수 있다.
RestTemplate 깔끔하게 정리하기
참고로, REST 서비스의 호출 방법는 아래와 같이 크게 3가지로 구분된다.
RestTemplate
- Spring 3부터 지원, REST API 호출이후 응답을 받을 때까지 기다리는 동기 방식이다.
AsyncRestTemplate
- Spring 4에 추가된 비동기 RestTemplate이다.
WebClient
- Spring 5에 추가된 논블럭, 리엑티브 웹 클라이언트로 동기, 비동기 방식을 지원한다.
그중에 지금 소스에서 다루고 있는 RestTemplate에서 좀더 알아보면...
- 하나, spring 3.0 부터 지원함.
- 둘, 스프링에서 제공하는 http 통신에 유용하게 쓸 수 있는 템플릿이다.
- 셋, HTTP 서버와의 통신을 단순화하고 RESTful 원칙을 지킨다.(즉, json, xml을 쉽게 응답 받을수 있음, 꿀!! )
(참고로, C++ 은 직접 구현해야함;;;;; 물론 요즘들어 C++ 도 좋은 라이브러리가 많아져서 다행임..^^;)
exchange 메소드를 사용해서, HTTP 패킷을 전송하고..
해당 호출 결과로 http status code, 헤더 정보, 실제 데이터가 존재하는 body정보를 확인 할 수 있습니다.
여기서는 body 의 데이터를 DTO 에 담아서 return 하고 있습니다.
이상입니다.
'좋아하는 것_매직IT > 1.spring' 카테고리의 다른 글
querydsl 관련 자주 사용하는 fetch 깔끔하게 정리하기 (0) | 2022.05.13 |
---|---|
Spring Boot 에서 GSON 라이브러리 활용하기 (0) | 2022.05.05 |
Java serialize(직렬화) 에 대해서 정리하기 (feat. serialVersionUID) (0) | 2022.03.25 |
심플한 템플릿 엔진 머스테치(mustache)를 소개합니다 (0) | 2022.02.09 |
39.Spring, 스프링 클라우드 슬루스관련 로그수집 솔루션 알아보기. (0) | 2021.02.07 |