Punycode 변환기 (국제화 도메인 이름)

일본어 등 비ASCII 문자를 포함한 국제화 도메인 이름(IDN)과 Punycode(ASCII 호환 인코딩)를 상호 변환합니다.

사용 팁

  • 여러 레이블(`.`로 구분된 부분)로 이루어진 도메인 이름도 레이블 단위로 자동 판별하여 변환합니다. ASCII 문자만으로 된 레이블은 그대로 두고, 비ASCII 문자를 포함한 레이블만 `xn--` 접두사가 붙은 형태로 변환됩니다.
  • "Punycode → 도메인 이름" 모드에서는 `xn--` 접두사가 붙은 레이블만 디코딩 대상이 되며, 그 외 레이블은 그대로 처리됩니다.
  • 도메인 이름뿐만 아니라 이메일 주소에서 `@` 뒤에 오는 부분(도메인 부분)에도 동일한 변환 로직을 적용할 수 있습니다.
  • 실제로 브라우저 주소창에 국제화 도메인 이름을 입력하면, 대부분의 브라우저는 내부적으로 Punycode로 변환한 뒤 DNS 조회를 수행합니다.

자주 묻는 질문

Punycode(RFC 3492)는 일본어·중국어·아랍어 등 유니코드 문자를 포함한 도메인 이름(국제화 도메인 이름, IDN)을 DNS가 처리할 수 있는 ASCII 문자만으로 이루어진 문자열로 변환하기 위한 인코딩 방식입니다. 변환된 레이블에는 `xn--` 접두사가 붙습니다.

DNS(도메인 네임 시스템)는 원래 ASCII 문자만 사용한다는 전제로 설계된 시스템이기 때문에, 일본어나 이모지를 포함한 도메인 이름은 그대로는 해석할 수 없습니다. Punycode는 비ASCII 문자를 포함한 도메인 이름을 ASCII 문자열로 변환함으로써, 기존 DNS 인프라를 그대로 사용하면서도 국제화 도메인 이름을 구현할 수 있게 해줍니다.

`xn--`는 "ACE 접두사(ASCII Compatible Encoding prefix)"라고 불리며, 해당 레이블이 Punycode로 인코딩된 국제화 도메인 이름임을 DNS 및 지원 소프트웨어에 알리는 표시입니다. 브라우저 등은 이 접두사를 발견하면 표시 시 원래의 유니코드 문자열로 디코딩하여 사용자에게 보여줍니다.

네, 이는 "IDN 동형이의어 공격(호모그래프 공격)"이라고 불리는 피싱 수법으로 알려져 있습니다. 키릴 문자 "а"와 라틴 문자 "a"처럼 겉모습이 거의 동일하지만 실제로는 다른 문자를 이용해 인코딩된 Punycode 도메인(예: `xn--80ak6aa92e.com`)이 정규 도메인으로 위장한 사례가 보고된 바 있습니다. 주요 브라우저는 의심스러운 문자 조합을 감지한 경우, 주소창에 디코딩된 문자열 대신 Punycode 표기(`xn--`로 시작하는 문자열)를 그대로 표시하는 등의 대응을 하고 있습니다.
ツールくん

여담 ― "고양이"와 "日本語"가 도메인 이름이 되기까지의 뒷이야기

국제화 도메인 이름(IDN)에 관한 논의는 1990년대 후반부터 시작되었지만, 표준화까지는 오랜 시간이 걸렸습니다. DNS의 근간을 바꾸지 않으면서 비ASCII 문자를 다루는 방법으로 여러 방식이 제안되었지만, 최종적으로 "애플리케이션 계층(클라이언트 측)에서 인코딩·디코딩을 수행하고 DNS 서버 자체는 변경하지 않는다"는 Punycode 방식이 채택되어 2003년 RFC 3492로 표준화되었습니다.

Punycode라는 이름은 "Unicode"와 "an amusing pun(재미있는 말장난)"에서 유래했다고 전해지며, 알고리즘 자체는 Bootstring(IBM 연구자들이 고안한, 임의의 문자 집합을 제한된 문자 집합으로 인코딩하는 범용 기법)이라는 더 일반적인 인코딩 기법을 도메인 이름에 특화시킨 것입니다. "Punycode"라는 이름의 유래 자체에 농담이 섞여 있다는 점에서 개발자 커뮤니티다운 유머가 느껴집니다.

현재 일본어 도메인(`.jp`)이나 이모지 도메인(`💩.la`와 같은 실제 사례도 존재) 등 다양한 언어와 기호를 사용한 도메인 이름이 실제로 등록·운영되고 있지만, 그 이면에서는 반드시 이 Punycode 변환 처리가 이루어지고 있습니다. 브라우저 주소창에 표시되는 아름다운 일본어 도메인도, DNS 서버와의 통신에서는 `xn--`로 시작하는 소박한 ASCII 문자열로 주고받아지고 있는 것입니다.