본문으로 건너뛰기
Advertisement

URL과 URLConnection

1. URL (Uniform Resource Locator)

인터넷 상에 존재하는 수많은 서버들이 제공하는 자원(웹 페이지, 이미지, 파일 등)이 어디에 있는지를 나타내는 표준 주소 체계입니다. 보통 다음과 같은 구조를 가집니다.

https://www.google.com:443/search?q=java&hl=ko
  • 프로토콜(https): 자원에 접근하기 위한 통신 규약
  • 호스트(www.google.com): 자원을 제공하는 서버의 도메인 또는 IP
  • 포트(443): HTTPS의 기본 포트
  • 경로(/search): 서버 내부의 특정 디렉토리 또는 파일 경로
  • 쿼리 파라미터(?q=java&hl=ko): 서버에 함께 전달할 부가적인 값

자바의 java.net.URL 클래스를 사용하면 이러한 URL 문자열을 파싱하고 관리할 수 있습니다.

URL url = new URL("https://www.example.com:443/search?q=java");
System.out.println("Host: " + url.getHost()); // www.example.com
System.out.println("Path: " + url.getPath()); // /search

2. URLConnection

URLConnection은 애플리케이션과 URL(웹 서버) 간의 통신 연결을 나타내는 최상위 추상 클래스입니다. 이를 통해 해당 웹 서버의 헤더 정보를 읽어오거나, 페이지의 본문(HTML 콘텐츠 등) 데이터를 직접 스트림으로 다운로드할 수 있습니다. HTTP 통신의 경우 하위 클래스인 HttpURLConnection을 사용합니다.

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

public class URLExample {
public static void main(String[] args) {
try {
// 접속할 URL 지정
URL url = new URL("https://www.naver.com");

// URL에 연결
URLConnection conn = url.openConnection();

// 서버로부터 응답받은 InputStream을 문자 배열로 디코딩 및 버퍼링
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "UTF-8")
);

String line;
// 문서의 끝(null)까지 한 줄씩 계속 읽어들임
while((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();

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

이 코드를 실행하면 자바 프로그램이 지정된 사이트에 접속하여 해당 웹 페이지의 원본 HTML 소스코드를 콘솔창에 전부 출력하게 됩니다. 웹 크롤러 등의 기초적인 원리입니다.

Advertisement