아랍어 타이포그래피와 디지털 렌더링의 기술적 부채

핵심 과제: 간격 조절이 아닌 형태의 변화로서의 양끝 맞춤

아랍어 타이포그래피는 라틴어 관습처럼 단어 사이의 공백을 늘리는 방식이 아니라, 글자 형태 자체를 연장하는 방식으로 양끝 맞춤(justification)을 수행합니다. taṭwīl 또는 kashida라고 알려진 이 기술은 서기(scribe)가 특정 글자 쌍 사이의 연결 획을 연장하여 줄을 여백에 맞춰 정렬할 수 있게 합니다. 이 전통에서 양끝 맞춤은 간격의 문제가 아니라 형태의 문제입니다.

현대 웹 브라우저는 이를 구현하는 데 대체로 실패합니다. CSS의 text-align: justify가 존재하지만, 아랍어의 경우 일반적으로 단어 간 간격으로 대체되어, 아랍어 서체에서 미적으로 바람직하지 않은 흰색 공백의 "river" 현상을 만들어냅니다. 적절한 kashida 양끝 맞춤을 위해서는 레이아웃 엔진이 줄에 존재하는 실제 글리프(glyph)를 기반으로 중단 지점과 연장 능력을 동시에 협상해야 하는데, 이는 라틴어 레이아웃 엔진이 처리하도록 설계되지 않은 복잡성입니다.

아랍어 서체의 구조적 복잡성

아랍어는 근본적으로 흘림체(cursive)입니다. 인쇄체와 필기체의 구분이 없습니다. 이는 모든 렌더링 엔진에 다음과 같은 몇 가지 기술적 요구사항을 생성합니다:

위치 기반 형태 변화(Positional Shaping)

각 글자는 인접한 글자와의 상대적 위치에 따라 모양이 변합니다. 단일 코드포인트는 격리된 형태(isolated), 초기 형태(initial), 중간 형태(medial), 또는 최종 형태(final) 중 하나로 렌더링되어야 합니다. 형태 변화 엔진(shaping engine)은 올바른 글리프를 결정하기 위해 렌더링 시점에 OpenType 기능(예: isol, init, medi, fina)을 적용해야 합니다.

합자 시스템(The Ligature System)

아랍어는 가독성을 위해 다양한 수준의 합자(ligature)를 필요로 합니다:

  • 필수 합자 (rlig): 문해력을 위해 필수적입니다 (예: lām-alif). 이것이 없으면 텍스트는 깨진 것으로 간주됩니다.
  • 표준 합자 (liga): 가독성을 향상시키는 일반적인 조합입니다.
  • 재량적 합자 (dlig): 미적 선택 사항이며 종종 기본적으로 꺼져 있습니다.

양방향(Bidi) 레이아웃

혼합 콘텐츠 텍스트(예: 영어 버전 번호나 URL이 포함된 아랍어 산문)는 Unicode Bidirectional Algorithm (UAX #9)을 호출합니다. 문자는 방향성 특성을 부여받습니다: 아랍어 글자는 강력한 오른쪽에서 왼쪽(RTL) 방향이며, 라틴어 글자는 강력한 왼쪽에서 오른쪽(LTR) 방향이고, 숫자는 "약한" 특성을 가져 주변 문맥에 따라 방향이 결정됩니다. 이는 메모리 상의 텍스트 논리적 순서와 화면상의 시각적 순서 사이의 불일치를 초래하며, 종종 런(run) 경계에서 커서가 예상치 못하게 튀는 "거짓 커서(lying cursors)" 현상을 유발합니다.

숫자 렌더링과 Bidi의 함정

아랍어에서 숫자를 렌더링하는 것은 세 가지 별개의 숫자 세트의 존재로 인해 복잡합니다:

  1. 아랍-인디 숫자 (٠-٩): 이집트, 레반트, 걸프 지역에서 사용됩니다.
  2. 라틴 숫자 (0-9): 마그레브 지역에서 사용됩니다.
  3. 확장 아랍-인디 숫자 (۰-۹): 이란, 아프가니스탄, Pakistan에서 사용됩니다.

Bidi 알고리즘에서 숫자는 "약한" 문자이기 때문에 레이아웃 실패를 유발할 수 있습니다. 예를 들어, "010-1234-5678"과 같은 전화번호는 주변 문맥이 RTL인 경우 하이픈이 중립적이고 숫자 런(run)이 사양에 따라 교체되므로 "5678-1234-010"으로 렌더링될 수 있습니다.

기술적 타협의 역사

서체의 요구사항과 기계의 능력 사이의 간격은 역사적으로 서체를 단순화하는 방식으로 채집되었습니다:

  • 초기 인쇄 (1514): 최초의 가동식 활자 아랍어 책들은 서체를 읽을 수 없는 장인들에 의해 제작되었으며, 그 결과 글자가 분리되거나 점이 어긋나는 결과가 초래되었습니다.
  • Bulaq Press (1820): 이집트의 국가 지원 노력으로, 위치 기반 형태 변화와 합자를 위해 수백 개의 별도 금속 활자를 사용함으로써 마침내 서체의 복잡성을 존중했습니다.
  • Simplified Arabic (1958): Linotype 기계의 제한된 채널을 수용하기 위해 서체가 "수술"되었습니다: 초기 형태는 중간 형태로, 최종 형태는 격리된 형태로 융합되었고, 합자는 생략되었습니다. 이 "Simplified Arabic"는 저렴하고 빠르기 때문에 뉴스룸의 글로벌 표준이이었습니다.

오픈 소스 및 자원봉사자의 역할

현재 아랍어 렌더링을 위한 기능적 인프라의 상당 부분은 상업적 투자보다는 무급 자원봉사자의 작업 결과입니다:

  • HarfBuzz: Chrome과 Android에서 사용하는 형태 변화 엔진으로, 올바른 형태 변화를를 기본 경험으로 만듭니다. Behdad Esfahbod와 Khaled Hosny 같은 엔지니어들에 의해 크게 발전되었습니다.
  • Amiri Font: Khaled Hosny가 만든 무료 Naskh 서체로, 1924년 카이로 꾸란(Cairo Qurʾān)의 금속 활자를 재현합니다. 이는 곡선형 kashida와 복잡한 마크 스태킹을 구현하는 몇 안 안의 무료 폰트입니다.
  • Unicode 및 W3C: UAX #9 및 W3C Arabic Layout Requirements와 같은 사양양은 존재하지만, 브라우저에서의 구현은 정체되어 있습니다. OpenType의 jstf 테이블은 양끝 맞춤 우선순위를 위해 설계되었지만 엔진들에 의해 대부분 읽히지 않습니다.

"전체 스택이 수백만 명의 사람들이 읽는 서체가 인프라를 누릴 자격이 있다는 것을 결정하고... 그 후 앉아서 무료로 그것을 구축한 소수의 인원들에게 의겨합니다."

기술적 부채의 요약

Feature Ideal State Current Web State
Justification 내부 연장 (kashida) 단어 간 간격 (라틴 스타일)
Shaping 문맥 인식 글리프 선택 HarfBuzz를 통해 대부분 해결됨
Bidi 원활한 혼합 방향 편집 일관성 없는 커서 동작/런-플립핑
Digits 로컬 인식 숫자 세트 선택 빈번한 Bidi 유도 재정렬
Ligatures 필수 및 미적 합자 전체 세트 종종 최소한의 수준에 국한됨

Sources