Backend/Java

[Java]java.net 패키지 : InetAddress/URL/URLConnection 클래스

해로몬 2024. 11. 1. 18:22

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 객체는 정적 메서드를 사용해 생성합니다. 대표적인 메서드는 다음과 같습니다.

  1. getLocalHost(): 현재 컴퓨터의 IP 주소와 호스트 이름을 반환합니다.
  2. getByName(String host): 지정된 도메인 이름이나 IP 주소를 통해 InetAddress 객체를 반환합니다.
  3. 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 클래스의 주요 메서드

  1. getProtocol(): URL의 프로토콜을 반환합니다.
  2. getHost(): URL의 호스트명을 반환합니다.
  3. getPort(): URL의 포트 번호를 반환합니다. 지정된 포트가 없을 경우 -1을 반환합니다.
  4. getPath(): URL의 경로를 반환합니다.
  5. getQuery(): URL의 쿼리 문자열을 반환합니다.
  6. 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