[온라인 한글 입력기] 쿼티 기준 글쇠값 ↔ 문자열 변환 (직결식 변환?)

  '직결식 한글 입출력'은 한글 자판과 영문 자판의 글쇠 자리를 그대로 짝짓고 영문 자판(쿼티 자판)의 문자 부호값을 빌어서 한글이 들어간 글 내용을 글꼴 처리로 화면에 나타내는 한글 구현 방법이다. 1980년대 중반에 매킨토시 환경에서 개발된 초기 공병우 직결식(제1 공병우 직결식)에서 '직결식' 개념이 처음 구현되었다.

  '직결식'에는 글쇠를 누르자마자 한글 첫소리/가운뎃소리/끝소리 낱자의 종류와 모습을 곧바로 정한다는 뜻이 담겨 있다. 한글 모아쓰기를 하는 조건에서 벗어나지 않는다면, 한글 낱자를 첫소리/가운뎃소리/끝소리로 나누는 3벌식 한글 낱자 체계를 쓰는 자판/부호계/글꼴을 써서 '직결식'을 구현할 수 있다.

"떡볶이에 짜장면에…"를 매킨토시에서 제1 공병우 직결식 글꼴로 넣은 모습과 같은 글을 영문 글꼴로 본 모습 (Kong-m-98 24pt / Courier 18pt) (3-87 자판)
"떡볶이에 짜장면에…"를 매킨토시에서 제1 공병우 직결식 글꼴로 넣은 모습과 같은 글을 영문 글꼴로 본 모습 (Kong-m-98 24pt / Courier 18pt) (3-87 자판)
  • 그림 : 표준이 된 세벌식? - (7) 초기 공병우 직결식에 쓰인 한글 부호계 ① - 3-87 자판
    (https://pat.im/1187)

  '직결식' 개념이 알려지지 않은 때에도 영문 자판의 문자 부호값을 빌어 한글 내용을 나타내는 한글 구현 방법이 두벌식 자판으로 먼저 쓰였다. 1980년대 초반에 'CALL 3327 한글'에서 쓰인 N 바이트 조합형이 한글 낱자를 닿소리와 홀소리로만 나누는 두벌식 자판과 두벌식 한글 부호계로 쓰였다.

  이 N 바이트 조합형에서 두벌식 자판 배열과 영문 쿼티 자판 배열을 대응시켜 한글 내용을 나타내는 원리는 공병우 직결식과 다르지 않았다. 다만 이 N 바이트 조합형에서는 '여기부터 저기까지 부호값은 한글 내용을 나타냄'을 알리는 전환용 부호 SO(Shift Out)와 SI(Shift In)가 쓰인 것이 그런 전환용 부호가 쓰이지 않은 공병우 직결식과 달랐다.

N 바이트 조합형과 3바이트 조합형으로 한글 낱자 부호값 매기기 (표준 두벌식 자판 기준)
N 바이트 조합형과 3바이트 조합형으로 한글 낱자 부호값 매기기 (표준 두벌식 자판 기준)
  • 그림 : 표준이 된 세벌식? - (1) 1980년대에 쓰인 여러 가지 한글 표현 방식
    (https://pat.im/1150)

  오늘날에 흔히 쓰이는 한글을 전산 기기로 나타내려면 67개 낱자(첫소리 19개 + 가운뎃소리 21개 + 끝소리 27개)를 담을 부호계가 필요하고, 옛한글까지 나타내려면 355개에 이르는 낱자가 필요하다. 두벌식으로 줄인 꼴인 모스 부호에서도 한글을 나타내는 데에 26개 낱자(닿소리 14개 + 홀소리 12개)가 쓰인다.

  그런데 7비트 부호계가 쓰이던 초창기 전산 환경에서는 부호값을 미리 차지한 영문자/숫자/기호 들과 제어 부호들 때문에 한글 낱자를 따로 매길 부호값 자리가 없다시피 했다. 이런 환경에서는 7비트 아스키 영역의 영문자/숫자/기호 들의 부호값을 빌어 한글을 나타내는 방안이 쓰일 만 했다. 구현하기 간편한 점에서 한글 자판과 영문 자판의 글쇠 자리를 그대로 대응시켜 문자 부호값을 매기는 방법이 나쁘지 않았다.

  아스키 영역 부호값을 빌어 한글을 나타내는 방법은 지난날만이 아니라 오늘날에도 이런 일들에 쓰이고 있다.

  • 여러 한글 자판들의 타자 행동 및 효율을 견주고 분석하려고
  • 글꼴 체계를 마음대로 바꿀 수 없는 프로그램에서 한글을 나타내려고 (게임 번역 등)
  • 한글을 나타낼 수 없는 환경에서 한글 내용을 보내려고
  • 암호문처럼 내용을 일부러 알아 보기 어렵게 하려고

  이와 비슷한 목적으로 작업하는데 사람이 손가락을 움직여 변환기 노릇을 한다면, 잘 다루지 못하는 한글 자판을 써야 할 때에 작업 속도가 느릴 수밖에 없다. 초기 공병우 직결식(제1 공병우 직결식)은 자꾸 바뀌는 공세벌식 자판 배열에 따라 한글을 나타내는 부호값이 조금씩 바뀌었는데, 이런 때에는 오늘날의 자판 배열을 능숙하게 다룰 수 있더라도 작업 속도가 뚝 떨어지게 된다.

  짧은 글이라면 모르지만, 엄청나게 긴 글을 사람이 글쇠판을 두들겨 넣는다면 일도 힘들고 결과물에 틀린 데가 있을 수 있다. 그러므로 이미 전산 자료로 기록된 글은 프로그램을 통하여 변환 기능으로 다루는 것이 바람직하다. 그런 점에서 여러 한글 자판들과 여러 입력 기능들을 함께 다루는 것을 지향하고 있는 온라인 한글 입력기가 문자열↔글쇠값 변환 기능을 다루는 것이 알맞겠다는 생각이 들어서 이 기능을 온라인 한글 입력기에 넣었다.

  기능들의 세부 내용은 다른 관점들이 부딪히는 경우가 있고, 숨은 오류나 빈틈이 있을 수 있다. 그래서 세부 내용을 더 고치거나 보태 나갈 수 있다.

(1) '문자열→글쇠값' (문자열을 글쇠값들로 바꾸기)

  여러 한글 자판들로 '예닐곱'을 넣는다면, 누르는 글쇠들을 영문 쿼티 배열을 기준으로 나타내면 다음과 같다.

  • 표준 두벌식 자판 (KS X 5002) : dPslfrhq
  • 조선 국규 두벌식 자판 (KPS 9256) : dPfkrshq
  • 공세벌식 3-90 자판 : j7hdwkv3
  • 신세벌식 P2 자판 : jshdwkve

  한글 자판에서 글쇠들을 눌러 나가는 큰 줄기는 자판 배열이 크게 좌우하지만, 낱자 조합 규칙에 따라서도 달라질 수 있다. 세벌식 자판들에는 첫소리 ㄲ · ㄸ · ㅃ · ㅆ · ㅉ이 따로 없지만, 이들을 ㄱ+ㄱ / ㄷ+ㄷ / ㅂ+ㅂ / ㅅ+ㅅ / ㅈ+ㅈ 조합으로 넣을 수 있다. 공세벌식 자판은 ㄶ 같은 겹받침들을 자판 배열에 따로 있는 곧바로 글쇠 자리를 눌러 넣을 수도 있고, 'ㄴ+ㅎ→ㄶ'과 같은 조합법으로 넣을 수도 있다.

  이 기능을 열면, 글쇠를 누를 때마다 변환되는 결과를 볼 수 있다. 글이 너무 길거나 인터넷 익스플러와 같은 구식 웹 누비개를 쓰면 입력 속도가 매우 떨어질 수 있으므로, 이런 때에는 변환 기능을 끌 필요가 있다.

  한글 낱자를 넣는 방법이 하나가 아닐 때에 어느 방법을 따를지는 사람마다 취향과 형편에 따라 다른 생각을 할 수 있다. 어느 한 가지 방법만 따르도록 강요할 수 없으므로, 온라인 한글 입력기의 문자열→글쇠값 변환 기능에서 선택 항목들을 두었다.

"떡볶이에 짜장면에…"를 3-87 자판 배열에 따라 글쇠값으로 바꾸기
"떡볶이에 짜장면에…"를 3-87 자판 배열에 따라 글쇠값으로 바꾸기

떡볶이에 짜장면에 삶은 달걀 잔뜩 먹고
부엌에서 넋을 놓고 꺾꽂이꽃 바라보니
웬만해선 뵙기 힘든 개미핥기 생각나서
꿇어앉아 책을 펼쳐 뭔가 없나 읽어 보다
칼바람에 홰를 치는 물닭떼가 나타나서
꿈쩍 않고 창밖 보다 애닲은 맘 들끓었네

- 팥알 -

(https://pat.im/959)

kktx;vFjrjc llflfaiesjc nf$jgs kfwu6w lfskkgx itxuv
;bjt!jcnt ht~jgw hvRuv uutFuuv@jruuvZ ;fyf;vhr
j9csifsmdnts ;/r1ur mrzkgs udirmf%ur ndaufxhfnt
uubTjtjf#jf odxjgw pewoe i9tsuf jtXhf jrGjt ;vkf
[fw;fyfzjc m/dygw orhgs ibwkfGkkcuf hf'fhfnt
uubzlltx jfSuv ofa;fF ;vkf jdkf^jgs ifz kgwuugTjt2hc

N pfWjfw N

(3-87 자판)

1) '낱자 조합' (낱자 조합 규칙 반영하기)

  한글 자판에는 자판 배열에 따로 들어간 낱자들도 있지만, 두벌식 자판의 받침 ㄶ처럼 다른 홑받침을 조합해서 넣는 낱자들도 있다. 이 항목을 고르면, 자판 배열에 따로 들어가지 않은 문자를 낱자 조합 규칙으로 넣을 수 있을 때에 낱자 조합 규칙으로 넣는 것으로 보고 글쇠값으로 바꾼다.

2) '낱자 조합 우선'

  '낱자 조합 우선'을 고르면 자판 배열보다 낱자 조합 규칙을 우선하여 적용한다. 자판 배열에 따로 있는 문자도 조합해 넣을 수 있는 규칙이 있으면 낱자 조합 규칙을 따르는 것으로 셈한다.

3) '받침 ㅆ 예외'

  세벌식 자판들에서는 받침 ㅆ이 아랫글 자리에 따로 있는 모습이 자주 보인다. '있었다' 같은 말을 넣을 때에는 대체로 아랫글 자리에 따로 있는 ㅆ으로 넣는 것이 편하고, 'ㅅ+ㅅ→ㅆ'으로 조합하여 넣으려면 같은 글쇠를 여러 차례 눌러야 해서 편하지 않다.

  다른 겹받침들은 조합하여 넣는 것이 취향에 맞는 사람도 있지만, 잘 짜여진 세벌식 자판에서는 아랫글 자리에 있는 받침 ㅆ이 타자 속도와 편의를 끌어올리는 구실을 한다. 그래서 낱자 조합 규칙을 우선하여 따르더라도 받침 ㅆ은 조합해서 넣지 않는 것으로 보는 선택 항목을 두었다.

4) 부가 입력 기능을 반영함

  온라인 한글 입력기에서 특정 한글 자판 또는 특정 계열 한글 자판에서 선택 항목으로 골라 쓰는 부가 입력 기능들이 일부 반영된다. '옛한글', '첫가끝 조합', '편의 조합 (규칙)', '겹받침 입력' 같은 선택 항목을 고르는 것에 따라 변환 결과가 달라질 수 있다.

  두벌식 자판의 '순아래 조합'이나 세벌식 자판의 '기호 확장'처럼 '문자열 → 글쇠값' 변환에 반영되지 않는 부가 기능도 있다.

