모든 아티클

텍스트 뒤집기: 이모지에서 왜 깨질까

"소주 만병만 주소" 같은 한국어 회문은 공백을 무시하면 앞뒤로 똑같이 읽힙니다. 현대 한글은 대부분의 경우 문자 단위로 단순히 뒤집어도 문제없이 동작하는데, 그 이유는 완성형 한글 음절 하나하나가 유니코드에서 이미 결합된 단일 코드 포인트(U+AC00~U+D7A3)로 저장되기 때문입니다.

자모 분리형 한글이라는 예외

다만 모든 한글이 이렇게 안전한 것은 아닙니다. 옛한글이나 일부 텍스트 처리 방식에서는 초성·중성·종성 자모를 결합 문자 시퀀스로 개별 저장하는 경우가 있습니다. 이런 자모 분리형 문자열을 코드 포인트 단위로 단순히 뒤집으면, 자모의 순서가 뒤바뀌어 원래 음절이 전혀 다른 조합으로 깨져버립니다.

그래핌 클러스터란

사람이 "하나의 보이는 문자"로 인식하는 것이 유니코드에서는 여러 코드 포인트로 이루어진 경우가 있습니다. 가족 이모지(👨‍👩‍👧)가 대표적인 예로, 실제로는 폭이 0인 결합 문자(zero-width joiner)로 연결된 여러 개의 개별 이모지입니다. 이런 조합을 그래핌 클러스터라고 부릅니다.

순진한 뒤집기가 모든 걸 망가뜨리는 이유

문자열을 그래핌 클러스터가 아니라 개별 코드 포인트 단위로 뒤집으면 결합 문자가 엉뚱한 위치로 옮겨가고, 하나의 이모지 대신 서로 관련 없는 문자들이 나열된 결과가 나옵니다 — 흔히 깨진 사각형이나 원본과 무관한 이모지처럼 보입니다.

올바른 뒤집기

제대로 된 구현은 먼저 문자열을 그래핌 클러스터(결합 문자, 수식자, 자모 결합 시퀀스를 고려한 단위)로 분리한 뒤, 그 안의 개별 코드 포인트가 아니라 클러스터 자체의 순서를 뒤집습니다.

어디에 쓰이는가

  • 회문을 검증하거나 "거울" 텍스트 효과를 만들 때.
  • 코드의 유니코드 처리 버그를 시연하거나 진단할 때.
  • 이모지가 포함된 텍스트를 정확히 뒤집어야 하는 오락 또는 학습용 과제.
도구 사용해보기