기술과 산업/언어 및 프레임워크

자바에서 IP 주소 얻는 방법 총정리 – 내부 IP부터 공인 IP까지 완벽 이해

B컷개발자 2025. 4. 15. 12:08
728x90

자바에서 IP 주소를 얻는 방법을 정리했습니다. InetAddress, NetworkInterface, 공인 IP 조회까지 실무에서 유용한 코드 예제와 함께 소개합니다.


자바에서 IP 주소 얻는 방법 총정리 – 내부 IP부터 공인 IP까지 완벽 이해

자바(Java) 개발을 하다 보면, IP 주소를 알아야 할 때가 종종 있습니다.
특히 서버 개발이나 네트워크 연동 작업 시 내부 IP와 공인 IP를 정확히 구분해서 사용하는 것이 중요합니다.
이번 글에서는 자바에서 IP 주소를 얻는 여러 가지 방법을 체계적으로 정리해보겠습니다.


📌 1. 기본 – InetAddress.getLocalHost() 사용

자바에서 가장 기본적으로 IP를 얻는 방법은 다음과 같습니다.

InetAddress ip = InetAddress.getLocalHost();
System.out.println("호스트 이름: " + ip.getHostName());
System.out.println("IP 주소: " + ip.getHostAddress());

이 코드는 현재 실행 중인 머신의 호스트 이름과 내부 IP를 반환합니다.
결과는 보통 192.168.x.x 형태의 사설 IP입니다.


📌 2. 여러 IP 얻기 – InetAddress.getAllByName()

만약 호스트 이름에 연결된 여러 IP(IPv4, IPv6 등) 정보를 모두 얻고 싶다면 다음 메서드를 사용할 수 있습니다.

InetAddress[] allIps = InetAddress.getAllByName("localhost");
for (InetAddress address : allIps) {
    System.out.println("주소: " + address.getHostAddress());
}

이 코드는 IPv6 주소도 포함해서 출력할 수 있어, 복수 IP 환경에서 유용합니다.


📌 3. 공인 IP 확인 – 외부 API 사용

로컬 환경에서는 getLocalHost()로는 공인 IP(External IP)를 알 수 없습니다.
이를 위해선 외부 서비스를 호출해야 합니다.

URL url = new URL("http://checkip.amazonaws.com");
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
String publicIp = br.readLine();
System.out.println("공인 IP: " + publicIp);

checkip.amazonaws.com은 텍스트 형태로 공인 IP만 반환하므로 간편하게 사용할 수 있습니다.


📌 4. 실제 사용 중인 IP 얻기 – NetworkInterface 활용

서버나 컨테이너 환경에서는 InetAddress.getLocalHost()가 127.0.0.1을 반환할 수 있습니다.
이때는 현재 활성화된 네트워크 인터페이스에서 직접 IP를 추출하는 방식이 필요합니다.

Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
    NetworkInterface nic = interfaces.nextElement();
    Enumeration<InetAddress> addresses = nic.getInetAddresses();
    while (addresses.hasMoreElements()) {
        InetAddress addr = addresses.nextElement();
        if (!addr.isLoopbackAddress() && addr instanceof Inet4Address) {
            System.out.println("실제 IP: " + addr.getHostAddress());
        }
    }
}

이 방식은 로컬이 아닌 실제 네트워크 상의 IP만 필터링하여 사용할 수 있어, 배포 환경에서 정확한 결과를 제공합니다.


✅ 자주 묻는 질문 (FAQ)

Q1. InetAddress.getLocalHost()가 127.0.0.1을 반환해요.

A: Docker, WSL, 일부 서버 환경에서는 루프백 주소가 반환될 수 있습니다. NetworkInterface 기반의 접근으로 우회하세요.

Q2. 공인 IP 조회는 보안상 안전한가요?

A: 외부 호출이기 때문에 API 제공자가 신뢰할 수 있는지 확인해야 합니다. http://checkip.amazonaws.com은 Amazon에서 제공하는 비교적 안전한 서비스입니다.


🔎 요약 표 – IP 얻는 방법 비교

목적 방법 특징

내부 IP InetAddress.getLocalHost() 가장 기본적, 일부 환경에선 loopback 반환
다중 IP InetAddress.getAllByName() IPv4, IPv6 모두 조회 가능
공인 IP 외부 API 호출 (checkip.amazonaws.com) 공인 IP 확인 가능
실제 사용 IP NetworkInterface 기반 추출 다중 NIC 환경에서 정확한 값 추출 가능

✨ 마무리 – 실무에서는 상황에 따라 유연하게

자바에서 IP 주소를 얻는 방법은 상황에 따라 달라져야 합니다.
로컬 테스트일 땐 InetAddress가 간편하지만, 서버 환경이나 공인 IP가 필요한 경우는 별도의 처리가 꼭 필요합니다.
이번 글에서 소개한 여러 방법을 적절히 활용하면, 실무에서도 안정적인 IP 처리가 가능해집니다.

 

728x90