3-2015 자판으로 '삶은 떡볶이'를 넣을 때 낱자 조합 규칙과 부가 기능에 따라 달라지는 글쇠값
3-2015 자판으로 '삶은 떡볶이'를 넣을 때 낱자 조합 규칙과 부가 기능에 따라 달라지는 글쇠값

5) 바꾸지 않는 문자, 바꿀 수 없는 문자

  영문 자판에 들어가는 아스키 영역의 영문자/숫자/기호는 바꾸지 않고 그대로 나타낸다.

  그밖에 자판 배열에 없고 낱자 조합 규칙으로도 조합할 수 없는 문자는 '■'로 나타낸다. '낱자 조합', '옛한글', '한글 확장 배열'을 고르지 않았을 때에 '■'로 나오는 문자가 늘 수 있다.

6) 한글 조합을 강제로 끊어야 하는 때

  아래 낱말들처럼 두벌식 옛한글 자판으로 넣을 때에 중도에 한글 조합을 따로 끊어야 하는 때를 나타내게 하였다.

  • 차ᄡᅡᆯ (찹쌀) - ck🄴qtkf
  • 이ᄣᅢ (입때) - dl🄴qteo
  • 입ᄯᅢ (입때) - dlq🄴teo
  • 슬ᄔᆞ니 - tmf🄴ssKsl

  여기에서 '🄴'는 조합을 끊는 때를 나타낸다. '차ᄡᅡᆯ'은 '차'를 넣은 다음에 조합을 끊고 'ᄡᅡᆯ'을 넣는다. '이ᄣᅢ'는 '이'를 넣는 다음에 조합을 끊고, '입ᄯᅢ'는 '입'을 넣고 나서 조합을 끊는다.

  온라인 한글 입력기의 두벌식 옛한글 자판에서는 윗글쇠 + f 자리에서 한글 조합을 끊는 기능(🄴, escape)을 쓸 수 있다.

