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
반응형
'IT > JAVA' 카테고리의 다른 글
| Java의 Spring Framework 개요 (1) | 2025.03.08 |
|---|---|
| Java와 REST API 연동 방법 (1) | 2025.03.07 |
| JDBC를 이용한 데이터베이스 연결 (1) | 2025.03.05 |
| Java 멀티스레딩과 동기화 이해(Multithreading, Synchronization, volatile) (2) | 2025.03.04 |
| Java에서 파일 입출력(IO) 다루기(File, FileReader, FileWriter, BufferedReader, BufferedWriter, FileInputStream, FileOutputStream) (1) | 2025.03.03 |