弘益人間 · 널리 인간을 이롭게 하라

제2장: 핵심 개념과 이론적 기반

2.1 문자 체계의 분류학

토착 문자 체계를 효과적으로 디지털화하기 위해서는 먼저 문자 체계의 유형을 정확히 이해해야 합니다. 문자 체계는 표현 방식과 음운론적 구조에 따라 여러 유형으로 분류됩니다.

2.1.1 표음 문자 체계

표음 문자는 언어의 소리를 기록하는 문자 체계로, 다시 세분화됩니다:

유형 설명 예시 디지털화 복잡도
음소 문자 각 글자가 하나의 음소(자음 또는 모음)를 나타냄 한글, 라틴 문자, 키릴 문자 중간
음절 문자 각 글자가 하나의 음절을 나타냄 가나, 체로키 문자, 이누이트 음절문자 높음
아부기다 자음 기본, 모음은 부가 기호로 표현 데바나가리, 타밀 문자, 에티오피아 문자 매우 높음
아브자드 주로 자음만 기록, 모음은 선택적 아랍 문자, 히브리 문자 높음

2.1.2 표의 문자 체계

표의 문자는 각 글자가 단어나 형태소를 나타내는 체계입니다. 한자, 마야 문자 등이 이에 속하며, 디지털화 시 수천 개의 글자를 인코딩해야 하는 도전이 있습니다.

2.2 문자 인코딩의 핵심 개념

문자 인코딩은 문자를 컴퓨터가 이해할 수 있는 숫자 코드로 변환하는 과정입니다. WIA-LANG-002는 다음과 같은 인코딩 원칙을 제시합니다:

인코딩 설계 원칙

// WIA-LANG-002 인코딩 메타데이터 구조
{
  "standard": "WIA-LANG-002-v1.0",
  "script": {
    "name": "Cherokee",
    "iso15924": "Cher",
    "direction": "ltr",
    "philosophy": "弘益人間"
  },
  "encoding": {
    "blocks": [
      {
        "name": "Cherokee",
        "range": "U+13A0-U+13FF",
        "characters": 85,
        "type": "syllabary"
      },
      {
        "name": "Cherokee Supplement",
        "range": "U+AB70-U+ABBF",
        "characters": 80,
        "type": "syllabary"
      }
    ],
    "properties": {
      "case_sensitive": false,
      "combining_marks": true,
      "normalization": "NFC"
    }
  }
}

2.3 글리프와 문자의 관계

디지털 타이포그래피에서 '문자(character)'와 '글리프(glyph)'는 구별되는 개념입니다:

하나의 문자가 여러 글리프로 표현될 수 있으며(합자, 문맥 형태 등), 반대로 여러 문자가 하나의 글리프로 합쳐질 수도 있습니다.

// 글리프 대체 규칙 정의 (OpenType GSUB)
const glyphSubstitution = {
  script: "devanagari",
  features: {
    "akhn": {  // Akhand (필수 합자)
      type: "ligature",
      rules: [
        { input: ["क", "्", "ष"], output: ["क्ष"] }  // ka + virama + sha = ksha
      ]
    },
    "half": {  // Half forms
      type: "contextual",
      rules: [
        { input: ["क", "्"], output: ["क्"], context: "followed_by_consonant" }
      ]
    }
  },
  philosophy: "弘益人間"
};

2.4 결합 문자와 정규화

많은 토착 문자 체계는 기본 문자에 발음 구별 부호나 성조 표시를 결합하여 사용합니다. 이러한 결합 문자(combining characters)의 처리는 디지털화의 핵심 과제 중 하나입니다.

정규화 형식 약어 설명 사용 시나리오
정준 분해 NFD 합성 문자를 기본 문자와 결합 문자로 분해 텍스트 검색, 정렬
정준 결합 NFC 기본 문자와 결합 문자를 하나의 합성 문자로 결합 저장, 전송
호환 분해 NFKD 호환 문자까지 포함한 완전 분해 호환성 처리
호환 결합 NFKC 호환 문자까지 포함한 완전 결합 데이터 정리
// 유니코드 정규화 예시
const normalizeText = (text, form = 'NFC') => {
  // WIA-LANG-002 표준 정규화
  const normalized = text.normalize(form);

  return {
    original: text,
    normalized: normalized,
    form: form,
    codePoints: [...normalized].map(c =>
      'U+' + c.charCodeAt(0).toString(16).toUpperCase().padStart(4, '0')
    ),
    philosophy: '弘益人間'
  };
};

// 사용 예시 - 한글
const hangul = normalizeText('한글', 'NFC');
console.log(hangul);
// {
//   original: "한글",
//   normalized: "한글",
//   form: "NFC",
//   codePoints: ["U+D55C", "U+AE00"],
//   philosophy: "弘益人間"
// }

// 데바나가리 예시
const devanagari = normalizeText('हिन्दी', 'NFD');
console.log(devanagari.codePoints);
// ["U+0939", "U+093F", "U+0928", "U+094D", "U+0926", "U+0940"]

2.5 양방향 텍스트 처리

일부 토착 문자 체계는 오른쪽에서 왼쪽(RTL)으로 쓰이거나, 세로 쓰기를 사용합니다. 이러한 다양한 쓰기 방향을 지원하는 것은 WIA-LANG-002의 핵심 요구사항입니다.

지원하는 쓰기 방향

