한글 음절은 유니코드 기본 다국어 평면 안에 완성형으로 11,172자가 통째로 등록되어 있어(U+AC00~U+D7A3), "한"처럼 자음과 모음이 결합된 한 글자도 결국 단 하나의 코드 포인트이며 단 하나의 이스케이프 코드, 예를 들어 \ud55c로 표현됩니다.
완성형 한글과 옛한글 자모의 차이
현대 한글 음절은 자음+모음(+받침)을 하나의 완성형 코드 포인트로 미리 조합해 저장하지만, 옛한글 표기나 자모를 개별적으로 다뤄야 하는 경우에는 호환용 자모 영역(U+3130~U+318F)의 개별 코드 포인트를 따로 이어 붙여야 합니다. 두 방식 모두 유효한 유니코드지만, 같은 글자처럼 보여도 완전히 다른 이스케이프 코드 시퀀스를 만들어냅니다.
JSON과 이스케이프 시퀀스
JSON 명세는 문자열의 어떤 문자든 \uXXXX로 이스케이프하는 것을 허용합니다. 이는 데이터가 프로그램적으로 생성되고 직렬화기가 호환성을 위해 ASCII 밖의 문자를 의도적으로 피할 때 자주 나타나며, "안녕하세요" 같은 인사말도 JSON에서는 여러 개의 이스케이프 코드로 이루어진 시퀀스로 보일 수 있습니다.
언제 필요한가
- API의 JSON 응답에서 이스케이프 시퀀스 뒤에 숨은 텍스트를 일반 언어로 읽을 때.
- ASCII 밖의 문자를 허용하지 않는 환경을 위해 문자열을 준비할 때.
- 외부 데이터를 다룰 때 인코딩 문제를 진단할 때.
기본 평면 밖의 문자(이모지)
한글 음절은 완성형이든 옛한글 자모든 모두 기본 다국어 평면 안에 있어 하나의 이스케이프 코드로 충분합니다. 반면 이모지는 이 평면 밖에 있어 자바스크립트에서 두 개의 이스케이프 코드, 즉 \ud83d\ude00과 같은 서로게이트 쌍으로 인코딩되는데, 이는 한글에서는 전혀 일어나지 않는 상황입니다.