[TIL] Java record, HttpClient / HttpRequest / HttpRes…

2025-03-09 TIL

📝 TIL (Today I Learned)
🔗 원본 이슈: #25
📅 작성일: 2025-03-09
🔄 최종 수정: 2025년 04월 08일


🍀 새롭게 배운 것

  • Java record -> 블로그 정리
  • HttpClient, HttpRequest, HttpResponse

✅ Java에서 HttpClient, HttpRequest, HttpResponse 활용법과 차이점

Java에서는 HTTP 요청을 보내고 응답을 받기 위해 java.net.http 패키지의 HttpClient, HttpRequest, HttpResponse 를 사용합니다.
(Java 11 이상에서 사용 가능)


1️⃣ HttpClient, HttpRequest, HttpResponse 개념 및 차이점

클래스역할특징
HttpClientHTTP 요청을 보내는 역할클라이언트 설정, 요청 실행 (send())
HttpRequestHTTP 요청을 정의하는 객체URL, HTTP 메서드 (GET, POST 등), 헤더 설정
HttpResponseHTTP 응답을 담는 객체서버의 응답 코드, 응답 본문, 헤더 저장

2️⃣ 기본 사용법

🔹 HttpClient를 사용한 GET 요청 예제

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class HttpClientExample {
    public static void main(String[] args) throws Exception {
        // 1️⃣ HttpClient 생성
        HttpClient client = HttpClient.newHttpClient();

        // 2️⃣ HttpRequest 생성 (GET 요청)
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://jsonplaceholder.typicode.com/posts/1"))
                .GET()
                .build();

        // 3️⃣ HttpResponse 받기 (동기 방식)
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

        // 4️⃣ 응답 출력
        System.out.println("응답 코드: " + response.statusCode());
        System.out.println("응답 본문: " + response.body());
    }
}

📌 실행 결과 (예시)

응답 코드: 200
응답 본문: {
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body": "quia et suscipit..."
}

3️⃣ HttpClient, HttpRequest, HttpResponse의 주요 기능

✅ 1. HttpClient: HTTP 요청을 보내는 역할

  • HttpClient.newHttpClient() → 기본 HttpClient 생성
  • HttpClient.newBuilder() → 사용자 정의 설정 가능 (타임아웃, 인증 등)
  • send(request, BodyHandlers.ofString()) → 동기 요청
  • sendAsync(request, BodyHandlers.ofString()) → 비동기 요청

✅ 2. HttpRequest: HTTP 요청 정의

  • .uri(URI.create("URL")) → 요청할 URL 지정
  • .GET() / .POST() / .PUT() / .DELETE() → HTTP 메서드 설정
  • .header("Header-Name", "value") → 헤더 추가
  • .timeout(Duration.ofSeconds(10)) → 요청 제한 시간 설정

🚀 정리

  • 간단한 요청: send()
  • 비동기 요청: sendAsync()
  • JSON 데이터 전송: POST(BodyPublishers.ofString(json))
  • 응답 핸들링: response.statusCode(), response.body()

🐬 깃블로그 정리