자바에서 IP 주소 얻는 방법 총정리 – 내부 IP부터 공인 IP까지 완벽 이해
자바에서 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 처리가 가능해집니다.