4개의 HTTP 통신 방법

김동현·2024년 9월 4일

CS 탐험

목록 보기
2/2

서론

springboot에서 HTTP통신하여 오픈API를 사용한다. 이전의 프로젝트에서는 URLConnection만을 사용했었다. 하지만 이 방법말고 다른 방법도 존재했었다. 그 중에서 HTTP통신과 Non-blocking 비동기의 WebFlux의 WebClient가 보여 관심이 갔다. 또한 다른 통신 방법도 신기하여 이번 기회에 정리할 계획이다. 각 장단점을 비교하여 프로젝트에 맞는 통신 방법을 선택해야 겠다.

HTTP 통신

먼저 HTTP 통신에 대해 간략히 알아볼 것이다.
HTTP란 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다.
패킷 통신 방식의 IP와 이 위에서 TCP는 패킷들이 제대로 도착하는지 확인하는 역할하며, TCP/IP를 인터넷 통신 프로토콜의 모음으로 HTTP또한 이 프로토콜에 속한다.

클라이언트-서버 구조로 프론트엔드와 백엔드 사이의 관계를 생각하면 좋을 것 같다.

비연결성(Connectionless)과 무상태(Stateless)라는 특징으로 인해, 클라이언트는 서버에게 각 요청을 보낼 때마다 자신을 인증해야 합니다. (필요 시에)

하지만 최근 HTTP 3.0은 속도가 느린 TCP 보다 UDP를 채택하였다.

이젠 HTTP 통신 방법에 대해 알아보자.

URLConnection

지금까지 사용하고 있는 방식이다. HTTP 통신을 하기위해 자식클래스인 HttpURLConnection 객체를 만들어 통신에 사용했다.
blocking이며 동기적이다.
문제점으로는 http상태코드가 4xx, 5xx 일 경우 에러로 간주하여 IOException이 발생한다. 그리고 헤더 또는 정보들을 직접적으로 주입해줘야 해서 사용이 불편했다.

RestTemplate

Spring에서 제공하는 HTTP 통신을 위한 템플릿 클래스이다.
간편하게 Rest방식 api를 호출할 수 있다.
멀티스레드를 사용하고, blocking이며 동기적이다.
하지만 Spring5 이후 WebClient 방식이 등장하며 deprecated 되었다.

HTTPClient

Java 11부터 제공하며 동기 및 비동기 방식의 HTTP 요청을 지원한다. 기존의
URLConnection과는 다르게 모든 상태코드를 읽을 수 있으며 타임아웃 설정이 가능하고, 쿠키 제어가 가능하다.이에 HttpURLConnection을 대체하는 역할을 한다.
하지만 스트림 처리 로직을 별도로 짜야하고 응답의 컨텐츠타입에 따라 별도 로직이 필요하다.

WebClient

Spring 5.0에서 도입되었다. 싱글스레드이다.
RestTemplate과는 다르게 Non-blocking이며 비동기적이며 리액티브한 HTTP 클라이언트이다.
RESTful API뿐만아니라 웹소켓, HTTP/2, SSE등의 프로토콜을 지원한다.
하지만 비동기적이기에 설계가 어렵다.

결론

HTTP통신 방법에 대해 알아보았다. 방법에 대해 많이 찾아봤지만 구현하지 않는 이상 이론적인 내용만을 학습할 수 밖에 없었다. 진행하고 있는 프로젝트에서는 오픈API를 사용하며 사용자에게 정보를 제공해야 하기에 Non-blocking과 비동기적인 WebClient를 선택하여 사용해야겠다.
Non-blocking은 기다리지 않고 다른 일을 할 수 있는 것이고, 비동기적은 기다리지 않고 나중에 결과를 받는 것이다.
즉, 결과를 기다리는 중에 다른 일을 할 수 있는 서비스를 만드는 것을 목표로 잡아야겠다.

profile
김김동현

0개의 댓글