안녕하세요.
이번 글에서는 자바에서 HttpURLConnection을 활용해 HTTP 통신을 구현하는 방법과, 이를 통해 자주 사용되는 REST API의 개념을 알아보겠습니다. REST API는 현대 웹 개발에서 필수적인 기술로, HttpURLConnection을 활용해 RESTful 서비스와 통신하는 기본적인 방법을 살펴볼 것입니다.
1. REST API란?
REST란?
REST(Representational State Transfer)는 웹의 리소스를 HTTP 프로토콜을 통해 관리하는 아키텍처 스타일입니다. REST는 클라이언트와 서버 간의 상호작용을 단순화하고, 일관된 인터페이스를 제공하는 데 중점을 둡니다.
REST의 주요 특징
- 리소스 기반:
- 모든 데이터(사용자, 게시물 등)는 고유한 URI로 식별됩니다.
- 예: https://api.example.com/users/1 (사용자 ID가 1인 사용자)
- HTTP 메서드 활용:
- REST는 HTTP 메서드를 활용하여 리소스를 관리합니다.
- GET: 리소스 조회
- POST: 리소스 생성
- PUT: 리소스 수정
- DELETE: 리소스 삭제
- REST는 HTTP 메서드를 활용하여 리소스를 관리합니다.
- 무상태성:
- 서버는 클라이언트의 상태를 저장하지 않습니다. 요청마다 필요한 모든 정보를 포함해야 합니다.
- 표준 포맷:
- JSON, XML과 같은 표준 포맷으로 데이터를 주고받습니다. 최근에는 JSON이 가장 널리 사용됩니다.
REST API란?
REST API는 REST 아키텍처 스타일을 따르는 API입니다. 클라이언트는 REST API를 통해 서버의 리소스에 접근하거나, 데이터를 주고받을 수 있습니다.
2. HttpURLConnection을 활용한 HTTP 통신
자바에서는 HttpURLConnection 클래스를 사용하여 HTTP 요청을 보내고 응답을 받을 수 있습니다. 이를 통해 REST API와 통신하는 방법을 알아보겠습니다.
2.1 HTTP GET 요청
REST API에서 GET 요청은 서버에서 데이터를 조회하는 데 사용됩니다. 아래는 HttpURLConnection을 활용한 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 {
// 요청할 REST API URL
String apiUrl = "https://jsonplaceholder.typicode.com/posts/1";
// URL 객체 생성
URL url = new URL(apiUrl);
// HttpURLConnection 객체 생성
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// HTTP 메서드 설정 (GET)
conn.setRequestMethod("GET");
// 응답 코드 확인
int responseCode = conn.getResponseCode();
System.out.println("응답 코드: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_OK) { // 200 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("GET 요청 실패");
}
// 연결 종료
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
실행 결과 (예시)
위 코드를 실행하면 아래와 같은 JSON 데이터를 받을 수 있습니다. 이는 https://jsonplaceholder.typicode.com/posts/1 API에서 게시물 정보를 가져오는 예제입니다.
응답 코드: 200
응답 데이터: {
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
2.2 HTTP POST 요청
POST 요청은 서버에 데이터를 전송하여 새로운 리소스를 생성하는 데 사용됩니다. 아래는 POST 요청 예제입니다.
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpPostExample {
public static void main(String[] args) {
try {
// 요청할 REST API URL
String apiUrl = "https://jsonplaceholder.typicode.com/posts";
// URL 객체 생성
URL url = new URL(apiUrl);
// HttpURLConnection 객체 생성
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// HTTP 메서드 설정 (POST)
conn.setRequestMethod("POST");
// 요청 헤더 설정
conn.setRequestProperty("Content-Type", "application/json; utf-8");
conn.setRequestProperty("Accept", "application/json");
// 출력 스트림 활성화
conn.setDoOutput(true);
// POST 데이터 작성
String jsonInputString = "{\"title\": \"foo\", \"body\": \"bar\", \"userId\": 1}";
// 데이터 전송
try (OutputStream os = conn.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8");
os.write(input, 0, input.length);
}
// 응답 코드 확인
int responseCode = conn.getResponseCode();
System.out.println("응답 코드: " + responseCode);
if (responseCode == HttpURLConnection.HTTP_CREATED) { // 201 Created
System.out.println("POST 요청 성공");
} else {
System.out.println("POST 요청 실패");
}
// 연결 종료
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
실행 결과 (예시)
POST 요청이 성공하면 서버는 생성된 리소스 정보를 반환합니다.
응답 코드: 201
POST 요청 성공
3. HttpURLConnection의 주요 메서드
- setRequestMethod(String method): HTTP 메서드 설정 (GET, POST, PUT, DELETE 등)
- setRequestProperty(String key, String value): 요청 헤더 설정
- getResponseCode(): HTTP 응답 코드 반환
- getInputStream(): 요청에 대한 응답 데이터를 읽기 위한 스트림 반환
- getOutputStream(): 요청 데이터를 전송하기 위한 스트림 반환
- disconnect(): 연결 종료
4. REST API와 HttpURLConnection의 활용 사례
4.1 API 호출을 통한 데이터 조회
- REST API를 활용해 사용자, 게시물, 댓글 등 데이터를 조회합니다.
- 예: 소셜 미디어 앱에서 사용자 프로필 정보를 가져오기.
4.2 데이터 생성 및 업데이트
- POST, PUT 요청을 통해 새로운 데이터를 생성하거나 기존 데이터를 수정합니다.
- 예: 쇼핑몰 앱에서 상품 정보 추가 또는 수정.
4.3 데이터 삭제
- DELETE 요청을 통해 특정 데이터를 삭제합니다.
- 예: 게시판 앱에서 게시물 삭제.
'Java' 카테고리의 다른 글
[Java] ScheduledExecutorService로 JVM 메모리 사용량 모니터링하기 (0) | 2025.04.02 |
---|---|
[Java] Stack 구현 예제 (1) | 2025.03.31 |
[Java] nanoTime 사용해서 경과 시간 측정하기 (0) | 2025.03.26 |
[Java] Swing을 사용하여 간단한 계산기 만들기 (0) | 2025.03.24 |
[JAVA] ExecutorService로 Thread Pool 구현하기 (0) | 2025.03.20 |