본문 바로가기
IT/JAVA

Java에서 HTTP 요청 처리하기 (HttpURLConnection)

by ohukohoh 2025. 3. 6.
728x90
반응형

Java에서는 HTTP 요청을 보내고 응답을 처리하는 방법으로 HttpURLConnection 클래스를 사용할 수 있습니다. 이를 이용하면 REST API와 통신하거나 웹에서 데이터를 가져올 수 있습니다.


1. HttpURLConnection 개요

HttpURLConnection이란?

  • Java에서 HTTP 요청을 보내고 응답을 받는 기능을 제공하는 클래스
  • java.net.HttpURLConnection 패키지에서 제공됨
  • GET, POST, PUT, DELETE 등 다양한 HTTP 메서드 지원
  • 외부 라이브러리 없이 기본 JDK로 사용할 수 있음

HttpURLConnection 주요 기능

기능설명

setRequestMethod("GET") HTTP GET 요청 설정
setRequestMethod("POST") HTTP POST 요청 설정
setRequestProperty(String, String) 요청 헤더 설정
getResponseCode() HTTP 응답 코드 확인
getInputStream() 응답 데이터 읽기

2. HTTP GET 요청 보내기

GET 요청은 서버에서 데이터를 가져올 때 사용됩니다.

GET 요청 예제

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpGetExample {
    public static void main(String[] args) {
        try {
            String urlString = "https://jsonplaceholder.typicode.com/posts/1"; // 테스트용 API
            URL url = new URL(urlString);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("User-Agent", "Mozilla/5.0");
            
            int responseCode = conn.getResponseCode();
            System.out.println("응답 코드: " + responseCode);
            
            if (responseCode == HttpURLConnection.HTTP_OK) {
                BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String inputLine;
                StringBuilder response = new StringBuilder();
                
                while ((inputLine = in.readLine()) != null) {
                    response.append(inputLine);
                }
                in.close();
                
                System.out.println("응답 내용: " + response.toString());
            } else {
                System.out.println("요청 실패");
            }
            conn.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

출력 예시:

응답 코드: 200
응답 내용: {"userId": 1, "id": 1, "title": "sample title", "body": "sample body"}

🔹 setRequestMethod("GET")을 사용하여 GET 요청을 보냅니다. 🔹 getInputStream()을 사용하여 응답 데이터를 읽어옵니다.


3. HTTP POST 요청 보내기

POST 요청은 서버에 데이터를 전송할 때 사용됩니다.

POST 요청 예제

import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

public class HttpPostExample {
    public static void main(String[] args) {
        try {
            String urlString = "https://jsonplaceholder.typicode.com/posts";
            URL url = new URL(urlString);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json; utf-8");
            conn.setRequestProperty("Accept", "application/json");
            conn.setDoOutput(true);

            String jsonInputString = "{"title": "foo", "body": "bar", "userId": 1}";
            try (OutputStream os = conn.getOutputStream()) {
                byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8);
                os.write(input, 0, input.length);
            }
            
            int responseCode = conn.getResponseCode();
            System.out.println("응답 코드: " + responseCode);
            
            if (responseCode == HttpURLConnection.HTTP_CREATED) {
                System.out.println("데이터가 성공적으로 전송되었습니다.");
            } else {
                System.out.println("POST 요청 실패");
            }
            conn.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

출력 예시:

응답 코드: 201
데이터가 성공적으로 전송되었습니다.

🔹 setDoOutput(true)를 설정하여 출력 스트림을 활성화합니다. 🔹 OutputStream을 사용하여 JSON 데이터를 전송합니다.


4. HTTP 요청 처리 시 고려할 점

타임아웃 설정

  • 네트워크 지연 또는 서버 응답이 느릴 경우를 대비하여 타임아웃을 설정할 수 있습니다.
conn.setConnectTimeout(5000); // 연결 타임아웃 (5초)
conn.setReadTimeout(5000);    // 읽기 타임아웃 (5초)

응답 코드 체크

  • HTTP 응답 코드를 확인하여 성공 여부를 판단해야 합니다.
int responseCode = conn.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
    System.out.println("요청 성공");
} else {
    System.out.println("요청 실패, 응답 코드: " + responseCode);
}

리소스 해제 (disconnect())

  • HTTP 연결이 끝나면 반드시 연결을 종료해야 합니다.
conn.disconnect();

결론

  • HttpURLConnection을 사용하면 Java에서 쉽게 HTTP 요청을 보낼 수 있습니다.
  • GET 요청: 데이터를 가져올 때 사용 (setRequestMethod("GET"))
  • POST 요청: 데이터를 전송할 때 사용 (setRequestMethod("POST"), setDoOutput(true), OutputStream 활용)
  • 타임아웃 설정 및 응답 코드 체크로 안정적인 네트워크 통신을 구현 가능

HttpURLConnection을 활용하여 웹 API와 상호작용하는 Java 애플리케이션을 개발해 보세요! 🚀

728x90
반응형