Skip to content

모바일 한글 키보드

천지인·쿼티 레이아웃, 제스처, 조합 방식, 이벤트·commit

모바일 한글 키보드는 레이아웃(키 배치)과 조합 방식(탭·연타·스와이프 등)이 데스크톱 2벌식·3벌식과 다르다. 화면이 작아 키 수를 줄이고, 제스처로 자모를 확장한다.


  • 12개 기본 키(3줄×4칸)에 자모를 배치. 숫자·기호는 별도 레이어(모드 전환).
  • “천·지·인”은 초성·중성·종성을 한 키에 여러 자모로 묶어 두고, 탭(연타) 또는 모드로 골라 넣는 방식에서 유래한 이름이다.
  • 자음/모음 모드를 전환하거나, 한 키에 “자음 여러 개” 또는 “모음 여러 개”를 배치해, 첫 번째 탭·두 번째 탭 등으로 다른 자모를 선택한다.
  • 예: “ㄱ”이 있는 키를 한 번 누르면 ㄱ, 두 번 누르면 ㄲ, 스와이프하면 ㄲ(구현에 따라 다름).
  • 자음·모음을 줄인 키 배열로 한 손 입력에 맞춘다. 키 하나에 자모 2~3개를 배치하고, 연타·스와이프로 구분하는 경우가 많다.
  • 데스크톱 2벌식과 비슷한 “자음 왼쪽, 모음 오른쪽” 구조를 유지하되, 키 수가 적다.
  • 데스크톱과 비슷한 전각 쿼티 배열. 두 손 입력용. 2벌식·3벌식 레이아웃을 그대로 쓰는 경우가 많다.

  • 순서: 초성 → 중성 → (선택) 종성. 데스크톱과 동일하다.
  • 한 키에 여러 자모: 같은 키를 한 번 누르면 첫 번째 자모, 두 번 누르면 두 번째 자모(또는 쌍자음), 스와이프하면 또 다른 자모가 선택되는 식이다.
  • 초성 선택: 자음 키(또는 자음 모드의 키)를 눌러 초성을 넣는다. 연타로 ㄱ→ㄲ 등.
  • 중성 선택: 모음 키(또는 모음 모드로 전환 후 키)를 눌러 중성을 넣는다. ㅏ→ㅐ 등은 연타 또는 스와이프.
  • 종성 선택: 받침이 필요하면 “종성 모드”로 전환하거나, 같은 자음 키를 “종성으로” 해석하는 타이밍에 눌러 넣는다.

실제 앱(천지인 공식, Gboard 한글, 삼성 키보드 등)마다 자모 배치연타/스와이프 매핑이 다르므로, 강의·구현 시에는 해당 앱의 설명서나 화면을 기준으로 정리하는 것이 좋다.


  • 같은 키 위에서 방향에 따라 다른 자모: 예를 들어 ㄱ 키에서 “위로 스와이프” → ㄲ, “아래로 스와이프” → ㅋ(구현에 따라 다름).
  • 모드 전환: 스와이프로 “자음 모드 ↔ 모음 모드” 또는 “초성 ↔ 종성” 전환.
  • 대체 문자·겹자모: 키를 길게 누르면 팝업으로 ㄲ, ㅋ 등이 나오고, 그중 하나를 선택해 넣는 방식.
  • 숫자·기호: 롱프레스로 숫자·기호 레이어를 여는 경우도 있다.
  • 같은 키 두 번: ㄱ → ㄲ, ㅏ → ㅐ 등. 입력기마다 “몇 번째 탭에 어떤 자모”인지 다르다.
  • 세 번 이상: 겹모음(ㅘ, ㅙ, ㅚ 등)을 연타로 순환하는 구현도 있다.

입력기 앱(Gboard, 삼성 키보드, 나랏글 등)마다 제스처 매핑이 다르다. 에디터는 “어떤 제스처로 넣었는지”를 알 수 없고, composition 이벤트로 넘어오는 문자열만 처리하면 된다.


  • 연타: 같은 키 여러 번으로 자모 순환(ㄱ→ㄲ, ㅏ→ㅐ 등).
  • 동시 조합: 초성 선택 후 중성 키를 누르면 “가”가 되는 식. 데스크톱과 마찬가지로 초성+중성이 먼저고, 그다음 종성이다.
  • 순서: 초성 → 중성 → (선택) 종성. 모바일도 이 순서를 유지하되, 키 수가 적어서 모드 전환제스처로 자모를 골라 넣는다.

천지인에서 “초성·중성·종성 선택 순서”와 “한 키에 배치된 자모 순서”는 입력기 구현에 따라 다르므로, 실제 앱·설명서를 참고하는 것이 좋다.


  • 모바일 브라우저에서도 compositionstartcompositionupdate 반복 → compositionend가 발생한다.
  • compositionupdate 호출 횟수는 데스크톱보다 적을 수 있다. 한 번에 여러 글자data에 올 수도 있다.
  • compositionend 시점의 datacommit 문자열이다. 에디터는 이 문자열을 문서에 반영하면 된다.
  • 키보드가 올라온 상태에서 포커스 이동(다른 입력란 클릭)이나 스크롤이 일어나면, 조합이 취소되고 compositionenddata 빈 문자열로 올 수 있다.
  • 플랫폼·브라우저마다 동작이 다를 수 있으므로, 실제 Android/iOS 기기에서 한글을 입력해 보며 확인하는 것이 좋다.
  • 조합 중인 구간이 한 덩어리로 표시되는지.
  • commit 시 **문서에 한 글자(또는 여러 글자)**가 정확히 반영되는지.
  • Esc·포커스 이동 시 조합이 취소되는지.
  • 한글·영문 전환 후 다시 한글 입력 시 composition이 정상적으로 시작되는지.

  • Gboard, 삼성 키보드, 나랏글 등: 조합 알고리즘(자모 → 완성형 변환)과 commit 타이밍(스페이스로 확정 여부, 다음 자모 입력 시 자동 확정 여부)이 다를 수 있다.
  • 에디터는 “어떤 앱을 쓰는지”를 구분하지 않고, CompositionEvent.datacompositionend 시점의 commit만 처리하면 된다.
  • 특정 앱에서만 조합이 깨지면, 해당 앱이 보내는 이벤트 순서data 값을 로그로 남겨, 데스크톱·다른 앱과 비교해 보면 원인 파악에 도움이 된다.