한영타 오타는 왜 생기고, 무엇을 되돌리는 건가요?
한국어 PC 자판에서 한글과 영문은 같은 물리 키를 공유합니다. 키보드의 ㅇ 자리에는 알파벳 D가, ㅏ 자리에는 K가 함께 새겨져 있고, 어떤 글자가 나올지는 한/영 전환 상태가 결정합니다. 그래서 한글 모드라고 믿고 "안녕"을 쳤는데 영문 모드였다면 화면에는 dkssud가 찍힙니다. 눌린 물리 키의 순서는 같으므로, 키 배치표만 알면 의도한 글자를 복원할 수 있습니다. 이 변환기는 그 복원 과정을 자동화한 것이며, 반대로 한글 문장을 "그 글자를 치려면 어떤 키를 눌러야 하는지"로 바꾸는 역방향(한글 → 영타)도 지원합니다.
여기서 다루는 배열은 두벌식 표준 자판(KS X 5002)입니다. 윈도우·맥·안드로이드·iOS의 기본 한글 키보드 대부분이 이 배열을 씁니다. 세벌식(390, 최종)이나 천지인·나랏글 같은 휴대폰 방식은 키와 글자의 대응이 전혀 다르므로 이 도구로 되돌릴 수 없습니다.
두벌식 자판 배치표
두벌식은 "자음 한 벌, 모음 한 벌"이라는 뜻입니다. 왼손 쪽에 자음, 오른손 쪽에 모음을 배치해 양손을 번갈아 치게 만든 구조입니다. 알파벳 26개 키가 모두 자모에 대응하며(자음 키 14개, 모음 키 12개), Shift를 함께 누르면 일부 키는 된소리 자음이나 이중 모음으로 바뀝니다. 아래 표는 이 페이지의 변환 테이블에서 빌드 시 그대로 뽑아낸 것입니다.
| 줄 | 키 = 기본 / Shift |
|---|---|
| 윗줄 | Q=ㅂ/ㅃ W=ㅈ/ㅉ E=ㄷ/ㄸ R=ㄱ/ㄲ T=ㅅ/ㅆ Y=ㅛ U=ㅕ I=ㅑ O=ㅐ/ㅒ P=ㅔ/ㅖ |
| 가운뎃줄 | A=ㅁ S=ㄴ D=ㅇ F=ㄹ G=ㅎ H=ㅗ J=ㅓ K=ㅏ L=ㅣ |
| 아랫줄 | Z=ㅋ X=ㅌ C=ㅊ V=ㅍ B=ㅠ N=ㅜ M=ㅡ |
Shift가 의미를 갖는 키는 Q·W·E·R·T(ㅃ·ㅉ·ㄸ·ㄲ·ㅆ)와 O·P(ㅒ·ㅖ) 일곱 개뿐입니다. 나머지 키(예: K, S)는 Shift를 눌러도 기본 자모(ㅏ, ㄴ)가 그대로 나옵니다. 그래서 이 변환기는 대문자 K를 만나면 소문자 k와 같은 ㅏ로 처리합니다.
영문 키 → 한글 음절 조합 알고리즘
키 하나하나를 자모로 바꾸는 것까지는 표 한 장이면 됩니다. 어려운 부분은 "이 자모가 앞 글자의 받침인지, 다음 글자의 첫 자음인지"를 정하는 조합 단계입니다. 입력기는 글자를 쓰는 중에도 한 글자씩 상태(초성 → 중성 → 종성)를 갖는 작은 상태 기계로 동작하고, 이 변환기도 같은 규칙을 따릅니다.
- 자음이 오면: 지금 만드는 글자가 없으면 초성으로 시작합니다. 초성만 있고 모음이 아직 없으면 앞 자음은 홀로 확정되고 새 글자를 시작합니다(예: "ㄱㄴ").
- 초성 + 모음이 있는 상태에서 자음이 오면: 일단 받침(종성)으로 붙입니다. 단 ㄸ·ㅃ·ㅉ은 받침이 될 수 없으므로 새 글자의 초성이 됩니다.
- 받침이 이미 있는데 자음이 또 오면: 두 자음이 표준 겹받침 11종 중 하나를 이루면 합치고, 아니면 앞 글자를 확정한 뒤 새 글자의 초성으로 시작합니다.
- 받침이 있는 상태에서 모음이 오면: 받침이 다음 글자의 초성으로 이동합니다. 겹받침이었다면 뒤쪽 자음만 이동하고 앞쪽은 받침으로 남습니다.
- 모음이 연달아 오면: 표준 겹모음 7종(ㅘㅙㅚㅝㅞㅟㅢ)이 되는 조합이면 합치고, 아니면 앞 글자를 확정합니다.
- 숫자, 공백, 줄바꿈, 문장부호처럼 자모가 아닌 문자는 현재 글자를 확정시키고 그대로 출력합니다.
음절의 최종 코드 값은 유니코드 한글 음절 영역(U+AC00부터 U+D7A3까지, 총 11,172자)에서0xAC00 + (초성 번호 × 21 + 중성 번호) × 28 + 종성 번호 공식으로 계산합니다. 초성은 19종, 중성은 21종, 종성은 "받침 없음"을 포함해 28종이기 때문입니다. 반대로 한글 → 영타 변환은 이 식을 거꾸로 풀어 초성·중성·종성 번호를 구하고, 각각을 위의 키 표로 바꿉니다. 아래 표는 빌드 시 위 공식으로 계산한 결과입니다.
| 글자 | 초성(번호) | 중성(번호) | 종성(번호) | 누르는 키 | 코드 값 |
|---|---|---|---|---|---|
| 한 | ㅎ (18) | ㅏ (0) | ㄴ (4) | gks | U+D55C |
| 닭 | ㄷ (3) | ㅏ (0) | ㄺ (9) | ekfr | U+B2ED |
| 왜 | ㅇ (11) | ㅙ (10) | 없음 (0) | dho | U+C65C |
| 꽃 | ㄲ (1) | ㅗ (8) | ㅊ (23) | Rhc | U+AF43 |
| 뷁 | ㅂ (7) | ㅞ (15) | ㄺ (9) | qnpfr | U+BDC1 |
예를 들어 "한"은 ㅎ(18번)·ㅏ(0번)·ㄴ(4번)이므로 (18 × 21 + 0) × 28 + 4 = 10,588이고, 여기에 0xAC00(44,032)을 더하면 54,620으로 16진수 D55C, 즉 U+D55C입니다. 키로는 g·k·s를 순서대로 누른 것과 같습니다.
겹모음과 겹받침 처리
두벌식에는 겹모음·겹받침 전용 키가 없습니다. 이미 있는 키를 연달아 눌러 합성하는 방식이므로, 변환기도 "키 두 개가 한 자모가 되는 경우"를 알고 있어야 합니다. 아래 두 표는 변환기가 쓰는 합성 규칙입니다.
| 겹모음 | 구성 | 누르는 키 |
|---|---|---|
| ㅘ | ㅗ + ㅏ | hk |
| ㅙ | ㅗ + ㅐ | ho |
| ㅚ | ㅗ + ㅣ | hl |
| ㅝ | ㅜ + ㅓ | nj |
| ㅞ | ㅜ + ㅔ | np |
| ㅟ | ㅜ + ㅣ | nl |
| ㅢ | ㅡ + ㅣ | ml |
ㅐ(o)와 ㅔ(p)가 단독 모음이라는 점에 유의하세요. ㅗ 뒤에 ㅔ(p)를 이어도 합성 규칙에 없으므로 "dhp"는 "왜"가 아니라 "오ㅔ"로 남고, "웨"를 만들려면 ㅜ(n) 뒤에 ㅔ(p)를 이어 "dnp"로 쳐야 합니다. "왜"는 ㅗ+ㅐ이므로 "dho"입니다.
| 겹받침 | 구성 | 누르는 키 |
|---|---|---|
| ㄳ | ㄱ + ㅅ | rt |
| ㄵ | ㄴ + ㅈ | sw |
| ㄶ | ㄴ + ㅎ | sg |
| ㄺ | ㄹ + ㄱ | fr |
| ㄻ | ㄹ + ㅁ | fa |
| ㄼ | ㄹ + ㅂ | fq |
| ㄽ | ㄹ + ㅅ | ft |
| ㄾ | ㄹ + ㅌ | fx |
| ㄿ | ㄹ + ㅍ | fv |
| ㅀ | ㄹ + ㅎ | fg |
| ㅄ | ㅂ + ㅅ | qt |
겹받침은 11종입니다. 한편 ㄲ·ㅆ은 겹받침이 아니라 쌍자음 받침이라 Shift 키(R, T)로 한 번에 입력하며, "rr"을 눌러도 ㄲ이 되지 않는다는 점이 흔한 함정입니다. 변환기는 "rkrr"을 "각ㄱ"으로, "rkRr"을 "갂ㄱ"으로 변환합니다.
검산 예시 (직접 실행해 확인한 값)
| 입력한 키 | 변환 결과 | 볼 점 |
|---|---|---|
| dkssud | 안녕 | ㅇㅏㄴ + ㄴㅕㅇ. 받침 ㄴ 뒤에 ㄴ이 오지만 ㄴㄴ은 겹받침이 아니므로 새 글자의 초성이 됨 |
| dkssudgktpdy | 안녕하세요 | 문장 전체가 한 줄로 이어져도 정확히 복원 |
| ekfr | 닭 | ㄹ+ㄱ이 겹받침 ㄺ으로 합쳐짐 |
| ekfrk | 달가 | 뒤에 모음이 오면 겹받침이 쪼개져 ㄱ만 다음 글자로 이동 |
| rkrt | 갃 | 키가 여기서 끝나면 ㄱ+ㅅ이 겹받침 ㄳ |
| rkrtk | 각사 | 같은 키에 모음 하나가 더 붙으면 ㅅ이 다음 글자로 이동 |
| rkqtdl | 값이 | ㅇ+ㅣ는 초성이므로 받침 ㅄ이 그대로 유지 |
| rhkdwk | 광자 | ㅗ+ㅏ가 ㅘ로 합성, 받침 ㅇ 뒤의 ㅈ+ㅏ는 새 글자 |
| dho / dhl / dhk | 왜 / 외 / 와 | 모음 한 글자 차이로 전혀 다른 글자 |
| Rkskek | 까나다 | Shift+R이 쌍자음 ㄲ |
| ahrrjtjqjrl | 목거서버기 | "rr"은 ㄲ이 아니라 받침 ㄱ + 다음 글자 초성 ㄱ |
역방향 검산도 했습니다. 안녕 → dkssud, 닭 → ekfr, 값 → rkqt, 읽다 → dlfrek, 읊 → dmfv, 꽃 → Rhc, 뷁 → qnpfr 로 바뀌고, 이 키 문자열을 다시 영타 → 한글로 돌리면 모두 원래 글자가 돌아옵니다. 왕복 결과가 맞는다는 것은 조합 로직이 서로 모순되지 않는다는 가장 단순한 증거입니다.
변환 로직의 세부 규칙
- Shift 영향이 없는 대문자: "K", "S" 같은 대문자는 실제 두벌식에서 Shift와 무관하게 같은 자모를 내므로 소문자와 동일하게 처리합니다.
- 자음 없는 겹모음 합성: "hk"처럼 자음 없이 모음만 연속되면 ㅗ와 ㅏ가 합쳐져 "ㅘ"가 됩니다.
- 한글 → 영타의 겹받침 낱자: "ㄳ"처럼 호환 자모 겹받침 낱자를 입력하면 "rt"로 바꿉니다. (이 한 가지는 왕복이 일치하지 않습니다. "rt"는 다시 "ㄱㅅ"으로 보이는데, 두벌식에는 낱자 ㄳ을 단독으로 칠 방법이 없기 때문입니다.)
변환이 의도와 달라지는 경계 사례
- Caps Lock이 켜져 있었을 때: 대문자 입력은 Shift가 눌린 것과 구분되지 않습니다. 모두 대문자인 "DKSSUD"는 이 변환기에서 "안녕"으로 바뀌지만, E·Q·R·T·W·O·P가 섞이면 Shift 효과(ㄸ·ㅃ·ㄲ·ㅆ·ㅉ·ㅒ·ㅖ)가 적용되어 의도와 다른 글자가 나올 수 있습니다. 이런 경우 입력을 소문자로 바꿔 다시 시도해보세요.
- 진짜 영어가 섞인 문장: "Hello dkssud"에서 Hello까지 변환하면 "ㅗ디ㅣㅐ"가 됩니다. 한영 전환을 깜빡한 구간만 골라서 붙여 넣어야 합니다. 도구가 영어 단어 여부를 판별하지는 않고, 흔한 영어 단어가 보이면 위에 안내 문구만 띄웁니다.
- 키 위치와 무관한 기호: 쉼표, 마침표, 숫자, 대괄호 등은 변환하지 않고 그대로 둡니다. 한글 모드에서 기호가 다르게 나오는 입력기도 있습니다.
- 쌍자음과 연타 구분: "rr"은 ㄱ을 두 번 친 것이고 ㄲ은 Shift+r(R)입니다. 문서에서 "ㄱㄱ"처럼 보이는 게 사실은 의도한 ㄲ이었다면 결과를 직접 고쳐야 합니다.
- 자모를 일부러 따로 친 경우: "ㅗ"와 "ㅏ"를 각각 확정해서 두 글자로 남기려던 입력도 키만 보면 "ㅘ"와 구분되지 않습니다. 변환기는 항상 합성하는 쪽을 택합니다.
- 입력기별 세부 차이: 운영체제·입력기 버전에 따라 낱자 입력 도중의 합성 동작이 조금 다를 수 있습니다. 이 도구는 표준 규칙으로 일관되게 처리하므로 입력기가 실제로 보여준 중간 화면과 완전히 같다고 보장하지는 않습니다.
- 세벌식·특수 자판: 앞서 설명한 대로 지원 대상이 아닙니다. 결과가 전혀 말이 안 된다면 자판 배열 자체가 다른 것일 수 있습니다.
이런 상황에서 활용하세요
- 메신저나 검색창에 한영 전환 없이 보낸 글자를 원문으로 복원할 때
- 아이디·비밀번호가 한글 모드로 입력되었는지 영문 모드로 입력되었는지 헷갈릴 때, 같은 키 입력이 한글로는 무엇이 되는지 확인할 때
- 두벌식 입력 원리, 한글 유니코드 구조, 자모 조합을 공부하거나 교육 자료를 만들 때
- 검색어 로그에 섞여 있는 영타 오입력을 한글로 복원해 분석할 때
한영 전환을 자주 실수한다면 변환보다 키보드 언어 전환 방법을 점검해 단축키를 손에 맞게 바꾸는 편이 낫고, 키보드 배열 자체가 궁금하다면 키보드 배열 안내가 도움이 됩니다. 완성된 한글에서 초성만 뽑으려면 초성 변환기를, 한글을 자모 단위로 풀고 합치려면한글 자모 분리·결합기를, 유니코드 정규화(NFC/NFD) 문제는한글 NFC 변환을 이용하세요.
자주 묻는 질문
숫자나 특수문자가 섞여 있어도 변환되나요?
네. 두벌식 자음·모음 키에 해당하지 않는 문자(숫자, 공백, 특수문자, 줄바꿈 등)는 변환하지 않고 그대로 유지하며, 그 문자를 만나면 앞에서 조합하던 글자는 확정됩니다.
세벌식이나 다른 자판 배열도 지원하나요?
현재는 가장 널리 쓰이는 두벌식(KS X 5002) 자판 배열만 지원합니다. 세벌식, 천지인·나랏글 같은 휴대폰 자판은 키와 글자의 대응이 다르므로 결과가 맞지 않습니다.
"rr"을 쳤는데 왜 ㄲ이 아니라 ㄱㄱ으로 나오나요?
두벌식에서 ㄲ은 Shift+r(대문자 R)로 입력하는 별도 자모입니다. 소문자 r을 두 번 누르면 ㄱ이 두 번 입력될 뿐이라 합쳐지지 않습니다. ㄸ(E), ㅃ(Q), ㅆ(T), ㅉ(W)도 마찬가지입니다.
겹받침 뒤에 모음이 오면 왜 글자가 쪼개지나요?
한글 맞춤법은 받침의 뒤쪽 자음을 뒤 글자의 초성으로 읽고 쓰기 때문입니다. "닭"(ekfr) 뒤에 ㅏ(k)가 오면 "달가"가 되어 ㄹ은 앞 글자 받침에 남고 ㄱ만 새 글자의 초성이 됩니다. 입력기와 이 변환기 모두 같은 방식으로 재조합합니다.
대문자 K, S 같은 입력도 한글로 바뀌나요?
네. 두벌식에서 Shift에 별도 자모가 없는 키는 대문자도 소문자와 같은 자모를 냅니다. 그래서 "K"는 ㅏ, "S"는 ㄴ으로 변환합니다. Shift 효과가 있는 R·E·Q·T·W·O·P만 별도 자모(ㄲ·ㄸ·ㅃ·ㅆ·ㅉ·ㅒ·ㅖ)가 됩니다.
입력한 내용이 서버로 전송되나요?
아니요. 모든 변환은 브라우저 안에서 자바스크립트로만 처리되며 입력한 글자는 외부로 전송되지 않습니다. 다만 비밀번호처럼 민감한 문자열은 공용 컴퓨터에서 입력하지 않는 것이 좋습니다.