요약

  • RFC 3467은 DNS가 모호한 사람의 질의에서 사람, 제품 또는 자원을 추론하는 도구가 아니라, 정확하고 고유한 네트워크 식별자를 해석하기 위해 만들어졌다고 논증했다.
  • 그것이 제안한 검색 계층은 표준이나 배포가 아니라 아키텍처적 분리였다. 발견(discovery) 단계는 후보를 산출할 수 있으며, DNS는 선택된 정확한 이름을 해석하는 더 좁은 역할을 그대로 유지한다.

점원에게 필요한 것은 설명이 아니라 키였다

"파란 간판이 달린 역 근처 카페"를 점원에게 찾아달라고 한다고 상상해 보라. 훌륭한 디렉터리는 어느 역인지 물어보고, 오타를 허용하며, 여러 후보를 순위 매기고 맥락을 보여줄 수 있다. DNS 리졸버는 훨씬 절제된 일을 한다. 완성된 이름과 레코드 타입을 주면, 분산된 계층 구조를 따라 그에 대응하는 데이터를 찾아낸다. 말하는 사람이 염두에 둔 카페가 어느 곳인지 판단하도록 만들어진 것이 아니다.

RFC 3467은 존 클렌신(John Klensin)이 도메인 이름 시스템의 역할에 대해 쓴 Informational 메모로, 2003년에 이 대조를 드러냈다. 그 초록은 이례적으로 신중했다. 이 문서는 시스템의 원래 목적을 검토하고, 더 새로운 요구들과 비교하며, 대안적 프레임워크의 개요를 제시했다. 그 프레임워크는 제안된 해결책이 아니었다. 역사 역시 재구성으로 제시되었는데, 많은 초기 설계 동기가 충분히 문서화되지 않았고 참여자들은 서로 다르게 기억할 수 있었기 때문이다.

이 신중함은 중요하다. 그 메모는 DNS가 작동을 멈췄다고 선언한 것이 아니었다. 성능과 신뢰성은 여전히 수용 가능해 보였고 심각한 열화의 증거도 거의 없다고 밝혔다. 더 깊은 우려는 아키텍처적이었다. 인터넷은 정밀한 조회 시스템에 발견, 분류, 문화적으로 민감한 매칭을 수행하도록 요구하기 시작했다. 연이은 임시 방편은 개별 애플리케이션을 계속 움직이게 하면서 공통 계층을 이해하기 어렵게 만들 수 있었다.

원래의 거래가 사들인 것

DNS 이전에는 자주 복사되는 호스트 테이블이 이름을 네트워크 주소에 매핑했다. 이름 덕분에 사람들은 숫자를 외우지 않아도 되었고, 토폴로지 변화에 따른 주소 변경을 견딜 수 있었으며, 여러 주소를 가진 호스트를 가리킬 수도 있었다. 네트워크가 커지면서 하나의 테이블을 분산시키는 방식은 더 이상 확장되지 않았다. DNS는 고유하고 모호하지 않은 이름 체계를 유지하면서 조회와 관리를 계층 구조를 통해 분산시켰다. 또한 메일 같은 서비스를 위한 추가 레코드 타입을 허용했다.

이 확장성이 원래의 과제를 지우지는 않았다. RFC 3467은 DNS를 사람, 브랜드, 제품, 문서가 아닌 네트워크 자원을 식별하는 시스템으로 묘사했다. 와이어 형식은 호스트네임에서 익숙한 좁은 문자·숫자·하이픈보다 더 많은 것을 담을 수 있었지만, 애플리케이션들은 사용 가능한 이름이 어떤 모습인지에 관해 자신들의 가정을 쌓아왔다. 비트를 저장할 수 있는 구조가 모든 이름 지정 문제에 대한 중립적 답이 되는 것은 아니었다.

2003년 무렵, 메모는 DNS가 "편의를 위한 데이터베이스"가 되었다고 주장했다. DNS가 존재하고, 광범위하게 배포되어 있고, 거의 어디서나 질의할 수 있었기 때문에 새 데이터가 그곳으로 제안되었다. 이는 강력한 운영상 이점이다. 그러나 이것이 계층 구조, 비교 규칙, 캐싱 동작 또는 공개 권한 모델이 새로운 데이터에 적합하다는 것을 보여주지는 않는다.

정확한 동등성은 유용한 유사성이 아니다

이 구분은 실패한 질의에서 드러난다. DNS 비교는 결국 결정론적 일치 또는 불일치를 산출해야 한다. 사람의 검색은 근사 일치, 대체 표기, 다른 문자 체계, 지역 관례 또는 여러 그럴듯한 결과를 필요로 할 수 있다. 키뿐 아니라 속성과 값을 검색해야 할 수도 있다. 어떤 후보가 왜 다른 후보보다 위에 놓였는지 설명해야 할 수도 있다.

