웹사이트 주소로 IP 주소 알아내는 방법

2020. 4. 8. 07:17Dev & Tech/Etc

반응형
웹사이트 주소로 IP 주소 알아내는 방법

웹사이트 주소로 IP 주소 알아내는 방법

naver.com이나 google.com처럼 짧은 이름 하나만 입력해도 브라우저는 정확히 원하는 서버를 찾아갑니다. 그런데 컴퓨터끼리는 사실 이름이 아니라 숫자로 된 주소로만 서로를 알아봅니다. 우리가 친구 이름만 기억해도 전화번호부가 대신 번호를 찾아주는 것과 똑같은 원리입니다.

이 글에서는 그 숫자 주소, 즉 IP 주소가 도메인과 어떻게 연결되는지부터 시작해서 명령어 한 줄로 확인하는 방법, 클릭 몇 번이면 되는 온라인 도구, 코드로 자동화하는 방법, 그리고 같은 사이트인데 확인할 때마다 IP가 다르게 나오는 이유까지 하나씩 차근차근 짚어보겠습니다. 평소 궁금했지만 검색해도 뭔가 부족했던 부분들까지 최대한 자세히 풀어보려고 합니다.
목차
1. 도메인과 IP 주소는 어떻게 연결되어 있을까
2. 명령어와 온라인 도구로 IP 주소를 확인하는 방법
3. 프로그래밍으로 IP 주소를 조회하는 방법
4. 하나의 사이트에 여러 IP 주소가 존재하는 이유

#1. 도메인과 IP 주소는 어떻게 연결되어 있을까
1) IP 주소란 정확히 무엇일까
IP 주소는 인터넷에 연결된 기기마다 부여되는 고유한 번호입니다. 우리 집 주소처럼, 이 번호가 있어야 데이터가 정확한 곳으로 전달됩니다. 택배를 보낼 때 주소가 없으면 아무리 정확한 물건이라도 도착할 곳을 못 찾는 것과 같은 이치입니다.
(1) IPv4와 IPv6, 뭐가 다를까
IPv4 - 192.168.1.1처럼 점으로 구분된 4개의 숫자입니다. 각 자리는 0~255까지 표현 가능하며, 이론상 약 43억 개의 주소를 만들 수 있습니다.

IPv6 - 훨씬 긴 형태의 새 방식으로, 스마트폰과 IoT 기기가 폭증하면서 IPv4 주소가 부족해지자 도입됐습니다. 한 사이트가 두 방식을 동시에 가진 경우도 흔합니다.
(2) 공인 IP와 사설 IP의 차이
집이나 회사에서 쓰는 공유기는 여러 기기에 사설 IP(192.168.x.x 등)를 나눠줍니다. 반면 인터넷 회사가 공유기에 부여하는 공인 IP는 외부 세계에서 우리 집을 찾아오는 진짜 주소입니다. 우리가 nslookup으로 확인하는 웹사이트의 IP는 대부분 공인 IP입니다.
. . . . .
2) 도메인 이름은 왜 쓰는 걸까
숫자만으로도 통신이 가능한데 왜 굳이 이름을 쓸까요? 답은 간단합니다. 사람이 숫자를 외우기는 어렵기 때문입니다. 이 변환을 대신해주는 시스템이 DNS(Domain Name System)이며, 일종의 '인터넷 전화번호부'라고 보면 됩니다.
(1) DNS 조회는 어떤 순서로 진행될까
로컬 캐시 확인 - 내 컴퓨터나 공유기가 예전에 조회한 결과를 저장해뒀는지 먼저 확인합니다.

재귀 리졸버 요청 - 캐시에 없으면 인터넷 회사의 DNS 서버에 물어봅니다.

루트·최상위 도메인 서버 조회 - .com, .kr 같은 최상위 도메인을 관리하는 서버를 거쳐 어느 서버가 답을 알고 있는지 안내받습니다.

권한 있는 네임서버 응답 - 해당 도메인을 실제 관리하는 네임서버가 최종 IP 주소를 알려주고, 그 결과가 다시 저장(캐시)됩니다.
(2) 캐시와 TTL은 왜 중요할까
DNS 응답에는 TTL(Time To Live)이라는 값이 함께 옵니다. 이 시간 동안은 다시 물어보지 않고 저장된 결과를 그대로 씁니다. 그래서 사이트를 이전 서버로 옮겨도 TTL이 끝나기 전까지는 예전 IP로 접속되는 경우가 생깁니다. 보통 몇 분에서 하루 정도로 설정됩니다.

#2. 명령어와 온라인 도구로 IP 주소를 확인하는 방법
1) Windows 명령 프롬프트로 확인하기
가장 정확한 방법은 명령어를 직접 입력하는 것입니다. Windows키+R을 누르고 "cmd"를 입력하면 검은 화면(명령 프롬프트)이 열립니다.
(1) nslookup으로 도메인 조회하기
nslookup naver.com

