Java - HttpURLConnection 클래스

서론

안녕하세요, 미래의 자바 마법사 여러분! ? 오늘 우리는 HttpURLConnection의 마법적인 세계로 뛰어들어 보겠습니다. 코드를 한 줄도 작성해 본 적이 없더라도 걱정 마세요 - 이 흥미로운 여정에서 여러분의 친절한 안내자가 되겠습니다. 이 튜토리얼의 끝을 맺을 때까지, 프로처럼 HTTP 요청을 보내는 법을 배우게 될 것입니다!

Java - HttpURLConnection Class

HttpURLConnection은 무엇인가요?

상상해 보세요, 인터넷 상의 다른 컴퓨터들 사이에서 메시지를 전달하는 배달원이신다면. 이게 바로 HttpURLConnection이 하는 일입니다! 이것은 내장된 자바 클래스로, 우리의 프로그램이 웹 서버와 소통하고 요청을 보내고 응답을 받을 수 있도록 도와줍니다.

HttpURLConnection이 필요한 이유

오늘날의 상호 연결된 세상에서, 애플리케이션들은 종종 인터넷을 통해 서로 소통해야 합니다. 날씨 앱을 만들 때 예측 데이터를 가져오거나, 소셜 미디어 클라이언트가 업데이트를 게시할 때, HttpURLConnection은 이러한 웹 상호작용을 처리하는 신뢰할 수 있는 동반자입니다.

시작하기

간단한 예제로 발을 뗄까요:

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

public class SimpleHttpExample {
public static void main(String[] args) {
try {
URL url = new URL("https://api.example.com/greeting");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");

int responseCode = connection.getResponseCode();
System.out.println("응답 코드: " + responseCode);

BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();

System.out.println("응답: " + response.toString());

} catch (Exception e) {
e.printStackTrace();
}
}
}

이제 이를 단계별로 설명해 보겠습니다:

  1. 필요한 클래스를 임포트합니다.
  2. 연결할 주소로 URL 객체를 생성합니다.
  3. url.openConnection()을 사용하여 연결을 여시고 HttpURLConnection으로 캐스팅합니다.
  4. 요청 방법을 "GET"로 설정합니다 (이 후에 더 설명하겠습니다).
  5. 요청을 보내고 응답 코드를 가져옵니다.
  6. 응답 콘텐츠를 줄별로 읽고 StringBuilder에 저장합니다.
  7. 마지막으로 응답을 출력합니다.

HTTP 메서드

우리가 요청 방법을 "GET"로 설정했던 것을 기억하시나요? 사실, 사용할 수 있는 여러 가지 HTTP 메서드가 있습니다. 이 것들은 서버에게 다양한 종류의 질문을 할 수 있는 방법들입니다:

  • GET: "서버야, 정보를 주실 수 있나요?"
  • POST: "서버야, 처리해야 할 정보를 주고 싶어요."
  • PUT: "서버야, 이 기존 정보를 업데이트해 주세요."
  • DELETE: "서버야, 이 정보를 지울 수 있나요?"

다른 메서드를 사용하는 방법을 보겠습니다:

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);

여기서 우리는 POST 요청을 설정하고 출력을 활성화하고 있습니다.

요청 헤더 추가

occasionally, we need to send extra information with our request. We can do this using headers:

connection.setRequestProperty("Content-Type", "application/json");
connection.setRequestProperty("Authorization", "Bearer mytoken123");

이 것은 메시지에 노트를 첨부하여 서버에게 요청에 대한 더 많은 맥락을 제공하는 것과 같습니다.

POST 요청으로 데이터 전송

서버로 데이터를 보내고 싶을 때 (예를 들어 폼 제출), POST 요청을 사용합니다:

String postData = "name=John&age=30";
try (OutputStream os = connection.getOutputStream()) {
byte[] input = postData.getBytes("utf-8");
os.write(input, 0, input.length);
}

이것은 폼을 작성하고 제출 버튼을 누르는 것과 같습니다!

응답 처리

텍스트로 응답을 읽는 방법을 보았지만, 서버가 다른 종류의 데이터를 보내는 경우도 있습니다. JSON 응답을 처리하는 방법을 보겠습니다:

import org.json.JSONObject;

// ... (connection setup code)

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();

JSONObject jsonResponse = new JSONObject(response.toString());
String name = jsonResponse.getString("name");
int age = jsonResponse.getInt("age");

System.out.println("이름: " + name + ", 나이: " + age);

여기서 우리는 JSON 응답을 파싱하고 특정 필드를 추출하고 있습니다. 이것은 패키지를 열고 정확히 필요한 것을 찾는 것과 같습니다!

오류 처리

물론, 인터넷에서는 항상 원활하게 되지 않습니다. 오류를 처리하는 방법을 보겠습니다:

if (connection.getResponseCode() >= 300) {
System.out.println("오류: " + connection.getResponseCode() + " " + connection.getResponseMessage());
InputStream errorStream = connection.getErrorStream();
// 오류 응답을 읽고 처리합니다.
} else {
// 성공적인 응답을 처리합니다.
}

이것은 메시지가 성공적으로 전달되었는지 확인하고, 그렇지 않으면 무엇이 잘못되었는지 파악하는 것과 같습니다.

HttpURLConnection 메서드

여기서 몇 가지 중요한 HttpURLConnection 메서드의 빠른 참조 표를 제공합니다:

메서드 설명
setRequestMethod(String) HTTP 방법 (GET, POST 등) 설정
setRequestProperty(String, String) 요청 헤더 추가
getResponseCode() HTTP 응답 상태 코드 가져오기
getInputStream() 응답을 읽기 위한 입력 스트림 가져오기
getErrorStream() 요청 실패 시 오류 스트림 가져오기
disconnect() 연결 종료

결론

축하합니다! 여러분은 자바의 웹 소통 세계로的第一步을 내딛었습니다. HttpURLConnection은처음에는 복잡해 보일 수 있지만, 연습을 통해 여러분의 프로그래밍 도구箱에서 매우 강력한 도구가 될 것입니다.

기억하세요, 인터넷은 방대한 정보의 바다이며, HttpURLConnection은 여러분이 그것을 탐험할 수 있는 견고한 배입니다. 계속 탐험하고, 계속 연습하면, 곧 웹 요청을 손에 익히게 될 것입니다!

행복한 코딩, 미래의 자바 마스터们! ??‍??‍?

Credits: Image by storyset