RFC 3467은 이 불일치를 무시하기 어렵게 만든 압력들을 나열했다: 평평한 상업용 네임스페이스에 밀어 넣어진 회사·제품 이름, 하나의 호스트를 가리키는 많은 공개 이름, 근접성이나 대상에 따라 달라지는 응답, 권한이 다른 호출자에게 노출되는 개인 정보, 그리고 지각되는 유사성이 언어와 맥락에 따라 달라질 수 있는 다국어 이름. 메모는 퍼지 매칭이 안전하다고 증명하지 않았다. 오히려 유연성이 사기, 혼란, 상표 분쟁을 만들 수 있음을 인정했다.

국제화는 이 경계를 녹이지 않고 더 날카롭게 만들었다. 문자열 준비(string preparation)는 결정론적 조회 전에 문자를 매핑하거나 거부할 수 있다. 그것은 사용자가 의도한 것을 검색하는 것과 같지 않다. 정규화는 지정된 변형을 비교 형태로 줄인다. 퍼지 발견은 여러 후보가 남을 수 있음을 인정한다. 전자는 정확한 리졸버에 입력을 제공할 수 있다. 후자는 순위, 맥락, 눈에 보이는 선택을 필요로 한다.

같은 한계는 다른 방향에서도 나타났다. DNS는 일반적으로 "이 레코드 값을 가진 이름은 무엇인가"에 답할 수 없었다. 자원 레코드와 연관된 이름을 찾기 위해 고안된 오래된 IQUERY 메커니즘은 불량한 구현과 운영 경험 이후에 폐기되었다. 역방향 주소 매핑은 별개의 이름이 지정된 기능으로 남아 있었다. RFC 3467의 요점은 역방향 매핑이 없다는 것이 아니라, DNS가 일반적인 데이터베이스 검색 엔진이 아니라는 것이었다.

해석보다 발견을 먼저 두어라

메모의 대안은 2단계 아키텍처였다. 검색 또는 디렉터리 계층이 느슨한 사람의 입력을 받아들인다. 언어와 국가 같은 속성을 담을 수 있고, 지역에 맞는 매칭 규칙을 사용할 수 있으며, 맥락과 함께 하나 이상의 후보 이름을 반환할 수 있다. 사람 또는 에이전트가 후보를 선택한 후, 보통의 DNS가 결과로 나온 정확한 식별자를 해석한다.

이 분리는 두 종류의 진실을 보호한다. 디렉터리 결과는 어떤 후보가 특정 색인, 규칙 집합, 시점에서 질의에 일치했다고 말한다. DNS 응답은 특정 리졸버 맥락이 정확한 이름에 대한 레코드를 얻었다고 말한다. 어느 영수증도 다른 쪽을 증명하지 않는다. 높은 순위의 후보는 잘못된 대상을 가리킬 수 있다. 유효한 DNS 응답은 이용 불가능한 서비스로 이어질 수 있다. 인증된 레코드는 데이터의 출처를 보호할 수 있지만, 사용자가 의도한 개체를 선택했다는 것을 증명하지는 않는다.

검색 계층은 공짜가 아니었다. 그 색인은 낡거나 조작될 수 있고, 순위는 상업적 유인을 부호화할 수 있으며, 지역 매칭 규칙은 같은 질의가 다르게 동작하게 만들 수 있고, 두 번째 데이터베이스는 또 다른 공격 및 거버넌스 표면을 만든다. RFC 3467의 보안 절은 네트워크 자원을 찾는 데 쓰이는 디렉터리가 무단 변경에 대한 보호를 필요로 한다고 말했다. 더 많은 계층은 더 많은 인계를 보안해야 한다는 뜻이지, 권한으로부터의 마법의 탈출이 아니었다.

가치 있는 결과는 경계였다

RFC 3467은 디렉터리를 배포하거나, 프로토콜을 정의하거나, 마이그레이션을 시연하지 않았다. 더 검소하고 더 오래 지속되는 일을 했다: 모든 이름 질문을 하나의 질문으로 취급하는 것을 멈춘 것이다. 공통 인터넷은 의미가 안정적으로 남는 정확한 식별자를 필요로 했다. 사람들은 또한 그 식별자를 발견하는 관대한 방법을 필요로 했다. 두 작업을 하나의 메커니즘에 밀어 넣으면 DNS를 맥락 의존적으로 만들거나 사람의 발견을 부자연스럽게 경직시킬 위험이 있었다.

운영상의 교훈은 이 봉합선을 보존하는 것이다. 원래 질의와 그 맥락, 반환된 후보, 이루어진 선택, 제출된 정확한 DNS 이름, 리졸버 맥락, 받은 응답, 접촉한 엔드포인트, 애플리케이션 결과를 기록하라. 성공적인 최종 연결이 앞선 모호성을 지워서는 안 된다. 정확한 답은 키가 해석되었다는 증거일 뿐, 키가 사람이 의미한 것이라는 증거가 아니다.

출처