URL / URI / DNS
3줄 요약
- URI/URL은 단순 문자열이 아니라 scheme, host, path, query, fragment가 계층별로 다르게 해석되는 요청 계약이다.
- DNS는 이름을 주소와 정책 정보로 바꾸지만 resolver cache, record type, CNAME chain, 내부/외부 DNS, IPv6 때문에 장애 지점이 된다.
- 도메인은 cookie, CORS, TLS, OAuth, WAF, admin 접근 제어의 보안 경계이므로 백엔드도 설계와 변경 위험을 이해해야 한다.
핵심 정리
- URL은
scheme, host, port, path, query, fragment로 나뉜다. origin은 scheme + host + port이고 CORS, cookie, service worker, mixed content 판단의 기준이 된다.
- 백엔드 라우팅은 path와 query만 보지 않는다.
Host, X-Forwarded-Host, X-Forwarded-Proto, proxy의 normalize 정책, CDN cache key가 함께 결과를 바꾼다.
- DNS record는 A/AAAA/CNAME/TXT/CAA/MX처럼 역할이 다르다.
NXDOMAIN, SERVFAIL, NOERROR no answer는 서로 다른 장애 신호다.
- TTL은 버튼을 누른 뒤 전 세계에 퍼지는 시간이 아니라 cache가 이전 값을 얼마나 오래 들고 있을 수 있는지에 가깝다.
- 도메인 이전은 old/new 인프라를 동시에 정상 운영하는 작업이다. TLS, Host routing, health, DB/session 호환성, rollback record를 함께 준비해야 한다.
- 도메인 설계는 보안 설계다. 넓은 cookie Domain, dangling CNAME, 과한 CORS wildcard, Host header 신뢰는 운영 사고와 보안 사고로 이어진다.
헷갈리는 지점
- URL과 URI를 같은 말로만 기억하기 쉽다. 둘 다 주소처럼 쓰이기 때문이다.
- 핵심 판단 포인트는 실무에서는 식별자 구조보다 origin, Host, path, query, fragment가 어느 계층에서 쓰이는지를 구분하는 것이다.
- DNS 변경을 저장 버튼 하나로 끝났다고 생각하기 쉽다. 캐시와 TTL이 있기 때문이다.
- 핵심 판단 포인트는 전파가 아니라 resolver별 cache 만료, old/new traffic split, rollback 가능성을 보는 것이다.
- CNAME을 쓰면 모든 설정이 따라간다고 오해하기 쉽다. 레코드 해석과 서비스 설정은 별개이기 때문이다.
- 핵심 판단 포인트는 DNS 대상, TLS 인증서, LB listener, origin host를 함께 맞춘다.
- URL 인코딩은 라이브러리가 알아서 안전하게 처리한다고 생각하기 쉽다. proxy와 앱의 decode 시점이 다를 수 있기 때문이다.
- 핵심 판단 포인트는 raw URI, normalized URI, decoded route parameter를 구분해 로그와 테스트로 확인하는 것이다.
- 도메인은 보기 좋은 이름 짓기라고 생각하기 쉽다. 실제로는 브라우저 보안 정책과 인프라 정책의 기준이기 때문이다.
- 핵심 판단 포인트는 cookie, CORS, TLS, OAuth, WAF, admin 접근 정책을 도메인 구조와 같이 설계하는 것이다.
확인 질문
- DNS TTL은 왜 배포와 이전 작업에서 중요한가?
- 일부 resolver와 client가 이전 값을 계속 사용할 수 있어 old/new 서버로 traffic이 나뉠 수 있기 때문이다.
- Host Header를 백엔드에서 그대로 믿으면 위험한 이유는 무엇인가?
- 클라이언트가 조작할 수 있고 proxy 신뢰 경계 밖의 값일 수 있기 때문이다.
- DNS가 정상이어도 웹 요청이 실패할 수 있는 이유는 무엇인가?
- TCP, TLS, HTTP, proxy, application 계층은 DNS 이후에 별도로 실패할 수 있기 때문이다.
- redirect URL을 문자열 prefix로 검증하면 위험한 이유는 무엇인가?
- 공격자가 비슷한 prefix의 다른 host, userinfo 문법, encoding 차이를 이용해 allowlist를 우회할 수 있기 때문이다.
- 도메인 이전 중 old origin을 유지해야 하는 이유는 무엇인가?
- TTL과 client cache 때문에 일부 사용자가 계속 old IP로 갈 수 있고, old origin이 내려가면 그 사용자만 실패하기 때문이다.
- subdomain takeover는 어떤 상황에서 생기는가?
- DNS record가 외부 SaaS 대상을 가리키지만 해당 SaaS 리소스가 해제되어 다른 사람이 그 대상을 점유할 수 있을 때 생긴다.