두벌식 옛한글 자판으로 넣을 때 조합을 따로 끊어 주어야 하는 차ᄡᅡᆯ, 이ᄣᅢ, 입ᄯᅢ, 슬ᄔᆞ니
두벌식 옛한글 자판으로 넣을 때 조합을 따로 끊어 주어야 하는 차ᄡᅡᆯ, 이ᄣᅢ, 입ᄯᅢ, 슬ᄔᆞ니

6) 한글 호환 자모

  한글 호환 자모는 KS X 1001의 완성형 한글 부호계에서 이어진 두벌식 한글 부호계이다. 옛낱자도 들어 있지만, 주로 쓰이는 것은 요즘낱자들이다.

  호환 자모는 조합용 한글 낱자가 아니지만, 많은 한글 입력기들이 한글을 조합할 때에 낱자 하나만 들어갔으면 호환 자모로 나타내곤 한다.

  • 닿소리 요즘낱자
    : ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄸ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅃ ㅄ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍㅎ
  • 닿소리 옛낱자
    : ㅥ ㅦ ㅧ ㅨ ㅩ ㅪ ㅫ ㅬ ㅭ ㅮ ㅯ ㅰ ㅱ ㅲ ㅳ ㅴ ㅵ ㅶ ㅷ ㅸ ㅹ ㅺ ㅻ ㅼ ㅽ ㅾ ㅿ ㆀ ㆁ ㆂ ㆃ ㆄ ㆅ ㆆ
  • 홀소리 요즘낱자
    : ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ
  • 홀소리 옛낱자
    : ㆇ ㆈ ㆉ ㆊ ㆋ ㆌ ㆍ ㆎ

  호환 자모에서 닿소리 낱자들은 첫소리와 끝소리 겸용이다. 두벌식 자판은 자판 배열에 있는 닿소리 낱자가 한 벌이어서 따로 생각해야 할 거리가 없다. 하지만 세벌식 자판은 자판 배열의 닿소리 낱자가 첫소리 1벌과 끝소리 1벌로 나뉘므로, 호환 자모의 닿소리 낱자를 어느 쪽에서 넣는지가 따질 거리가 될 수 있다.

  윈도우에서 두벌식 자판으로 닿소리만 넣으면 'ㄹ+ㅂ→ㄼ'이나 'ㅂ+ㅅ→ㅄ' 같은 조합이 나온다. 이는 첫가끝 조합형을 쓰지 않는 환경에서 끝소리(받침)에 쓰이는 겹낱자까지 따로 나타내는 방편인데, 이를 이용하여 'ㅎㅎ'이나 'ㅋㅋ' 같은 초성체와 'ㅠㅠ' 같은 그림말을 나타내는 문화(?)도 자리잡혀 있다.

  신세벌식 자판은 호환 자모를 끝소리가 있는 글쇠에서 넣는 입력 방안이 쓰인다. 홀소리와 받침이 들어가는 자리가 1995년의 원안 배열과 같은 본디꼴 신세벌식 자판은 처음에 넣는 호환 자모 닿소리는 그냥 넣고, 겹낱자로 조합할 때에 두번째 넣는 낱자를 윗글쇠를 함께 눌러 넣는다. 이 방법으로 'ㄹㅂ'과 'ㄼ'을 함께 나타낼 수 있다.

  공세벌식 자판은 윈도우에서 끝소리 글쇠를 쓰면 두벌식 자판을 쓰는 때와 호환 자모 조합 결과가 같다. 첫소리 글쇠로 넣으면 ㄲ, ㄸ, ㅃ, ㅆ, ㅉ만 조합하여 나온다.

  공세벌식 자판에 첫소리 낱자들은 모두 아랫글 자리에 있지만, 끝소리 낱자들은 윗글 자리에도 있고 아랫글 자리에도 있어서 일관성이 없다. 또 공세벌식 자판을 쓰는 사람들은 끝소리 글쇠만 따로 누르는 것에 익숙하지 않는 경우가 많다. 이 때문에 공세벌식 자판으로 호환 자모 닿소리 낱자를 넣는다면 딱히 어느 쪽 글쇠를 쓴다고 하기가 애매한 구석이 있다.

  일단 온라인 한글 입력기에서는 모든 세벌식 자판이 호환 자모를 끌소리(받침) 쪽 글쇠로 넣는다고 보고 셈하게 하였다. 이 부분은 더 나은 방안이 있으면 고치려고 한다.

