# Hangul Composition

> 한글 모아쓰기 구조 지식 스킬. 자모 체계(초성 19·중성 21·종성 27), 음절 블록 유형 6종과 슬롯 박스 기본값, 유니코드 조합 공식, 커버리지 단계 전략을 제공. 한글 자모 목록, 음절 분해, 블록 유형 판별, 조합 규칙, 커버리지 계획이 필요한 모든 폰트 작업에서 반드시 이 스킬을 참조할 것.

- Skill: `revfactory/hangul-composition` (Agent Skill)
- Install (CLI): `npx skillmds@latest add revfactory/hangul-composition`
- Raw SKILL.md: https://api.skillmd.com/api/skills/revfactory/hangul-composition/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: revfactory (https://skillmd.com/u/revfactory)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/revfactory/hangul-composition

---


# 한글 모아쓰기 구조

한글 음절은 자모(낱자)를 정사각 블록 안에 조합해 만든다. 이 문서가 자모 목록·블록 유형·슬롯 기본값의 단일 기준이다.

## 자모 목록 (유니코드 인덱스 순 — 조합 공식에 사용)

**초성 19자** (인덱스 0~18):
ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ

**중성 21자** (인덱스 0~20):
ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ

**종성 27종** (인덱스 1~27, 0은 받침 없음):
ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ

**중성 계열 분류** (블록 유형 판별에 사용):
- 세로모음 (기둥형): ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅣ
- 가로모음 (보형): ㅗ ㅛ ㅜ ㅠ ㅡ
- 복합모음 (기둥+보): ㅘ ㅙ ㅚ ㅝ ㅞ ㅟ ㅢ

## 유니코드 조합 공식

```
음절 코드 = 0xAC00 + (초성인덱스 × 21 + 중성인덱스) × 28 + 종성인덱스
```

예: 한 = ㅎ(18)·ㅏ(0)·ㄴ(4) → 0xAC00 + (18×21+0)×28 + 4 = U+D55C
음절 범위: U+AC00(가) ~ U+D7A3(힣), 총 11,172자.

## 음절 블록 유형 6종

| 유형 | 구성 | 예 | 분할 |
|------|------|----|------|
| 1 | 초성 + 세로모음 | 가 바 리 | 좌우 |
| 2 | 초성 + 가로모음 | 소 무 그 | 상하 |
| 3 | 초성 + 복합모음 | 화 귀 의 | ㄱ자 |
| 4 | 유형1 + 종성 | 한 람 밀 | 좌우 + 하단 |
| 5 | 유형2 + 종성 | 글 물 승 | 3단 |
| 6 | 유형3 + 종성 | 관 궝 흰 | ㄱ자 + 하단 |

같은 자모라도 유형마다 다른 변형 글리프가 필요하다. 예: ㄱ은 최소 초성용(유형1/2/3, 받침 유무별)과 종성용이 필요하다. 변형을 스케일로 대체하면 획 굵기가 뭉개진다 — 반드시 유형별로 다시 그린다.

## 슬롯 박스 기본값 (시작점)

좌표계: SVG viewBox 0 0 1000 1000, y-down, 베이스라인 y=880. 아래 값은 **기본 네모꼴 기준 시작값**이다. 콘셉트(특히 탈네모꼴)는 의도적으로 깨뜨릴 수 있으며, 확정값은 `_workspace/glyphs/{콘셉트}/slots.json`이 기준이다.

| 유형 | 초성 | 중성 | 종성 |
|------|------|------|------|
| 1 | x 60–460, y 100–840 | x 480–940, y 60–880 (기둥 중심 x≈790) | — |
| 2 | x 160–840, y 60–460 | x 60–940, y 480–880 (보 중심 y≈600) | — |
| 3 | x 60–420, y 60–440 | 보부 x 60–720 y 460–720 + 기둥부 x 740–940 y 60–880 | — |
| 4 | x 60–440, y 80–500 | x 460–940, y 40–560 | x 100–900, y 580–880 |
| 5 | x 180–820, y 60–360 | x 60–940, y 380–540 | x 100–900, y 580–880 |
| 6 | x 60–400, y 60–360 | 보부+기둥부 (유형3 압축) | x 100–860, y 580–880 |

## 커버리지 단계 전략

| 단계 | 범위 | 목적 |
|------|------|------|
| 샘플 | 대표 음절 6~30자 | 콘셉트 검증, 피드백 수집 |
| 유형 완전 세트 | 바 소 화 한 글 관 (유형 1~6 각 1자) | 블록 구조 결함 조기 발견 |
| 시안 확장 | 자주 쓰는 음절 ~512자 + 라틴·숫자·부호 | 실사용 문장 조판 |
| 표준 | KS X 1001 2,350자 | 배포 가능 수준 |
| 전체 | 11,172자 (조합 자동 생성) | 완전 커버리지 |

빈도만으로 선정하지 말 것 — 유형 3·6(복합모음)은 빈도가 낮아 뒤로 밀리기 쉽지만 슬롯 구조가 가장 복잡해서 늦게 검증하면 구조 재작업이 커진다. 매 단계에 6개 유형이 모두 포함되어야 한다.

## 자모 조합 시스템 (시스템이 구축된 콘셉트)

콘셉트가 규칙 기반이면 음절별 수작업 대신 **자모 정의 × 조합 엔진**으로 전체를 생성한다. 천지인의 구현: `_workspace/glyphs/천지인/system/`

- `jamo_cho.json` — 초성 19자: 문맥 박스 내 **비율 스켈레톤** (모음 4계열 × 받침 유무 = 8문맥 자동 인스턴스화, 굵기 80은 스케일되지 않음)
- `jamo_jung.json` — 중성 21자 × {J0, J1} **절대 좌표** (필요 시 choBox로 초성 박스 오버라이드)
- `jamo_jong.json` — 종성 27종 절대 좌표 / `contexts.json` — 문맥 박스·상수

```bash
python3 _workspace/glyphs/천지인/system/compose.py --text "한글" --out-dir out/   # 지정 음절
python3 _workspace/glyphs/천지인/system/compose.py --ks2350 --out-dir out/        # 전체 11,172자
```

**수정 원칙**: 특정 글자가 어색하면 그 글자의 SVG를 고치지 말고 원인 자모의 정의를 고쳐 재생성하라 — 그 자모를 쓰는 모든 글자에 일괄 적용되고, 개별 SVG 수정은 다음 재생성 때 소실된다. 재생성 후에는 반드시 표본(수정 자모 포함 음절 + 극단 조합)을 렌더링해 시각 검증한다.

## 표준 샘플 텍스트

- 라운드 1 대표 세트: 한 글 바 람 소 리 (유형 1·2·4·5 — 3·6 미포함이므로 라운드 2에서 화·관 추가)
- 판그램: "다람쥐 헌 쳇바퀴에 타고파"
- 혼용 문장: "한글 폰트 Hangul 2026"