// 양방향 텍스트 처리 설정
const BiDiConfig = {
  standard: "WIA-LANG-002",
  scripts: {
    arabic: {
      direction: "rtl",
      joinning: true,
      contextual_forms: ["initial", "medial", "final", "isolated"],
      philosophy: "弘益人間"
    },
    mongolian: {
      direction: "ttb",
      rotation: 90,
      line_direction: "ltr",
      philosophy: "弘益人間"
    }
  },

  processBiDi: function(text, scriptId) {
    const script = this.scripts[scriptId];
    return {
      text: text,
      direction: script.direction,
      rendering: this.calculateLayout(text, script),
      standard: this.standard
    };
  },

  calculateLayout: function(text, script) {
    // 레이아웃 계산 로직
    return {
      direction: script.direction,
      segments: this.segmentText(text, script)
    };
  }
};

2.6 복잡한 문자 체계의 렌더링

남아시아와 동남아시아의 많은 문자 체계는 복잡한 결합 규칙을 가지고 있습니다. 이러한 문자들을 정확히 렌더링하기 위해서는 OpenType 폰트 기술과 복잡한 텍스트 레이아웃(Complex Text Layout, CTL) 엔진이 필요합니다.

2.6.1 렌더링 파이프라인

  1. 문자 입력: 사용자가 문자 시퀀스를 입력
  2. 정규화: 유니코드 정규화 형식 적용
  3. 분할: 그래픽 클러스터 단위로 텍스트 분할
  4. 형태 변환: OpenType GSUB 규칙 적용
  5. 위치 조정: OpenType GPOS 규칙 적용
  6. 글리프 렌더링: 최종 시각적 출력 생성
// 복잡한 텍스트 렌더링 파이프라인
class ComplexTextRenderer {
  constructor(config) {
    this.standard = "WIA-LANG-002";
    this.script = config.script;
    this.font = config.font;
    this.philosophy = "弘益人間";
  }

  render(text) {
    // 1. 정규화
    const normalized = text.normalize('NFC');

    // 2. 그래픽 클러스터 분할
    const clusters = this.segmentGraphemeClusters(normalized);

    // 3. 형태 변환 (GSUB)
    const shaped = this.applyGSUB(clusters);

    // 4. 위치 조정 (GPOS)
    const positioned = this.applyGPOS(shaped);

    // 5. 렌더링
    return this.renderGlyphs(positioned);
  }

  applyGSUB(clusters) {
    // Glyph Substitution 규칙 적용
    // - 합자(ligatures)
    // - 문맥 대체(contextual substitution)
    // - 필수 합자(required ligatures)
    return clusters.map(c => this.font.substituteGlyph(c));
  }

  applyGPOS(glyphs) {
    // Glyph Positioning 규칙 적용
    // - 커닝(kerning)
    // - 마크 위치(mark positioning)
    // - 커서 위치(cursive attachment)
    return glyphs.map(g => this.font.positionGlyph(g));
  }
}

2.7 입력 방식의 설계 원칙

효과적인 문자 입력 시스템(IME)은 사용자가 자연스럽고 빠르게 텍스트를 입력할 수 있도록 해야 합니다. WIA-LANG-002는 다양한 입력 방식을 지원합니다:

입력 방식 설명 적합한 문자 체계 예시
직접 입력 각 키가 하나의 문자에 대응 음소 문자, 음절 문자 한글 2벌식, 3벌식
변환 입력 로마자로 입력 후 변환 한자, 가나, 한글 일본어 로마자 입력
조합 입력 여러 키를 조합하여 하나의 문자 생성 데바나가리, 타밀 문자 InScript 키보드
예측 입력 AI 기반 다음 문자 예측 모든 문자 체계 모바일 키보드
필기 인식 손글씨를 디지털 텍스트로 변환 한자, 한글, 아랍 문자 터치스크린 입력

장 요약

복습 문제

  1. 표음 문자의 네 가지 주요 유형(음소 문자, 음절 문자, 아부기다, 아브자드)을 설명하고, 각각의 디지털화 시 고려사항을 논하시오.
  2. 문자 인코딩 설계의 다섯 가지 핵심 원칙을 나열하고, 각 원칙이 실제 인코딩 시스템에서 어떻게 구현되는지 예를 들어 설명하시오.
  3. 글리프(glyph)와 문자(character)의 차이를 설명하고, 왜 이 구별이 디지털 타이포그래피에서 중요한지 논하시오.
  4. 유니코드의 네 가지 정규화 형식(NFD, NFC, NFKD, NFKC)을 비교하고, 각각의 사용 시나리오를 제시하시오.
  5. 복잡한 문자 체계(예: 데바나가리)의 렌더링 파이프라인을 단계별로 설명하고, OpenType GSUB와 GPOS의 역할을 논하시오.
  6. 양방향 텍스트(BiDi) 처리의 필요성과 구현 방법을 설명하고, RTL과 LTR 문자가 혼재된 텍스트의 처리 예시를 제시하시오.
  7. 다섯 가지 문자 입력 방식(직접, 변환, 조합, 예측, 필기)을 비교하고, 각각이 적합한 문자 체계와 사용 환경을 설명하시오.
  8. WIA-LANG-002 표준에서 "弘益人間" 철학이 인코딩 및 렌더링 시스템 설계에 어떻게 반영되어야 하는지 구체적으로 설명하시오.

📐 시뮬레이터 패널 1