(2) '글쇠값→문자열' (글쇠값들을 문자열로 바꾸기)

  앞에서 본 '문자열→글쇠값' 기능에 대한 해독 기능으로 볼 수 있다.

  지난날에 제1 공병우 직결식처럼 쿼티 배열을 기준으로 아스키 영역 문자들만으로 넣은 글이 있다면, 이 기능을 통하여 한글 내용으로 해독할 수 있다. 다만 글을 넣을 때에 썼던 한글 자판이 온라인 한글 입력기에 들어 있어야 바른 꼴로 바꿀 수 있다.

  글쇠를 누르자마자 변환 결과를 볼 수 있는 '문자열→글쇠값' 기능과 달리, '글쇠값→문자열' 기능은 글을 넣으면서 변환 결과를 바로 볼 수 없다. 자판 배열을 바꾸거나 '바꾸기' 단추를 누를 때에 들어간 글이 바뀐 결과를 볼 수 있다.

3-87 자판을 기준으로 글쇠값을 문자열로 바꾸기 (떡볶이에 짜장면에…)
3-87 자판을 기준으로 글쇠값을 문자열로 바꾸기 (떡볶이에 짜장면에…)

  다만 인터넷 익스플로러에서는 변환 속도가 느리고 문장의 처음에 한글 낱자가 하나씩 덧붙는 문제가 있다.주1

〈주석〉
  1. 입력기 프로그램 내부의 오류가 끼어서 일어난 문제였다. back
글 걸기 주소 : 이 글에는 글을 걸 수 없습니다.

덧글을 달아 주세요