SSH한글 입력TermiusAndroidiPhone

SSH 한글 입력이 깨지는 이유와 해결법 — Termius·Termux·ConnectBot 모바일 편

터미널에서 ㅎㅏㄴㄱㅡㄹ처럼 자모가 분리된 채로 찍히거나, 입력한 글자가 사라진 경험이 있다면 이 글이 도움이 됩니다.

핵심만 먼저 정리하면 다음과 같습니다.

  • 한글은 자음과 모음을 실시간으로 조합하는 문자입니다. 이 “조합 중” 상태를 터미널 앱이 제대로 다루지 못하면 한글이 깨집니다.
  • 한글이 보이지 않는 문제(locale·글꼴)와 입력되지 않는 문제(IME)는 원인이 다릅니다. 먼저 어느 쪽인지 구분해야 합니다.
  • 입력 문제는 서버 설정으로는 고쳐지지 않습니다. 한글을 입력창에서 완성한 뒤 터미널로 보내는 방식이 근본적인 해결책입니다.

먼저 구분하기: 표시 문제인가, 입력 문제인가

“한글이 깨진다”는 말 안에는 서로 다른 두 가지 문제가 섞여 있습니다. 해결 방법이 완전히 다르기 때문에 먼저 구분해 두면 시간을 크게 아낄 수 있습니다.

증상원인고칠 곳
ls 결과의 한글 파일명이 ???나 네모로 보인다서버 locale 또는 앱 글꼴서버 / 앱 글꼴 설정
git log의 한글 커밋 메시지가 \354\225\210처럼 보인다git의 경로 이스케이프 설정git config
입력할 때 ㅎㅏㄴ처럼 자모가 분리된다IME 조합 처리터미널 앱
한글을 입력하면 글자가 사라지거나 두 번 찍힌다IME 조합 처리터미널 앱
백스페이스를 누르면 글자 전체가 아니라 엉뚱한 곳이 지워진다IME 조합 처리터미널 앱

위쪽 두 줄은 서버 쪽 설정으로 고칠 수 있습니다. 아래쪽 세 줄은 앱이 한글 조합을 어떻게 처리하느냐의 문제라서 서버를 아무리 만져도 해결되지 않습니다.

표시 문제라면: 서버 쪽 체크리스트

서버에 접속해서 아래 명령어부터 확인해 보세요.

locale

LANG이나 LC_CTYPE이 POSIX 또는 C로 되어 있다면 UTF-8이 아닌 상태입니다. ~/.bashrc(zsh라면 ~/.zshrc)에 다음을 추가합니다.

export LANG=C.UTF-8
# 한국어 메시지까지 원하면 ko_KR.UTF-8 (서버에 로케일이 생성되어 있어야 함)

git log나 git status에서 한글 파일명이 8진수 이스케이프로 보인다면 git 설정입니다.

git config --global core.quotepath false

tmux 안에서만 한글이 깨진다면 tmux를 UTF-8 모드로 띄우는 것도 방법입니다.

tmux -u new -s work

여기까지 했는데도 한글이 네모로 보인다면 서버가 아니라 앱의 글꼴에 한글 글리프가 없는 경우입니다. 앱의 글꼴 설정을 한글을 포함한 글꼴로 바꾸세요.

입력 문제의 원인: 터미널은 “조합 중”을 모른다

여기부터가 본론입니다. 모바일 SSH 앱에서 한글 입력이 유독 불안정한 이유는 터미널과 IME의 동작 방식이 근본적으로 다르기 때문입니다.

터미널은 키 입력을 받는 즉시 한 글자씩 서버로 보냅니다. 서버 쪽 셸이나 프로그램이 그 문자를 받아 화면에 다시 그려주는 구조입니다.

반면 한글 IME는 입력 도중에 “아직 확정되지 않은” 상태를 가집니다. 한을 입력하는 과정을 보면 이렇습니다.

  1. ㅎ 입력 → 화면에는 ㅎ (미확정)
  2. ㅏ 입력 → ㅎ이 하로 바뀜 (미확정)
  3. ㄴ 입력 → 하가 한으로 바뀜 (미확정)
  4. 다음 글자를 치거나 스페이스를 누르면 한이 확정됨

이 미확정 상태(preedit)를 어떻게 서버로 보낼지가 문제입니다. 방법은 대략 세 가지이고, 각각 이런 증상으로 이어집니다.

  • 자모를 도착하는 대로 보낸다 → 서버에는 ㅎ, ㅏ, ㄴ이 따로 도착해 ㅎㅏㄴ으로 찍힌다
  • 조합이 바뀔 때마다 “지우고 다시 쓰기”를 보낸다 → ㅎ을 지우고 하를 쓰고, 다시 지우고 한을 쓰는 식. 서버 쪽 프로그램이 지우기를 다르게 해석하면 글자가 사라지거나 엉뚱한 곳이 지워진다
  • 확정된 글자만 보낸다 → 이론적으로 가장 안전하지만, 키보드 앱마다 “확정” 신호를 보내는 방식이 달라 마지막 글자가 누락되거나 두 번 찍히기 쉽다

한국어는 일본어보다 조합이 훨씬 자주 일어납니다. 받침 하나를 칠 때마다 앞 글자가 바뀌기 때문입니다. 그래서 같은 앱이라도 일본어보다 한글에서 문제가 더 잘 드러납니다.

Claude Code 같은 TUI에서 더 심해지는 이유

