DNS 조회 과정
도메인 이름(www.google.com)을 IP 주소(142.250.196.110)로 변환하는 과정
전체 흐름
브라우저에 www.google.com 입력
1. 브라우저 캐시 확인
↓ (없으면)
2. OS 캐시 확인 (/etc/hosts)
↓ (없으면)
3. Local DNS 서버 (ISP)
↓ (없으면)
4. Root DNS 서버 (.)
↓ "com은 여기로"
5. TLD DNS 서버 (.com)
↓ "google.com은 여기로"
6. Authoritative DNS
↓ "142.250.196.110"
7. IP 주소 반환 + 캐싱
각 단계 상세
| 단계 | 서버 | 역할 |
|---|
| 1-2 | 로컬 캐시 | 이전 조회 결과 재사용 |
| 3 | Local DNS | ISP가 운영, 재귀 조회 |
| 4 | Root DNS | 전 세계 13개 (a~m) |
| 5 | TLD DNS | .com, .kr 등 관리 |
| 6 | Authoritative | 실제 IP 보유 서버 |
재귀 vs 반복 조회
[재귀 조회]
Client → Local DNS
(Local이 대신 다 물어봄)
← 최종 IP 반환
[반복 조회]
Local DNS → Root → "TLD 주소"
Local DNS → TLD → "Auth 주소"
Local DNS → Auth → "최종 IP"
- 클라이언트 → Local DNS: 재귀 조회
- Local DNS → 나머지: 반복(iterative) 조회
DNS 레코드 타입
| 타입 | 용도 | 예시 |
|---|
| A | 도메인→IPv4 | google.com → 142.250.x |
| AAAA | 도메인→IPv6 | google.com → 2404:... |
| CNAME | 별칭 | www → google.com |
| MX | 메일 서버 | gmail-smtp.google.com |
| NS | 네임서버 | ns1.google.com |
| TXT | 텍스트(인증) | SPF, DKIM 설정 |
TTL과 캐싱
TTL(Time To Live) = 캐시 유효 시간
TTL=3600 → 1시간 동안 캐시 사용
TTL=86400 → 24시간 동안 캐시 사용
TTL이 짧으면: 변경 빠르게 반영, DNS 부하 ↑
TTL이 길면: DNS 부하 ↓, 변경 반영 느림
실무 연결
| 상황 | DNS 관련 포인트 |
|---|
| 서비스 배포 | DNS 전파 지연 (최대 48시간) |
| 로드밸런싱 | DNS 라운드로빈 (A 레코드 여러 개) |
| CDN | CNAME으로 CDN 서버 연결 |
| 장애 대응 | TTL 짧게 설정 → 빠른 전환 |
| HTTPS | 인증서와 도메인 매칭 필수 |
Q.브라우저에 URL을 입력하면 DNS 조회는 어떤 순서로 이뤄지나요?
가까운 캐시부터 훑고 없으면 위로 올라갑니다.
| 순서 | 조회 대상 | 설명 |
|---|
| 1 | 브라우저 캐시 | 가장 빠르다 |
| 2 | OS 캐시와 hosts 파일 | 시스템 수준 |
| 3 | 로컬 DNS 서버 | ISP 나 회사 서버. 여기서 대부분 끝난다 |
| 4 | 루트 서버 | 최상위 도메인 담당 서버를 알려준다 |
| 5 | 최상위 도메인 서버 | com 을 담당. 해당 도메인의 권한 서버를 알려준다 |
| 6 | 권한 서버 | 실제 IP 를 답한다 |
4번부터 6번은 로컬 DNS 서버가 대신 돌아다니고, 결과를 캐시해 다음 요청부터는 3번에서 끝납니다.
흔한 실수: 매 요청이 루트까지 간다고 답하는 것. 실제로는 캐시 적중률이 높아 대부분 1번에서 3번 안에서 끝납니다. 루트 서버가 전 세계 13개 주소로 운영되는데도 버티는 이유입니다.
Q.재귀 조회와 반복 조회의 차이를 설명해주세요.
누가 돌아다니는지가 다릅니다.
| 방식 | 요청한 쪽 | 받은 쪽 |
|---|
| 재귀 | 답만 기다린다 | 끝까지 찾아서 최종 답을 준다 |
| 반복 | 다음에 물어볼 곳을 받아 직접 간다 | 아는 만큼만 알려준다 |
실제 조합은 이렇습니다.
| 구간 | 방식 | 뜻 |
|---|
| 클라이언트에서 로컬 DNS 서버 | 재귀 | 찾아서 알려달라 |
| 로컬 DNS 서버에서 루트, TLD, 권한 서버 | 반복 | 다음은 어디로 물어보면 되나 |
이렇게 나눈 이유는 부하와 캐시 때문입니다. 루트 서버가 모든 클라이언트의 재귀 요청을 받으면 감당할 수 없습니다. 로컬 서버가 대신 돌고 결과를 캐시하면 같은 도메인 요청이 거기서 끝납니다.
흔한 실수: 둘을 순서 개념으로 이해하는 것. 재귀와 반복은 책임을 누가 지는가의 차이입니다.
Q.DNS 캐싱은 어디서 이뤄지고, TTL의 역할은 무엇인가요?
여러 층에서 이뤄지고, TTL 이 각 층의 보관 기간을 정합니다.
| 층 | 보관 기간 |
|---|
| 브라우저 | 자체 정책. 보통 수십 초에서 수 분 |
| 운영체제 | TTL 을 따른다 |
| 로컬 DNS 서버 | TTL 을 따른다. 여기가 가장 크게 작용한다 |
TTL 은 권한 서버가 응답에 실어 보내는 값으로 이 답을 얼마 동안 재사용해도 되는지를 알려줍니다.
TTL 이 길면 조회 부하와 지연이 준다. 대신 변경 반영이 느리다
TTL 이 짧으면 변경이 빨리 퍼진다. 대신 조회가 잦아진다
그래서 서버 이전 며칠 전에 TTL 을 낮춰두고, 이전이 끝나고 안정되면 다시 올리는 절차를 씁니다. 낮춘 값이 퍼지는 데도 기존 TTL 만큼 걸리기 때문에 미리 해야 합니다.
흔한 실수: 변경 직후 TTL 을 낮추는 것. 이미 옛 값을 받아간 서버들은 원래 TTL 이 끝날 때까지 그대로입니다.
Q.DNS 레코드 타입 A, CNAME, MX의 차이를 설명해주세요.
| 타입 | 가리키는 것 | 예 |
|---|
| A | IPv4 주소 | example.com 은 93.184.x.x |
| AAAA | IPv6 주소 | |
| CNAME | 다른 도메인 이름 | www 는 example.com 을 가리킨다 |
| MX | 메일 서버와 우선순위 | 메일은 mail.example.com 으로 |
| TXT | 임의 문자열 | 도메인 소유 확인, 메일 인증 정보 |
| NS | 이 도메인의 권한 서버 | |
CNAME 은 이름을 다시 조회해야 하므로 왕복이 한 번 더 듭니다. 그리고 루트 도메인에는 CNAME 을 둘 수 없습니다. 같은 이름에 다른 레코드(MX, NS)가 함께 있어야 하는데 CNAME 은 그것을 금지하기 때문입니다.
그래서 루트 도메인을 CDN 이나 로드밸런서에 붙일 때는 제공자별 대체 방식(A 레코드 자동 갱신, ALIAS 유형)을 씁니다.
흔한 실수: 루트 도메인에 CNAME 을 걸려다 실패한 뒤 원인을 못 찾는 것. 표준 제약이라 서비스마다 우회 수단을 확인해야 합니다.
Q.DNS Round Robin 로드밸런싱의 한계는?
DNS 는 주소를 알려줄 뿐 서버 상태를 모릅니다.
| 한계 | 내용 |
|---|
| 헬스 체크 없음 | 죽은 서버 주소도 그대로 준다 |
| 캐시 때문에 전환이 느리다 | TTL 이 남아 있으면 옛 주소로 계속 간다 |
| 부하가 고르지 않다 | 클라이언트마다 연결 지속 시간과 요청량이 다르다 |
| 클라이언트 선택 | 여러 주소를 받고 무엇을 쓸지는 클라이언트가 정한다 |
| 세션 유지 불가 | 같은 사용자가 다음에 다른 서버로 갈 수 있다 |
그래서 실무에서는 DNS 로 지역이나 데이터센터를 고르고, 그 안에서 로드밸런서가 실제 분배와 헬스 체크를 맡는 2단 구조를 씁니다.
TTL 을 짧게 잡으면 전환은 빨라지지만 조회가 늘고, 일부 해석기는 짧은 TTL 을 무시하기도 해서 한계가 남습니다.
흔한 실수: DNS 라운드 로빈을 장애 대응 수단으로 쓰는 것. 서버가 죽어도 주소가 계속 나가 일부 사용자가 실패합니다.
먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.
읽었으면 문제로 확인해보세요
네트워크 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.