이 문서는 개발자를 위한 문서입니다. 일반 사용자를 위한 세모이 자판의 설명과 사용법은 다음 링크에서 보실 수 있습니다.
- 자판 설명: https://blog.naver.com/eekdland/220526834927
- 결합 규칙: https://blog.naver.com/eekdland/220239514856
세모이 (세벌식 모아치기 e) 자판은 속기형 한글 입력 방식을 일반 키보드에서 구현하기 위한 입력기입니다.
2014년에 개인적인 녹취가 필요하여 시작된 프로젝트로
공병우 세벌식을 응용하여 배열을 정하고, 속기형 입력 방식과 약어 구조를 설계했으며,
장기간의 실사용자 분들의 피드백을 통해 반복적인 수정이 이루어졌습니다.
개발은 Windows 날개셋 IME의 GUI로 이루어졌습니다.
목표:
- 일반 키보드에서 모아치기 기반 한글 입력 구현
- 한글 음절 단위 입력
- 약어(dictionary) 기반 속기 지원
즉 세모이는 다음 구조를 목표로 합니다.
Chord Input
→ Jamo Classification
→ Syllable Reconstruction
→ Abbreviation Expansion
세모이 자판은 다음 네 가지 목표를 기반으로 설계되었습니다.
속기 입력은 다음 특징을 가집니다.
- 여러 키를 동시에 입력
- 음절 단위 처리
- 약어 기반 입력
세모이는 이를 일반 키보드에서 구현하는 것을 목표로 합니다.
세모이는 입력 순서에 의존하지 않습니다.
예
ㄱ ㅏ ㄴ
ㅏ ㄱ ㄴ
ㄴ ㄱ ㅏ
모두
간
으로 처리됩니다.
이를 위해 자모 재정렬 알고리즘이 사용됩니다.
세모이는 음절 단위 입력 모델을 사용합니다.
한글 음절 구조:
초성
중성
종성
입력기는 chord 내에서 이 세 요소를 분류합니다.
속기 입력에서는 약어 시스템이 중요한 역할을 합니다.
예:
특정 chord
→ 특정 단어
세모이는 약어 사전 기반 입력 확장을 지원합니다.
날개셋 입력기 IME에서의 약어 입력 구조는
chord → 옛한글 글자 → 단어 치환
이라는 방식입니다.
세모이 자판은 여러 키를 동시에 입력하여 음절이나 단어를 생성하는 chord 기반 입력 시스템입니다.
이 구조는 전통적인 영문 속기 장치인 Stenotype와 유사한 특징을 가집니다.
Stenotype은 다음 방식으로 동작합니다.
여러 키를 동시에 누름
→ chord 생성
→ chord 해석
→ 단어 출력
즉 입력 단위가 개별 문자(letter) 가 아니라
stroke
입니다.
예:
STKPWHR
같은 chord가 하나의 입력 단위입니다.
세모이도 기본적으로 같은 구조를 사용합니다.
여러 키 동시 입력
→ chord 생성
→ 자모 분류
→ 음절 생성
→ 약어 확장
즉 입력 단위는
chord
입니다.
차이점은 다음입니다.
| 시스템 | 입력 결과 |
|---|---|
| Stenotype | 단어 |
| 세모이 | 음절 (약어 활용 시 단어) |
세모이 입력기는 키 누름(KeyDown) 과 키 뗌(KeyUp) 이벤트를 모두 사용합니다.
입력 흐름:
KeyDown
→ chord buffer
→ KeyUp
→ 모든 키 해제
→ 음절 조합
즉 모든 키가 떼어지는 순간 chord 처리가 완료됩니다.
이 방식은 실제 속기 입력기와 유사합니다.
세모이는 강제 chord 종료 타이머를 사용합니다.
기본값:
40 ms
이 타이머는 다음 상황을 처리하기 위해 존재합니다.
- 키가 동시에 눌리지 않는 경우
- 고속 타자 입력
- chord 경계 판단
- 공백 삽입 타이밍 판단
동작:
timer expired
→ chord flush
→ syllable generation
각 사용자의 이상적인 타이머 값이 서로 충돌했기 때문에
이를 해결하기 위해 세모이 자판은 날개셋 입력기 IME에서의 경우
조합 종료 타이머의 수치를 각자 설정할 수 있도록 소개했습니다.
입력기는 다음 정보를 유지합니다.
pressed keys
released keys
chord buffer
timer state
Chord 종료 조건:
- 모든 키 해제
- 타이머 종료
입력된 키는 다음 세 그룹으로 분류됩니다.
| 그룹 | 의미 |
|---|---|
| Onset | 초성 |
| Nucleus | 중성 |
| Coda | 종성 |
예:
{ㄱ, ㅏ, ㄴ}
→ C V T
→ 간
세모이는 자모 충돌 방지와 chord 안정성을 위해 시프트를 분리합니다.
모음 확장에 사용됩니다.
예
ㅛ
→ shift + ㅗ
종성 입력 확장을 위해 사용됩니다.
종성 조합은 초성 입력과 독립적으로 처리됩니다.
시프트를 분리하면 다음 문제가 해결됩니다.
- chord 충돌
- 자모 역할 혼동
- 입력 안정성
즉
모음 확장
종성 확장
이 서로 간섭하지 않습니다.
된소리는 인덱스 키(index key) 를 사용합니다.
예:
index + ㄱ
→ ㄲ
이 방식은 다음 장점이 있습니다.
- chord 안정성
- finger load 분산
- 속기 입력 호환성
세모이는 약어 사전(dictionary) 을 지원합니다.
입력 흐름:
Chord
→ syllable
→ dictionary lookup
→ expansion
예:
특정 chord
→ 단어
→ 문장
약어 시스템은 속기 입력 속도를 크게 높이는 요소입니다.
전체 구조:
KeyDown
↓
Chord Buffer
↓
KeyUp
↓
Chord Completion
↓
Jamo Classification
↓
Syllable Reconstruction
↓
Dictionary Expansion
↓
Output
세모이는 세벌식 계열 입력기이지만
기존 세벌식 자판과는 다음 차이가 있습니다.
| 항목 | 세벌식 | 세모이 |
|---|---|---|
| 입력 | 순차 | chord |
| 자모 순서 | 연관 | 무관 |
| 입력 단위 | 자모 | 음절 |
- 일반 키보드 기반 chord 입력
- 날개셋 입력기 등의 구현 IME 의존
세모이 자판은 다음 질문에서 출발했습니다.
속기형 한글 입력을 일반 키보드에서 구현할 수 있을까?
이 프로젝트는 그 질문에 대한 실험적 구현입니다.
세모이 자판의 설계 철학은 다음과 같이 요약할 수 있습니다.
일반 키보드에서 속기형 한글 입력 시스템을 구현한다.
즉 세모이는
Stenotype-like Korean input
을 목표로 한 시스템입니다.
세모이 자판과 두겹이 자판 모아치기의 차이를 개발자 관점에서 보면 다음입니다.
| 입력기 | chord 범위 |
|---|---|
| 세모이 (세벌식 모아치기 e) | 초성 + 중성 + 종성 |
| 두겹이 (두벌식 겹받침 e) | 초성 + 중성 |
즉 두겹이는
세모이 입력 모델의 부분 구현
으로 볼 수 있습니다.
세모이 자판은
속기형 입력 시스템을 일반 키보드에서 구현하려는 chord 기반 한글 입력기
입니다.
| 요소 | 설명 |
|---|---|
| 약어 사전 | 약 1300 entries |
| 입력 구조 | chord-based |
| 조합 규칙 | 옛한글 확장 (약어 조합에 활용) |
| 최대 chord | 7 keys |
즉
rule-based input system + dictionary
구조입니다.
구현을 위한 자판의 규격은 다음 링크에서 보실 수 있습니다.
https://blog.naver.com/eekdland/30187905646
이 자판과 저장소는 공공성을 위하고 독점화를 막기 위해 CC BY-SA 4.0 라이선스로 공개되어 있습니다.
또한 원칙은 아니지만, 다른 곳에 소개하실 때 ssgi.kr 를 함께 표시해주시면 감사드리겠습니다.
본 자판 XML 파일은 날개셋 입력기의 설정 형식을 사용합니다.
날개셋 입력기 자체의 저작권은 제작자 김용묵 님께 있습니다.
이 저장소들은 한국어 및 영어 키보드 배열 및 타자 인체공학에 관하여 진행 중인 연구 프로젝트의 일부입니다.
| 이름 | 설명 |
|---|---|
| 세벌식 모아치기 e (세모이) | 입력을 압축하는 준속기 자판 |
| 두벌식 줄맞춤 e (두줄이) | 표준 두벌식 응용 효율 개선 자판 |
| 두벌식 겹받침 e (두겹이) | 표준 두벌식 배열 기반 개선 자판 |
| 두벌식 자판 모아치기 | 두벌식 자판의 모아치기 연구 |
| 세벌식 ROS-e (ROSE) | 영어 모아치기 및 순서 교정 자판 |
| 타자 피로도 분석기 | 자판 연구를 위한 타자 피로도 분석 도구 |
※ 타자 피로도 분석기는 Hyunjun Ji 님의 분석기를 기반으로 연구 및 수정되었습니다.


