1. InetAddress 클래스
InetAddress 클래스는 자바의 java.net 패키지에서 IP 주소와 관련된 정보를 다루는 클래스입니다. InetAddress는 네트워크에서 호스트의 도메인 이름이나 IP 주소를 쉽게 다룰 수 있게 해줍니다. 예를 들어, 웹 사이트의 URL을 IP 주소로 변환하거나, IP 주소를 호스트 이름으로 변환할 수 있습니다.
InetAddress 클래스의 주요 개념
- IP 주소: 네트워크 상에서 컴퓨터를 식별하는 고유한 주소입니다. 예를 들어, 192.168.0.1 같은 형태로 네트워크 상의 각 장치를 구분합니다.
- 도메인 이름: IP 주소에 대응하는 문자열 형태의 주소로, www.example.com과 같은 형태를 가집니다. InetAddress 클래스는 도메인 이름을 IP 주소로 변환하거나, IP 주소를 통해 도메인 이름을 확인할 수 있는 기능을 제공합니다.
InetAddress 객체 생성 및 주요 메서드
InetAddress 객체는 정적 메서드를 사용해 생성합니다. 대표적인 메서드는 다음과 같습니다.
- getLocalHost(): 현재 컴퓨터의 IP 주소와 호스트 이름을 반환합니다.
- getByName(String host): 지정된 도메인 이름이나 IP 주소를 통해 InetAddress 객체를 반환합니다.
- getAllByName(String host): 도메인 이름에 매핑된 모든 IP 주소를 InetAddress 배열로 반환합니다. (하나의 도메인이 여러 IP를 가질 경우 사용)
try {
// 도메인 이름을 통해 IP 주소 정보를 가져옴
InetAddress inetAddress1 = InetAddress.getByName("www.daum.net");
// 호스트 이름 출력
System.out.println("Host Name: " + inetAddress1.getHostName());
// 호스트의 IP 주소 출력
System.out.println("다음 Host Address: " + inetAddress1.getHostAddress());
InetAddress[] inetAddresses = InetAddress.getAllByName("www.naver.com");
for (InetAddress inetAddress : inetAddresses) {
System.out.println("네이버 HostAddress: " + inetAddress.getHostAddress());
}
} catch (UnknownHostException e) {
// 도메인 이름을 찾을 수 없을 때 발생하는 예외 처리
System.out.println("[에러] " + e.getMessage());
}
/*
<결과>
Host Name: www.daum.net
다음 Host Address: 121.53.105.193
네이버 HostAddress: 223.130.192.248
네이버 HostAddress: 223.130.192.247
네이버 HostAddress: 223.130.200.236
네이버 HostAddress: 223.130.200.219
*/
2. URL 클래스
- URL 형식: 프로토콜://호스트명:포트번호/경로/파일?쿼리#참조.
- 각 요소
- 프로토콜 : 서버와 통신에 사용되는 규약(http, https)등
- 호스트명 : 서버의 이름(docs.oracle.com)
- 포트번호 : 서버의 포트
- 경로 및 파일명 : 서버 내 자원의 위치 및 이름
- 쿼리 및 참조 : URL 파라미터(?이후) 및 참조(# 이후) 부분
- 각 요소
URL 클래스의 주요 메서드
- getProtocol(): URL의 프로토콜을 반환합니다.
- getHost(): URL의 호스트명을 반환합니다.
- getPort(): URL의 포트 번호를 반환합니다. 지정된 포트가 없을 경우 -1을 반환합니다.
- getPath(): URL의 경로를 반환합니다.
- getQuery(): URL의 쿼리 문자열을 반환합니다.
- getRef(): URL의 참조(프래그먼트)를 반환합니다.
**URL의 연결 및 자원 접근 (추가 설명)**
URL 객체를 생성하여 웹 서버와의 연결을 통해 자원을 요청할 수 있습니다. openConnection() 메서드를 통해 URL에 연결된 URLConnection 객체를 생성할 수 있으며, 이를 통해 데이터를 읽거나 쓸 수 있습니다.
3. URLConnection 클래스
- URLConnection은 우체국에서 발송되는 편지의 봉투와 같은 역할을 합니다. URL이 주소를 정의한다면, URLConnection은 실제로 해당 주소로 연결하고 데이터를 송수신할 수 있는 통로를 마련합니다.
- URLConnection을 통해 웹의 자원에 접근하여 데이터를 가져오거나, 서버에 데이터를 보낼 수 있어 네트워크를 통한 데이터 전송을 직관적으로 처리할 수 있습니다.

URLConnection 클래스의 주요 개념
- URL 연결: URLConnection 클래스는 특정 URL과 연결된 서버에 접근하여 해당 자원을 열고, HTTP 요청과 응답 처리를 포함한 다양한 통신 작업을 수행할 수 있습니다.
- 추상 클래스: URLConnection은 추상 클래스이므로 직접 객체를 생성할 수 없으며, URL 객체의 openConnection() 메서드를 통해 URLConnection 객체를 생성합니다.
URLConnection 클래스의 주요 메서드
- setConnectTimeout(int timeout): 연결 시도 시 타임아웃을 설정합니다.
- setReadTimeout(int timeout): 데이터 읽기 시 타임아웃을 설정합니다.
- connect(): 연결을 수동으로 열 수 있습니다. getInputStream()이나 getOutputStream()을 호출하면 자동으로 연결이 열립니다.
- getInputStream(): URL의 자원으로부터 데이터를 읽을 입력 스트림을 반환합니다.
- getOutputStream(): URL의 자원에 데이터를 보낼 출력 스트림을 반환합니다.
- getHeaderField(String name): 응답 헤더의 특정 필드를 반환합니다.
- getContentLength(): 자원의 콘텐츠 길이를 반환합니다. 콘텐츠 길이가 설정되지 않은 경우 -1을 반환합니다.
예시코드 : url에서 이미지 저장
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
public class URLConnectionEx03 {
public static void main(String[] args) {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
// URL을 통해 URLConnection 객체 생성
URLConnection con = new URL("https://t1.daumcdn.net/news/202411/01/xportsnews/20241101112629269njkd.jpg").openConnection();
// 외부연결에서 가져오는 입력 이미지
bis = new BufferedInputStream(con.getInputStream());
// 파일로 쓸 이미지
bos = new BufferedOutputStream(new FileOutputStream("./gallery.jpg"));
int data = 0;
while ((data = bis.read()) != -1) {
bos.write(data);
}
} catch (IOException e) {
...
} finally {
if (bis != null) { try { bis.close(); } catch (IOException e) {}}
if (bos != null) { try { bos.close(); } catch (IOException e) {}}
}
}
}
'Backend > Java' 카테고리의 다른 글
| 공유 자원의 문제와 동기화 (0) | 2024.11.01 |
|---|---|
| [Java]Thread (0) | 2024.11.01 |
| [Java]Enum(열거형) (2) | 2024.10.31 |
| [Java] 커넥션 풀 (0) | 2024.10.31 |
| [Java] 중첩클래스 (0) | 2024.10.31 |