// 결과 예시
Server: router.home
Address: 192.168.1.1
Non-authoritative answer:
Name: naver.com
Address: 223.130.200.107
"Address:" 뒤에 나오는 숫자가 IP 주소입니다. "Non-authoritative answer"는 오류가 아니라 이전에 저장된 정보를 보여준다는 뜻이니 걱정하지 않아도 됩니다.
(2) ping으로 상태까지 함께 확인하기
IP 주소를 확인하면서 사이트가 실제로 응답하는지도 보고 싶다면 ping이 더 유용합니다.
ping naver.com

Pinging naver.com [223.130.200.107] with 32 bytes of data:
Reply from 223.130.200.107: time=15ms
"Reply from..."이 뜬다면 사이트가 정상 작동 중이라는 뜻이고, time 뒤의 숫자가 작을수록 응답 속도가 빠른 것입니다.
(3) tracert로 경로까지 추적하기
접속이 느릴 때는 tracert naver.com(맥/리눅스는 traceroute)을 입력하면 내 컴퓨터에서 목적지 서버까지 거쳐가는 중간 경유지들을 순서대로 보여줍니다. 어느 구간에서 지연이 생기는지 짐작할 수 있어 인터넷 속도 문제를 진단할 때 자주 쓰입니다. Mac이나 Linux라면 dig naver.com 명령어의 "ANSWER SECTION"에서도 같은 IP 정보를 확인할 수 있습니다.
. . . . .
2) 설치 없이 웹사이트로 바로 확인하기
명령어가 번거롭다면 온라인 도구가 훨씬 편합니다. 도메인만 입력하면 바로 IP 주소를 보여줍니다.
도구특징
whatismyip.com'Domain to IP' 메뉴에 주소만 입력하면 바로 결과가 나옵니다.
dnschecker.org전 세계 여러 지역에서 확인한 결과를 한 번에 비교할 수 있습니다.
ipinfo.ioIP 주소와 함께 서버 위치를 지도로도 보여줍니다.
mxtoolbox.comIP 조회 외에도 메일 서버, 블랙리스트 등록 여부 등을 함께 점검할 수 있습니다.
이런 도구들은 프로그램 설치 없이 웹브라우저만 있으면 되기 때문에, 컴퓨터가 익숙하지 않은 분들에게도 가장 부담 없는 방법입니다.
. . . . .
3) 브라우저 개발자 도구로 지금 접속한 서버 보기
"지금 내가 보고 있는 이 페이지는 실제로 어느 서버에 연결된 걸까?"라는 궁금증에는 브라우저 개발자 도구가 답이 됩니다.
(1) 크롬(Chrome)에서 확인하기
① 확인하려는 사이트에 접속한 뒤 F12를 눌러 개발자 도구를 엽니다.

② 위쪽의 Network 탭을 클릭합니다.

F5로 새로고침한 뒤 맨 위 항목을 클릭합니다.

④ Headers 패널에서 Remote Address 값을 확인합니다.
(2) 파이어폭스(Firefox)에서 확인하기
방식은 크롬과 거의 같으며, 항목 이름만 Remote IP로 다릅니다. F12로 개발자 도구를 연 뒤 Network 탭에서 새로고침하고 첫 항목의 Headers를 확인하면 됩니다. 이 값은 지금 실제로 연결된 서버 주소이기 때문에 명령어로 확인한 결과와 다를 수 있다는 점도 함께 기억해두면 좋습니다.

#3. 프로그래밍으로 IP 주소를 조회하는 방법
1) Python으로 조회하기
socket 모듈만으로 간단하게 조회할 수 있습니다.
(1) 기본 조회 코드
import socket

def get_ip(domain):
  try:
    return socket.gethostbyname(domain)
  except socket.gaierror:
    return "확인할 수 없습니다."

# 사용 예시
print(get_ip("example.com"))
(2) 여러 도메인을 한 번에 조회하기
사이트가 가진 모든 IP를 보고 싶거나 여러 도메인을 반복 조회하고 싶을 때는 리스트와 반복문을 함께 사용합니다.
domains = ["naver.com", "google.com", "example.com"]

for d in domains:
  addrs = socket.getaddrinfo(d, None)
  ips = sorted(set(a[4][0] for a in addrs))
  print(f"{d}: {ips}")
getaddrinfo()는 IPv4와 IPv6를 모두 반환하기 때문에, set으로 중복을 제거하면 사이트가 실제로 보유한 IP 목록을 깔끔하게 정리할 수 있습니다.
. . . . .
2) Node.js로 조회하기
Node.js에서는 dns 모듈이 같은 역할을 합니다.
(1) 콜백 방식 기본 조회
const dns = require('dns');

