[NET-003][입문] 도메인 이름이 IP 주소로 바뀌는 과정 > IT 기술 공유

본문 바로가기
사이트 내 전체검색

IT 기술 공유

[NET-003][입문] 도메인 이름이 IP 주소로 바뀌는 과정

페이지 정보

profile_image
작성자 기술팀장
댓글 0건 조회 235회 작성일 26-08-30 15:34

본문

[이번 수업]
브라우저에 `example.com`을 입력하면 컴퓨터는 통신할 IP 주소를 먼저 찾아야 합니다. DNS(Domain Name System, 도메인 이름 시스템)가 사람이 읽는 이름을 주소 레코드로 연결하는 흐름을 배우고 운영체제 확인자와 Python으로 결과를 관찰합니다.

[선수지식]
NET-001의 네트워크 기본과 NET-002의 IP 주소·포트 개념을 알면 좋습니다. Python 3와 인터넷 연결이 필요합니다.

[학습목표]
1. 재귀 확인자와 권한 서버의 역할을 구분합니다.
2. A·AAAA·CNAME·TTL을 설명합니다.
3. 이름 조회 결과가 여러 개이거나 바뀔 수 있음을 이해합니다.

[핵심개념]
응용 프로그램은 운영체제의 리졸버(resolver, 이름 확인 기능)에 도메인을 맡깁니다. 로컬 hosts 파일이나 캐시에 답이 없으면 보통 네트워크에 설정된 재귀 확인자(recursive resolver)가 대신 찾습니다. 확인자는 루트 서버에서 `.com` 담당 서버를 안내받고, 최상위 도메인(TLD) 서버에서 해당 도메인의 권한 서버를 안내받아 최종 레코드를 얻습니다. 이 위임은 한 서버가 전 세계 이름을 모두 저장하지 않게 합니다.

A 레코드는 IPv4 주소, AAAA는 IPv6 주소를 담습니다. CNAME은 다른 정식 이름을 가리키는 별칭입니다. TTL(Time To Live)은 확인자가 응답을 캐시에 재사용할 수 있는 시간입니다. 그래서 DNS 변경이 모든 곳에 동시에 보이지 않을 수 있고, 부하 분산·위치에 따라 여러 주소가 오거나 조회할 때 달라질 수 있습니다. DNS는 이름을 찾는 단계이며, 그 뒤의 TCP 연결이나 HTTP 요청과는 별개입니다.

[따라하기]
아래 내용을 `dns_check.py`로 저장하세요. `getaddrinfo`는 운영체제의 이름 확인 절차를 사용하므로 hosts 파일·캐시·DNS 설정의 영향을 받을 수 있습니다.

```python
import socket

host = "example.com"
answers = socket.getaddrinfo(
    host, 443, type=socket.SOCK_STREAM
)
addresses = sorted({item[4][0] for item in answers})

print("host:", host)
for address in addresses:
    family = "IPv6" if ":" in address else "IPv4"
    print(f"{family}: {address}")
```

macOS/Linux는 `python3 dns_check.py`, Windows PowerShell은 `python dns_check.py`를 실행합니다. 예상 결과는 host와 하나 이상의 IPv4 또는 IPv6 주소입니다. 주소 값과 개수는 시점·지역·네트워크에 따라 달라도 정상입니다. 원시 레코드와 TTL을 보려면 macOS/Linux에서 `dig example.com A`를 사용하고, dig가 없다면 `nslookup example.com`을 씁니다. Windows는 `nslookup example.com`을 실행합니다. `Non-authoritative answer`는 보통 재귀 확인자의 캐시 응답이라는 뜻이지 오류라는 뜻이 아닙니다.

[흔한 실수]
도메인 하나에는 IP가 영구히 하나만 있다고 가정하지 마세요. DNS가 성공했다고 웹 서버도 정상인 것은 아니며, 반대로 IP 직접 접속은 TLS 인증서와 가상 호스트 때문에 실패할 수 있습니다. `https://`와 경로까지 DNS가 해석한다고 생각하거나, 장애 때 원인을 확인하지 않고 캐시부터 무조건 삭제하는 것도 피합니다.

[보안 주의]
DNS 응답만으로 상대가 안전하다고 믿지 마세요. DNSSEC은 서명으로 DNS 데이터의 출처·무결성 확인을 돕지만 내용을 암호화하지는 않습니다. 서버가 사용자가 준 URL을 대신 요청할 때는 DNS 재바인딩과 SSRF를 막기 위해 연결 시점의 최종 IP를 다시 검사하고 사설·루프백·메타데이터 주소를 차단해야 합니다. 사용자 입력을 셸 명령 문자열에 붙이지 말고 API 인자로 전달합니다. 실습은 공개 예제 도메인 조회에만 사용하세요.

[직접 해볼 과제]
`example.org`와 `example.net`도 조회해 주소를 표로 기록하세요. 가능하면 dig로 A와 AAAA를 각각 조회하고 TTL을 비교한 뒤, 같은 명령을 두 번 실행했을 때 달라진 점을 한 줄로 설명합니다.

[확인문제]
1. 재귀 확인자는 왜 루트·TLD·권한 서버를 차례로 참고하나요?
2. A와 AAAA 레코드는 무엇이 다른가요?
3. DNS 변경 직후 사용자마다 다른 답을 볼 수 있는 이유는 무엇인가요?

[다음 학습]
전체 순환의 다음 수업은 CLOUD-003 ‘IAM 사용자·역할·최소 권한’입니다. 네트워크 과정을 이어가려면 NET-004 ‘TCP·UDP·포트’를 학습하세요.

[공식 참고 자료]
RFC 1034 DNS 개념: https://www.rfc-editor.org/rfc/rfc1034
RFC 1035 DNS 구현·명세: https://www.rfc-editor.org/rfc/rfc1035
RFC 9499 DNS 용어: https://www.rfc-editor.org/rfc/rfc9499
Python socket.getaddrinfo: https://docs.python.org/3/library/socket.html#socket.getaddrinfo
BIND 9 dig 설명서: https://bind9.readthedocs.io/en/latest/manpages.html#dig-dns-lookup-utility

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
4,096
어제
6,862
최대
16,772
전체
770,047
Copyright © 소유하신 도메인. All rights reserved.