bash 프롬프트에서는 그럭저럭 되던 한글이 Claude Code나 vim 안에서는 깨지는 경우가 많습니다. 이런 TUI 프로그램은 입력을 받을 때마다 화면을 직접 다시 그리기 때문에, “지우고 다시 쓰기” 방식의 입력과 특히 궁합이 나쁩니다.

실제로 Claude Code의 GitHub에도 모바일 SSH에서 한글이 사라지는 문제가 보고된 적이 있습니다.

[BUG] Korean input characters disappear on iOS mobile SSH (anthropics/claude-code #15705)

프롬프트를 한국어로 길게 쓰는 AI 코딩 에이전트 시대가 되면서, 예전에는 “한글은 잘 안 쓰니까” 하고 넘어가던 문제가 매일 부딪히는 문제가 됐습니다.

앱별로 지금 당장 쓸 수 있는 회피책

앱을 바꾸지 않고 버티는 방법들입니다. 어떤 방법이든 “한글을 다른 곳에서 완성한 뒤 터미널로 넘긴다”는 원리는 같습니다.

Termius (Android / iPhone)

모바일 Termius에는 한글 조합 방식을 바꾸는 설정이 없습니다. 가장 확실한 방법은 메모 앱에서 문장을 완성한 뒤 붙여넣기입니다. 짧은 커밋 메시지 정도라면 이것으로 충분합니다. 다만 Claude Code에 몇 줄짜리 지시를 자주 보내야 한다면 앱을 오가는 것만으로도 꽤 지칩니다.

Termux (Android)

Termux는 SSH 클라이언트라기보다 안드로이드 위의 리눅스 환경입니다. 터미널 화면에 직접 한글을 칠 때 같은 조합 문제가 생길 수 있습니다. 화면 아래 추가 키 줄을 왼쪽으로 스와이프하면 나오는 텍스트 입력 칸에서 문장을 완성한 뒤 보내는 방법이 가장 안정적입니다.

ConnectBot (Android)

오래된 오픈소스 SSH 클라이언트로, 한글 조합 처리는 키보드 앱에 따라 결과가 크게 달라집니다. 이 앱 역시 붙여넣기가 가장 확실한 회피책입니다.

키보드 앱 바꿔 보기

Gboard와 삼성 키보드는 미확정 글자를 앱에 넘기는 방식이 다릅니다. 지금 쓰는 키보드에서 자모가 분리된다면 다른 키보드로 바꾸는 것만으로 증상이 줄어들기도 합니다. 다만 근본 해결은 아니며, 앱이 업데이트되면 결과가 다시 바뀔 수 있습니다.

근본적인 해결: 입력창에서 완성하고 한 번에 보내기

회피책들의 공통점은 “조합은 OS의 입력창에 맡기고, 터미널에는 완성된 문장만 보낸다”는 것입니다. 이 흐름을 앱 안에 처음부터 넣으면 붙여넣기 없이도 같은 효과를 얻을 수 있습니다.

제가 개발하고 있는 SSH Term의 IME 모드가 바로 이 방식입니다.

  1. 화면 위쪽 모드 바의 IME 버튼을 누른다 (외장 키보드는 Ctrl+E)
  2. 나타난 입력창에 평소처럼 한글을 입력한다. 조합은 OS 키보드가 일반 앱과 똑같이 처리한다
  3. 전송하면 완성된 문장이 터미널로 한 번에 들어간다

입력창은 여러 줄을 지원하므로 Claude Code에 보낼 긴 지시도 한 번에 작성할 수 있습니다. 외장 키보드에서는 Shift+Enter로 줄을 바꿀 수 있습니다. 터미널 화면의 한글 표시도 한글 대체 글꼴로 처리하기 때문에, 출력 쪽에서 네모가 뜨는 일도 없습니다.

원래는 제가 일본어 입력이 깨지는 문제 때문에 만든 기능입니다. 그런데 일본어의 가나-한자 변환과 한글 조합은 “미확정 상태를 가진다”는 점에서 구조가 같아서, 한글에도 그대로 효과가 있었습니다.

App Store에서 SSH Term 다운로드 Google Play에서 SSH Term 다운로드

iPhone · iPad · Android를 지원하며, 한 번 구매하면 모든 기능을 쓸 수 있습니다(App Store ₩7,700 / Google Play ₩8,500, 구독·광고 없음).

물론 반드시 이 앱이어야 하는 것은 아닙니다. 가끔 짧은 한글만 입력한다면 지금 쓰는 앱에서 메모 앱 붙여넣기로 충분하고, Termux를 쓰고 있다면 텍스트 입력 칸이 같은 역할을 합니다. 중요한 것은 앱의 이름보다 “조합은 입력창에서, 터미널에는 완성된 문장만”이라는 흐름입니다.

정리

  • 한글이 보이지 않으면 서버 locale과 앱 글꼴을, 입력되지 않으면 터미널 앱의 IME 처리를 의심합니다.
  • 입력 문제의 원인은 한글 조합(미확정 상태)을 터미널로 보내는 방식에 있어서, 서버 설정으로는 고쳐지지 않습니다.
  • 당장은 메모 앱 붙여넣기나 Termux의 텍스트 입력 칸으로 버틸 수 있고, 한국어로 AI 에이전트에 자주 지시한다면 입력창 방식(IME 모드)을 가진 앱으로 바꾸는 것이 가장 편합니다.