dns.lookup('example.com', (err, address) => {
  if (err) return console.error('확인 실패:', err);
  console.log(`IP 주소: ${address}`);
});
(2) Promise 방식으로 여러 개 한 번에 처리하기
최신 Node.js에서는 dns.promises를 사용하면 async/await 문법으로 훨씬 깔끔하게 여러 도메인을 처리할 수 있습니다.
const dns = require('dns').promises;

async function checkAll(domains) {
  for (const d of domains) {
    const ips = await dns.resolve4(d);
    console.log(`${d}: ${ips.join(', ')}`);
  }
}
checkAll(['naver.com', 'google.com']);
IPv6 주소까지 함께 보고 싶다면 dns.resolve6()를 추가로 호출하면 됩니다. Python과 Node.js 모두 서버 모니터링, 접속 로그 자동화, 장애 알림 스크립트 등에 자주 활용되는 방식입니다.

#4. 하나의 사이트에 여러 IP 주소가 존재하는 이유
1) 왜 같은 사이트인데 IP가 다르게 나올까
확인할 때마다 IP 주소가 다르게 나온다면 고장이 아니라 정상입니다. 이유는 다음과 같습니다.
동시 접속자 분산 - 수백만 명이 몰리는 대형 사이트는 여러 대의 서버로 부하를 나눕니다.

지역별 최적 연결 - 서울 사용자와 부산 사용자, 해외 사용자가 각각 더 가까운 서버로 연결됩니다.

장애 대응 - 서버 하나가 멈춰도 다른 서버가 대신 응답할 수 있습니다.

CDN 활용 - 이미지·영상 같은 대용량 파일을 전 세계 여러 곳에 미리 복사해 둡니다.

로드밸런서 운영 - 사용자 요청이 들어올 때마다 여러 서버 중 가장 여유 있는 곳으로 자동 배정합니다.
구글이나 유튜브 같은 대형 사이트는 수백 개의 IP 주소를 동시에 운영하기도 합니다. 이 때문에 같은 사람이 아침과 저녁에 각각 확인해도 다른 결과가 나올 수 있습니다.
. . . . .
2) 확인할 때 주의해야 할 점
주의할 점설명
반영 지연IP가 바뀌어도 TTL과 캐시 때문에 몇 시간 정도 이전 정보가 남아있을 수 있습니다.
중간 서버 경유확인된 주소가 원본 서버가 아니라 CDN 등 중간 경유 서버일 수 있습니다.
지역별 차이접속 지역에 따라 결과가 다르게 나올 수 있습니다.
IPv4·IPv6 혼재한 도메인에 두 방식 주소가 함께 나와도 이상한 현상이 아닙니다.
무단 스캔 주의본인 소유가 아닌 서버를 무단으로 스캔·공격하는 행위는 법적 처벌 대상이 될 수 있습니다.
※ 위 내용은 일반적인 네트워크 동작 원리를 정리한 것으로, 브라우저 메뉴 구성이나 도구별 세부 화면은 버전에 따라 달라질 수 있어 실제 사용 시점의 화면과 다소 차이가 있을 수 있습니다.
. . . . .
3) 실무에서는 언제 이런 확인이 필요할까
"이걸 대체 언제 써먹지?"라는 물음에는 아래와 같은 상황들이 답이 됩니다.
사이트 제작 시 - 도메인이 원하는 서버에 제대로 연결됐는지 점검할 때

접속 장애 진단 시 - 문제가 내 인터넷인지 상대 서버인지 구분할 때

의심 사이트 확인 시 - 피싱 사이트가 실제 어디 서버에 있는지 확인할 때

서버 운영·모니터링 시 - 여러 서버의 부하 분산이 정상인지 점검할 때

접속 제한 설정 시 - 방화벽으로 특정 사이트를 차단할 때

접속 허용 목록 관리 시 - 특정 IP만 서비스에 접근하도록 제한할 때
①②③은 일반 사용자도 자주 마주치는 상황이고, ④⑤⑥은 주로 개발자나 서버 담당자가 업무에서 다루는 영역입니다. 상황에 맞춰 2장에서 다룬 명령어나 도구, 3장에서 다룬 코드 중 편한 방법을 골라 쓰면 됩니다.

마무리
결국 도메인 주소는 사람을 위한 이름표일 뿐, 실제 통신은 IP 주소라는 숫자로 이루어집니다. DNS가 그 사이를 연결해주기 때문에 우리는 복잡한 숫자를 외울 필요 없이 편하게 인터넷을 사용할 수 있는 것입니다.

명령어든 온라인 도구든 코드든, 어느 방법을 쓰더라도 원리는 같습니다. 같은 사이트인데 IP가 다르게 나온다고 놀라지 않으셔도 됩니다. 여러 서버가 나눠서 요청을 처리하고 있다는 신호일 뿐입니다.

오늘 정리한 방법들을 하나씩 직접 실행해보면 인터넷이 작동하는 방식이 한결 더 선명하게 이해되실 겁니다.
긴 글 읽어주셔서 감사합니다.

끝.


반응형