10 min read

키보드 레이아웃

이 글에 있는 키보드 레이아웃 이미지는 모두 W3 UI Events 코드테이블 문서에서 가져온 것이다. [https://www.w3.org/TR/uievents-code/]

키보드 레이아웃은 국제 표준으로 정해져 있다.

keyboard-101-us-loc

가장 아래 행부터 순서대로 A~E행이며, E행을 기준으로 00, 01, ..., 14로 열을 붙인다. 키가 비스듬하게 배열되면 위 그림처럼 \ 대각선 방향으로 열을 매긴다.

따라서, 위 그림을 기준으로 E00 = , E01 = 1 , ... , E12 = =, E13 = Backspace 이다.

이 문서에서 이야기하는 키보드 레이아웃은 모두 1986년부터 도입된 IBM PC/AT Enhanced 키보드에 근간을 두고 있다. Mac에서 사용하는 키보드 레이아웃과는 호환되지 않으니 참고할 것.

영어 101/104키, 102/105키 키보드

미국식 101/104키 키보드

keyboard-101-us

일반적으로 사용하는 키보드 레이아웃은 미국식 영어 101키 레이아웃이다. 키를 다 세어 보면 101개가 있어서 101키라고 부른다. 현재는 Meta 키(Win 키) 2개와 Menu 키를 추가하여 104키를 사용하므로, 관례상 101/104키로 부른다.

영국식 102/105키 키보드

keyboard-102-uk

영국식 키보드라고 되어 있지만 사실 유럽 국가들은 이 배열을 가져가며, 키 매핑만 바꿔서 쓴다. Shift + 3 키에 영국 파운드 £ 키가 매핑되는 등, 특수문자의 배열이 약간 다르다. # 키가 C12 위치에 추가되고, Enter 키는 C13 및 D13을 묶어서 점유하면서 ┐자 모양이 된다. 백슬래시 \ 키는 B00 위치로 이동하면서 좌측 Shift 키가 작아진다.

한글 103/106키 키보드

keyboard-103-korean

한국에서는 미국 101/104키 레이아웃을 기본으로, 한국 사정에 맞게 A02에 한영 키를, A07에 한자 키를 추가한 한글 103/106키 레이아웃을 사용한다. 한영 한자 키 외에, 백슬래시 \ 키가 한국 원 키로 대체되고 E13으로 이동하며, Backspace 키의 크기가 작아진다. Enter 키는 C12와 D13을 합쳐서 ┘자로 크기를 키우는 정도의 차이점이 있다.

한글 101/104키 호환 모드

영어 101/104키 키보드로 한글을 입력하려면 한글 101/104키 호환 모드를 사용해야 한다. 영어 101/104키와 한글 103/106키는 레이아웃이 매우 유사하여, 상호 호환이 매우 쉬운 편이다.

윈도우의 한글 101/104키 호환 모드는 한영 한자 키를 대체하는 단축키 조합에 따라 구분된다. 이 조합은 리눅스에서도 거의 비슷하게 사용된다.

입력 모드 한영 키 대체조합 한자 키 대체조합
101/104키 호환 모드 1 우측 Alt 우측 Ctrl
101/104키 호환 모드 2 우측 Ctrl 우측 Alt
101/104키 호환 모드 3 좌측 Shift + Space 좌측 Ctrl + Space
106키 모드 한영 키를 사용함 한자 키를 사용함

일본어 106/109키 키보드

keyboard-106-japanese

일본 또한 일본 사정에 맞게 표준 레이아웃을 정의하고 있다. 국한문 혼용체가 거의 폐기된 한국과 달리, 일본어는 한자 없이는 글쓰기가 불가능하다. 수천 개가 넘는 한자를 키보드에 할당하는 것은 불가능하므로, Input Method Editor (IME)라는 프로그램을 이용하여 입력하는 내용에 맞게 변환하는 방식으로 한자를 입력하게 된다.

현대 일본어에서 사용하는 46글자에 장음 , 탁점 , 반탁점 키만 모아도 이미 101/104키에서 키 할당이 모자라게 된다. 이를 해결하기 위해, B11과 C12에 키를 하나씩 추가하고, 백슬래시 \ 키가 장음 키로 대체되면서 E13으로 이동한다. Enter 키는 C13과 D12를 묶어서 ┐자 모양이 된다. 그래도 키가 모자라서 는 별도의 키를 할당받지 못하고, Shift + 로 입력해야 한다.

또한, IME를 조작하는 키를 대거 추가하게 된다. 키가 半角/全角 키로 대체되고, CapsLock 키가 英数키로 대체된다. 그리고 Space 키를 짤라서 A02 위치에 無変換 , A06-A07 위치에 変換 カタカナ/ひらがな/ローマ字 키를 추가하게 된다. 결과적으로 일본어 키보드에는 106개 또는 109개 키가 존재하며, Space 키의 길이가 매우 짧아지고, 키보드 왼쪽으로 쏠리게 되므로 사용이 매우 불편하다.

  • 半角/全角 : 원칙적으로는 반각↔전각 전환이다. 일본어 코드페이지는 JIS X 0201 에 정의된 반각문자 테이블과 JIS X 0206 에 정의된 전각문자 테이블이 공존하는 탓에, 이 중 어떤 걸 입력할지 바꿔주는 키이다. Windows에서는 IME ON/OFF로 사용한다. IME를 꺼버리면 변환 과정을 거치지 않고 영어 키보드처럼 입력된다.
  • 英数 : IME 입력모드를 영숫자 입력모드로 전환한다. 이 때 키보드를 두드리면 키보드의 영어 및 특수문자가 입력되는 방식이다. 원래의 CapsLock 기능은 Shift + CapsLock 을 누르면 된다.
  • カタカナ/ひらがな/ローマ字 : 흔히 줄여서 カナ 키로 부른다. IME 입력모드를 각각 가타카나/히라가나/로마지 입력모드로 전환한다. 가타카나/히라가나 모드는 키보드에 각인된 가나 문자가 입력되는 모드이고, 로마지 입력은 영어 발음을 입력하면 대응하는 문자가 입력되는 모드이다.
  • 無変換 : IME 변환 단계에서 히라가나→반각 가타카나→전각 가타카나→반각 로마지→전각 로마지를 순서대로 변환한다.
  • 変換 : IME 변환 단계에서 사전에 등록된 한자를 순서대로 변환한다.

사실 이러한 IME 조작키는 DOS시절의 유물이다. 그래픽 환경인 윈도우에서는 입력하는 족족 IME 소프트웨어의 팝업 메뉴가 떠서 예상 변환 후보군 목록을 실시간으로 보여주고, 스페이스 키와 방향키로 손쉽게 선택이 가능하다. 따라서 현재는 IME 조작키를 쓸 일이 거의 없다고 볼 수 있다. 일본에서도 30대 이하의 젊은층은 후술하는 104키 키보드 호환모드를 사용하는 비율이 매우 높다.

일본어 호환 모드

한글 키보드와 달리 일본어 키보드는 특수문자 배열이 영어 키보드와 다르다. 101/104키 호환모드, 105키 모드는 영어 키보드의 특수문자 배열을 사용하며, 106/109키 모드는 일본어 키보드의 특수문자 배열을 사용하므로 주의. 이는 하드웨어 배열과는 무관하다.

또한, 키보드에 없는 키는 입력할 수 없다. 예를 들어 영어 101/104키의 경우 키보드 상에 키가 존재하지 않으므로, 106/109키로 설정하더라도 를 직접 입력할 수 없다. 로마지 입력을 사용해야 한다.

사실 105키 모드는 AX 키보드라고 옛날에 쓰던 일본 키보드이다. 지금에야 극히 일부 노트북에서나 사용하며 쓰는 사람도 없겠지만, 어쨌든 윈도우에서 지원이 유지되고 있다.

입력 모드 半角/全角 英数 カナ 無変換 変換
101/104키 모드 입력 불가 입력 불가 Alt + 입력 불가 입력 불가 입력 불가 입력 불가
105키 모드 입력 불가 우측 Ctrl 우측 Alt 無変換 変換
106/109키 모드 CapsLock カナ 無変換 変換

윈도우 레지스트리 설정

윈도우를 기준으로, 설정을 바꾸려면 다음 레지스트리의 값을 직접 변경해야 한다.
HKLM\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters

아래 설정값은 MSDN 문서 등을 참고.

OverrideKeyboardType, OverrideKeyboardSubtype, OverrideKeyboardIdentifier 값은 직접적으로 키보드 입력모드에 영향을 주지는 않는다. 그러나 프로그램에서 키보드 정보를 취득할 때 참조하는 값이므로, 사용중인 키보드의 물리 형식에 맞게끔 정확한 값을 설정해 주자.

영어 104키 키보드를 사용하면서 한글과 일본어 호환모드를 동시에 설정하려면, LayerDriver 값만 정확하게 잡아주면 된다. Override 계열 값들은 주로 사용하는 언어 및 호환 모드의 값으로 설정한다.

실제 키보드 LayerDriver JPN LayerDriver KOR KeyboardType KeyboardSubtype KeyboardIdentifier
영어 104키 (일본어 104키 호환 모드) kbd101.dll dword:0007 dword:00000000 PCAT_101KEY
영어 104키 (일본어 105키 호환 모드) kbdax2.dll dword:0007 dword:00000001 AX_105KEY
일본어 109키 kbd106.dll dword:0007 dword:00000002 PCAT_106KEY
영어 104키 (한글 104키 호환 모드 1) kbd101a.dll dword:0008 dword:00000003 PCAT_101AKEY
영어 104키 (한글 104키 호환 모드 2) kbd101b.dll dword:0008 dword:00000004 PCAT_101BKEY
영어 104키 (한글 104키 호환 모드 3) kbd101c.dll dword:0008 dword:00000005 PCAT_101CKEY
한글 106키 kbd103.dll dword:0008 dword:00000006 PCAT_103KEY

OverrideKeyboardType

Value Meaning
1 IBM PC/XT or compatible (83-key) keyboard
2 Olivetti "ICO" (102-key) keyboard
3 IBM PC/AT (84-key) or similar keyboard
4 IBM enhanced (101- or 102-key) keyboard
5 Nokia 1050 and similar keyboards
6 Nokia 9140 and similar keyboards
7 Japanese keyboard
8 Korean keyboard

OverrideKeyboardSubtype, OverrideKeyboardIdentifier

기능키 개수를 의미한다고 하는데, KeyboardType 값이 7(일본어) 또는 8(한국어) 일 때에는 의미가 달라진다.

Value Meaning
0 PCAT_101KEY (US AT 101/104 KEY JA COMPAT)
1 AX_105KEY (JA AX 105 KEY)
2 PCAT_106KEY (JA AT 106/109 KEY)
3 PCAT_101AKEY (US AT 101/104 KEY KR COMPAT TYPE 1)
4 PCAT_101BKEY (US AT 101/104 KEY KR COMPAT TYPE 2)
5 PCAT_101CKEY (US AT 101/104 KEY KR COMPAT TYPE 3)
6 PCAT_103KEY (KR AT 103/106 KEY)