터미널 한글 깨짐, 3층위로 구분하기 — 명령이 실행되느냐로 원인을 가른다
윈도우 터미널에서 한글이 깨지거나 영문이 넓어지는 문제를 코드페이지·IME 조합·전각 세 층위로 구분하는 진단 프레임. 핵심은 명령이 실행되는지 여부.
“한글이 깨진다”, “영문이 넓게 벌어진다”는 하나의 증상처럼 보이지만 원인이 다른 세 층위가 섞여 있다. 층위를 먼저 구분하지 않으면 폰트를 바꾸거나 인코딩을 만졌다가 엉뚱한 곳만 건드리게 된다. 어느 층에서 깨지는지 가르는 법부터 정리한다.
결론 먼저
| 층위 | 증상 | 원인 | 구분점 | 해결 |
|---|---|---|---|---|
| 1. 코드페이지 | 출력이 ???나 엉뚱한 글자 | 쓴 인코딩 ≠ 읽는 인코딩 | 출력이 깨짐 (입력은 정상) | 양쪽 인코딩을 맞춤 |
| 2. IME·PSReadLine | 자모가 풀리거나(ㅎㅏㄴㄱㅡㄹ) 글자가 겹침 | 조합 중 글자와 예측 입력 충돌 | 타이핑 중 조합 단계에서 깨짐 | PSReadLine 예측 입력 점검 |
| 3. 전각 문자 | 영문이 2칸씩 넓어지고 명령이 안 먹힘 | 입력 문자 자체가 전각(U+FFxx 계열) | 명령이 실행되지 않음 | IME 전각 모드 해제 |
가장 헷갈리는 건 “영문이 넓다”는 표면 증상이다. 글꼴이나 문자 폭 설정 때문에 넓어 보일 수도 있고, 전각 문자가 입력돼도 넓어 보인다. 결정적 구분점은 명령이 실행되느냐다. 글꼴·폭 문제면 글자만 넓을 뿐 exit는 동작하고, 전각 문자면 명령 자체가 다른 코드포인트라 실행이 실패한다.
층위 1: 코드페이지 — 출력 바이트를 다르게 해석한다
코드페이지 문제는 출력한 쪽의 인코딩과 읽는 쪽의 인코딩이 다를 때 생긴다.
1
2
3
4
5
프로그램이 출력한 바이트
↓
터미널 / 셸이 다른 인코딩으로 해석
↓
??? 또는 엉뚱한 문자
현재 Windows 콘솔 코드페이지는 다음처럼 확인할 수 있다.
1
chcp
대표적으로:
1
2
949 → 한국어 Windows에서 흔히 보는 레거시 코드페이지
65001 → UTF-8
중요한 것은 무조건 65001로 바꾸는 것이 아니라 어느 프로그램이 어떤 인코딩으로 쓰고, 어느 계층이 그것을 어떻게 읽는지 확인하는 것이다.
1
2
입력은 정상인데 출력만 깨진다
→ 문자 폭이나 IME보다 인코딩 경계를 먼저 의심
층위 2: IME·PSReadLine — 입력 조합 중 화면이 어긋난다
타이핑 중 “한글”이 ㅎㅏㄴㄱㅡㄹ처럼 자모로 분리되거나 글자가 겹쳐 보인다면, 저장된 바이트를 잘못 읽는 문제가 아니라 입력 조합 단계를 본다.
한글 IME는 여러 키 입력을 조합해 한 글자를 완성한다.
1
2
3
ㅎ + ㅏ + ㄴ
↓
한
PowerShell에서 PSReadLine의 예측 입력이나 터미널의 렌더링이 조합 중인 문자와 충돌하면, 완성 전 상태가 어색하게 보일 수 있다.
먼저 예측 입력을 끈 상태와 비교한다.
1
Set-PSReadLineOption -PredictionSource None
이후 증상이 사라진다면 코드페이지가 아니라 입력기 ↔ 셸 UI 계층의 문제에 가깝다.
1
2
3
4
5
출력된 파일/로그가 깨짐
→ Encoding
내가 타이핑하는 도중 조합이 깨짐
→ IME / PSReadLine / Terminal rendering
층위 3: 전각 문자 — 입력 문자 자체가 다르다
영문이 한 글자당 두 칸씩 벌어져 보이고 명령도 실행되지 않는다면 입력된 문자의 코드포인트를 확인한다.
예를 들어:
1
exit
와:
1
exit
는 겉보기만 비슷할 뿐 다른 문자열이다.
1
2
e → U+0065 LATIN SMALL LETTER E
e → U+FF45 FULLWIDTH LATIN SMALL LETTER E
따라서 셸은 exit를 exit 명령으로 인식하지 않는다.
1
2
❯ exit
... is not recognized ...
이 경우 폰트나 UTF-8 설정을 바꿔도 해결되지 않는다. 입력 자체가 전각 문자이기 때문이다.
Windows 한글 IME 설정에서 전각/반각 상태를 확인하고 반각으로 되돌린다. 환경에 따라 전각/반각 전환 키가 지정되어 있을 수 있으므로 IME 상태 표시와 키 설정도 함께 확인한다.
전각인지 빠르게 확인하는 법
메모장 같은 일반 GUI 입력창에서도 같은 영문을 입력해 본다.
1
2
3
4
5
6
메모장에서도 exit
→ IME 입력 상태 문제
메모장에서는 exit
터미널에서만 이상함
→ Terminal / Shell 계층을 다시 확인
그리고 가장 강한 신호는 이것이다.
영문이 넓어 보이면서 명령 자체가 실행되지 않는다면, 먼저 전각 문자인지 확인한다.
진단 순서
증상을 보고 바로 설정을 바꾸지 말고 다음 순서로 범위를 좁힌다.
1
2
3
4
5
6
7
8
9
10
1. 입력한 명령이 실행되는가?
├─ No + 영문이 넓음 → 전각 문자 확인
└─ Yes
↓
2. 타이핑 중 한글 조합이 깨지는가?
├─ Yes → IME / PSReadLine
└─ No
↓
3. 프로그램 출력만 깨지는가?
└─ Yes → 코드페이지 / Encoding 경계
이 흐름의 장점은 “한글 깨짐”이라는 모호한 증상을 문자가 만들어지는 경로의 어느 층에서 문제가 생겼는지로 바꾸는 데 있다.
정리
1
2
3
4
5
6
7
8
9
10
11
키 입력
↓
IME가 문자 조합
↓
Shell 입력 UI
↓
프로그램 실행
↓
바이트 출력
↓
Terminal이 문자로 표시
문제 위치도 이 흐름에 대응한다.
1
2
3
4
5
6
7
8
IME가 다른 문자를 만든다
→ 전각
IME 조합과 Shell UI가 충돌한다
→ 자모 분리·겹침
출력 바이트와 해석 Encoding이 다르다
→ 깨진 문자
따라서 “터미널 한글이 깨진다”고 하나의 해결법을 찾기보다 입력 → 조합 → 실행 → 출력 → 표시 중 어디서 처음 달라지는지 찾는 것이 가장 빠르다.