도메인 이름 뒤에 숨겨진 IP 주소 찾기
우리가 웹 브라우저를 켤 때 142.250.206.110 같은 복잡한 숫자(IP 주소)를 외워서 치는 사람은 없을 것입니다. 대신 http://www.google.com이나 http://www.naver.com 같은 기억하기 쉬운 영문 도메인 주소를 사용하죠. 이렇게 사용자가 도메인을 입력하면, 네트워크 내부에서는 DNS(Domain Name System) 서버를 거쳐 실제 목적지인 IP 주소로 변환하는 과정을 거칩니다.
자바(Java) 프로그래밍을 할 때도 마찬가지로, 외부 서버와 통신하거나 접속 로그를 남기기 위해서는 특정 도메인의 실제 IP 주소를 알아내거나, 현재 프로그램을 실행 중인 내 컴퓨터(Localhost)의 IP 주소를 확인해야 할 때가 많습니다.
오늘은 자바의 java.net 패키지에서 제공하는 InetAddress 클래스를 활용하여 원하는 웹사이트의 IP와 내 컴퓨터의 로컬 IP를 아주 간단하게 가져오는 방법을 알아보겠습니다.
1. InetAddress 클래스란?
InetAddress는 자바에서 IP 주소(IPv4, IPv6)를 표현하고 다루기 위해 제공되는 핵심 클래스입니다. 이 클래스는 일반적인 객체 생성 방식인 new 연산자를 사용하여 인스턴스를 만들 수 없습니다. 대신 클래스 내부에 준비된 static 메서드들을 호출하여 객체를 반환받는 방식으로 사용해야 합니다.
2. 전체 소스 코드 예제
아래는 특정 웹사이트(예: 페이스북)의 도메인 정보와 현재 코드를 실행 중인 로컬 PC의 네트워크 정보를 출력하는 예제 코드입니다.
| import java.net.InetAddress; import java.net.UnknownHostException; public class InetAddressDemo { public static void main(String[] args) { try { // 1. 특정 도메인의 IP 정보 가져오기 InetAddress ia = InetAddress.getByName("http://www.facebook.com"); // 2. 현재 내 컴퓨터(로컬)의 IP 정보 가져오기 InetAddress local = InetAddress.getLocalHost(); System.out.println("입력한 페이지 명: " + ia.getHostName()); System.out.println("입력한 페이지 IP: " + ia.getHostAddress()); System.out.println(); // 줄바꿈 System.out.println("로컬 명: " + local.getHostName()); System.out.println("로컬 IP: " + local.getHostAddress()); } catch (UnknownHostException e) { // 호스트(도메인)를 찾을 수 없을 때 발생하는 예외 처리 System.out.println("해당 호스트를 찾을 수 없습니다."); e.printStackTrace(); } } } |
3. 핵심 메서드 상세 분석
위 코드에서 사용된 주요 메서드와 예외 처리에 대해 자세히 뜯어보겠습니다.
① InetAddress.getByName(String host)
가장 많이 쓰이는 메서드입니다. 괄호 안에 알고 싶은 웹사이트의 도메인 이름(예: "http://www.google.com")을 문자열로 넣어주면, 해당 도메인의 IP 정보를 담은 InetAddress 객체를 반환합니다.
② InetAddress.getLocalHost()
현재 이 자바 프로그램을 실행하고 있는 컴퓨터(로컬 머신)의 IP 주소와 컴퓨터 이름을 담은 객체를 반환합니다.
③ getHostName() 과 getHostAddress()
위의 1, 2번 과정을 통해 객체를 무사히 얻어왔다면, 이 두 메서드를 통해 실제 값을 문자열(String)로 뽑아낼 수 있습니다.
getHostName() : 호스트의 이름(도메인명 또는 컴퓨터 이름)을 반환합니다.
getHostAddress() : 호스트의 실제 IP 주소(예: 192.168.0.10)를 반환합니다.
필수 예외 처리: UnknownHostException
네트워크 통신은 항상 예측 불가능한 변수가 존재합니다. 만약 getByName()에 오타가 있거나 아예 존재하지 않는 도메인을 입력한다면 어떻게 될까요? 자바는 해당 IP를 찾을 수 없다는 의미로 UnknownHostException 에러를 발생시킵니다. 따라서 InetAddress를 사용할 때는 반드시 try-catch 문을 사용하여(또는 throws를 통해) 예외 처리를 해주어야 프로그램이 비정상적으로 종료되는 것을 막을 수 있습니다.
마무리