아랍어 렌더링, 웹의 숨겨진 기술 부채 파헤치기

by DD
2일 전
조회수 0

아랍어 텍스트 정렬(Arabic Text Justification)은 라틴 문자와 달리 글자 자체를 늘리는 카시다(Kashida) 기법이 필요하나, 웹 표준은 이를 지원하지 않음

양방향 텍스트(Bidirectional Text) 처리의 복잡성으로 인해 커서 이동 및 텍스트 선택 시 예상치 못한 동작 발생

유니코드(Unicode)아랍어 표현 양식(Arabic Presentation Forms)과 현대적 인코딩 간의 충돌이 검색 및 데이터 처리 오류 야기

폰트 셰이핑 엔진(Font Shaping Engine)의 부재 및 OpenType 표준(OpenType Standard) 미활용이 웹에서의 아랍어 렌더링 품질 저하의 주요 원인임

카시다(Kashida) 기반 아랍어 정렬의 부재

아랍어 타이포그래피의 핵심인 카시다(Kashida)를 통한 줄 정렬은 웹 표준에서 지원되지 않아, 브라우저들은 단어 간 간격만 늘리는 방식으로 처리합니다. 이는 10세기 이븐 무클라(Ibn Muqla)가 정립한 전통적인 방식과 거리가 멀며, 렌더링 품질 저하의 주요 원인으로 지적됩니다. CSS Text Module Level 3에서 논의되었으나 구현되지 않아, 개발자들은 U+0640 TATWEEL 문자 삽입과 같은 수동적인 우회책에 의존하고 있습니다.

양방향 텍스트(Bidi) 알고리즘의 복잡성과 오류

아랍어와 라틴 문자가 혼합된 텍스트는 유니코드 양방향 알고리즘(Unicode Bidirectional Algorithm, UAX #9)에 따라 처리되지만, 이 과정에서 커서 이동, 텍스트 선택, 숫자 표기 등에서 예측 불가능한 오류가 발생합니다. 특히 약한(weak) 및 중립(neutral) 문자의 처리 규칙은 복잡하며, LRM(Left-to-Right Mark)과 같은 보이지 않는 제어 문자(Invisible Control Characters)를 삽입하는 것이 일반적인 해결책으로 제시됩니다.

레거시 인코딩과 현대 텍스트 처리의 충돌

과거 8비트 코드 페이지에서 사용되던 아랍어 표현 양식(Arabic Presentation Forms)은 현대 유니코드 인코딩과 동일하게 렌더링되지만, 비교 시 다른 값으로 인식되어 검색 및 데이터 정렬 문제를 야기합니다. NFKC 정규화(NFKC Normalization)를 통해 해결 가능하지만, 이러한 레거시 인코딩의 잔재는 PDF 텍스트 추출 등에서도 문제를 일으키며, 데이터 무결성(Data Integrity)을 저해하는 요인이 됩니다.

폰트 셰이핑 엔진과 OpenType 표준의 중요성

아랍어의 각 문자는 주변 문자에 따라 형태가 변하는 위치별 글리프(Positional Glyphs)를 가지며, 이를 처리하기 위해 폰트 셰이핑 엔진(Font Shaping Engine)OpenType 기능(OpenType Features)이 필수적입니다. HarfBuzz와 같은 엔진은 이를 지원하지만, 웹 브라우저들은 jstf 테이블 등 OpenType의 고급 기능을 충분히 활용하지 않아 아랍어 타이포그래피의 잠재력을 온전히 구현하지 못하고 있습니다.

디지털 시대의 아랍어 타이포그래피 기술 부채

수백 년간 발전해 온 아랍어 타이포그래피 전통은 웹 기술의 발전 과정에서 간과되거나 단순화되었습니다. 이븐 알-바와브(Ibn al-Bawwāb)의 서체 재현을 목표로 한 Amiri 폰트와 같은 노력에도 불구하고, 브라우저 벤더들의 낮은 우선순위 설정과 상업적 동기 부족으로 인해 카시다 정렬과 같은 핵심 기능 구현은 여전히 지연되고 있습니다. 이는 수많은 개발자가 직면하는 기술 부채(Technical Debt)의 한 단면을 보여줍니다.

An interactive introduction to the terrific experience of rendering Arabic typography and its technical debt