Punycode 변환기 (국제화 도메인 이름)
일본어 등 비ASCII 문자를 포함한 국제화 도메인 이름(IDN)과 Punycode(ASCII 호환 인코딩)를 상호 변환합니다.
퓨니코드란
DNS는 역사적으로 ASCII 문자만 다룰 수 있습니다. 그런데 「日本語.jp」처럼 **한자나 가나를 포함한 도메인 이름**을 쓰고 싶다는 요구가 있었고, 그 다리 노릇으로 만들어진 것이 퓨니코드(RFC 3492)입니다. 유니코드 문자열을 `xn--`로 시작하는 ASCII 문자열로 가역적으로 변환함으로써, 기존 DNS를 그대로 쓰면서 국제화 도메인 이름(IDN)을 실현합니다.
변환 결과가 사람에게는 읽히지 않는 문자열이 되는 것은 사양대로입니다. `日本語.jp`는 `xn--wgv71a119e.jp`가 됩니다. **브라우저의 주소창은 변환된 모습을 감추고 원래 문자로 표시하기** 때문에 평소에는 의식하지 않아도 됩니다. 한편 이 겉모습의 차이는 **피싱에 악용될 수 있는 약점**이기도 하여, 키릴 문자 「а」와 라틴 문자 「a」처럼 분간이 가지 않는 글자를 쓴 가짜 도메인이 문제가 되어 왔습니다. 이 도구는 양방향 변환을 수행하며, **처리는 모두 브라우저 안에서 완결됩니다.**
변환하는 순서
- 변환의 방향을 고릅니다 도메인 이름→퓨니코드, 퓨니코드→도메인 이름 가운데 하나를 고릅니다.
- 도메인 이름을 입력합니다 `日本語.jp`처럼 최상위 도메인까지 포함한 형태로 입력해 주세요.
- 결과를 확인합니다 `xn--`로 시작하는 변환 결과 또는 원래 문자열이 표시됩니다.
- 견주어 확인합니다 변환된 ASCII 표기로 **헷갈리기 쉬운 문자가 섞여 있지 않은지**를 확인할 수 있습니다.
더 잘 활용하기 위한 팁
- 여러 레이블(`.`로 구분된 부분)로 이루어진 도메인 이름도 레이블 단위로 자동 판별하여 변환합니다. ASCII 문자만으로 된 레이블은 그대로 두고, 비ASCII 문자를 포함한 레이블만 `xn--` 접두사가 붙은 형태로 변환됩니다.
- "Punycode → 도메인 이름" 모드에서는 `xn--` 접두사가 붙은 레이블만 디코딩 대상이 되며, 그 외 레이블은 그대로 처리됩니다.
- 도메인 이름뿐만 아니라 이메일 주소에서 `@` 뒤에 오는 부분(도메인 부분)에도 동일한 변환 로직을 적용할 수 있습니다.
- 실제로 브라우저 주소창에 국제화 도메인 이름을 입력하면, 대부분의 브라우저는 내부적으로 Punycode로 변환한 뒤 DNS 조회를 수행합니다.
이럴 때 쓸 수 있습니다
한글·일본어 도메인을 등록·설정할 때
DNS 설정 파일이나 서버 인증서에는 퓨니코드 표기가 필요한 경우가 있습니다.
메일의 보낸 사람을 확인할 때
**표시 이름은 정규로 보여도 퓨니코드로 고치면 다른 도메인이었다**는 사례는 실제로 있습니다.
로그에 나타난 xn--를 읽을 때
접속 로그나 리포트에 나온 `xn--` 문자열이 무엇을 가리키는지 조사할 수 있습니다.
설정 파일을 검증할 때
nginx나 Apache의 설정에서 IDN을 그대로 써도 되는지 확인하는 데 쓸 수 있습니다.
퓨니코드 용어
- 퓨니코드
- 유니코드 문자열을 ASCII 문자열로 가역적으로 변환하는 방식입니다(RFC 3492). **변환 결과는 반드시 `xn--`로 시작합니다.**
- IDN(국제화 도메인 이름)
- ASCII 이외의 문자를 포함한 도메인 이름입니다. 내부적으로는 퓨니코드로 변환되어 DNS를 통과합니다.
- xn--
- 퓨니코드로 부호화된 레이블임을 나타내는 접두사입니다. ACE 프리픽스라고 부릅니다.
- 레이블
- 도메인 이름을 점으로 구분한 각 요소입니다. **변환은 레이블마다 이루어집니다.**
- 동형이의 공격
- 겉모습이 매우 닮은 다른 문자를 써서 가짜 도메인을 만드는 수법입니다. **퓨니코드 표기로 고치면 간파할 수 있습니다.**
- IDNA
- IDN을 DNS에서 다루기 위한 일련의 사양입니다. 현재는 IDNA2008(RFC 5890 이후)이 쓰입니다.
자주 묻는 질문
여담 ― "고양이"와 "日本語"가 도메인 이름이 되기까지의 뒷이야기
국제화 도메인 이름(IDN)에 관한 논의는 1990년대 후반부터 시작되었지만, 표준화까지는 오랜 시간이 걸렸습니다. DNS의 근간을 바꾸지 않으면서 비ASCII 문자를 다루는 방법으로 여러 방식이 제안되었지만, 최종적으로 "애플리케이션 계층(클라이언트 측)에서 인코딩·디코딩을 수행하고 DNS 서버 자체는 변경하지 않는다"는 Punycode 방식이 채택되어 2003년 RFC 3492로 표준화되었습니다.
Punycode라는 이름은 "Unicode"와 "an amusing pun(재미있는 말장난)"에서 유래했다고 전해지며, 알고리즘 자체는 Bootstring(IBM 연구자들이 고안한, 임의의 문자 집합을 제한된 문자 집합으로 인코딩하는 범용 기법)이라는 더 일반적인 인코딩 기법을 도메인 이름에 특화시킨 것입니다. "Punycode"라는 이름의 유래 자체에 농담이 섞여 있다는 점에서 개발자 커뮤니티다운 유머가 느껴집니다.
현재 일본어 도메인(`.jp`)이나 이모지 도메인(`💩.la`와 같은 실제 사례도 존재) 등 다양한 언어와 기호를 사용한 도메인 이름이 실제로 등록·운영되고 있지만, 그 이면에서는 반드시 이 Punycode 변환 처리가 이루어지고 있습니다. 브라우저 주소창에 표시되는 아름다운 일본어 도메인도, DNS 서버와의 통신에서는 `xn--`로 시작하는 소박한 ASCII 문자열로 주고받아지고 있는 것입니다.