발표는 먼저 문자 코드의 탄생 배경을 몰스 부호, 아스키(ASCII), EBCDIC 등의 과거 통신 및 컴퓨팅 기술과 연결하여 설명합니다. 특히 EBCDIC 환경에서 일본어를 처리할 때 겪었던 반각 가타카나 및 시프트 인/아웃 제어 문자의 복잡한 사용 사례를 통해, 제한된 문자 코드 공간에서 다양한 문자를 다루는 것이 얼마나 어려웠는지를 생생하게 전달합니다. 이는 문자를 ‘그대로 입력하고 표시하는 것’이 결코 당연한 일이 아님을 깨닫게 된 계기가 됩니다.
이어서 발표자는 Ruby IRB에서 가족 이모지(Family Emoji) 입력 시 발생했던 크래시 버그 사례를 소개합니다. 이모지가 겉으로는 한 글자처럼 보이지만 실제로는 여러 코드 포인트로 구성되어 있어, 커서 이동이나 삭제 시 내부적인 불일치가 발생하여 시스템 충돌을 일으켰습니다. 이러한 문제를 해결하기 위해 유니코드의 ‘초기소 클러스터(Grapheme Cluster)’ 개념이 도입되었음이 설명됩니다. 초기소 클러스터는 여러 코드 포인트를 사용자에게는 하나의 문자로 보이도록 묶어 처리하는 방식으로, 루비의 String#grapheme_clusters
메소드와 Onigmo 정규 표현식 엔진이 이를 지원함을 밝힙니다.
마지막으로, Ruby를 유니코드 15.1.0으로 업그레이드하는 과정에서 겪었던 기술적 난관과 해결 과정을 공유합니다. 특히, 인도계 문자의 올바른 조합을 위한 ‘Indic Conjunct Break’ 규칙 추가와 관련된 파싱 실패 및 초기소 클러스터 분할 로직 수정 경험을 상세히 설명합니다. DerivedCoreProperties.txt
파일의 새로운 속성 처리와 GraphemeBreakTest.txt
를 통한 테스트 실패를 분석하고, Onigmo 엔진 내부의 초기소 클러스터 분할 로직을 유니코드 표준에 맞춰 강화하는 과정을 보여줍니다. 이를 통해 Ruby가 최신 유니코드 버전을 지원하고 다양한 언어의 문자를 정확하게 처리할 수 있도록 발전하는 모습을 보여주며, 현재 진행 중인 유니코드 16.0.0의 정규화(Normalization) 관련 과제에 대해서도 간략히 언급합니다.