본문 바로가기

좋아하는 것_매직IT/1.spring

Spring 관련 간단한 HTTP 연동 로직 구현및 설명 깔끔하게 정리하기

반응형

# 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 하고 있습니다. 



이상입니다.

728x90
300x250