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 소스코드를 콘솔창에 전부 출력하게 됩니다. 웹 크롤러 등의 기초적인 원리입니다.