Ubuntu 서버에 SSH로 접속했을 때 터미널에서 한글이 깨지는 현상을 경험한 적이 있나요?
이 문제는 주로 서버의 로케일(Locale) 설정이 올바르게 되어 있지 않거나, SSH 클라이언트에서 UTF-8이 설정되지 않아서 발생합니다.
이번 포스팅에서는 시스템 기본 언어를 영어(English)로 유지하면서 한글이 깨지지 않도록 설정하는 방법을 정리해보겠습니다.
한글이 깨지는 이유
SSH 연결 시 한글이 깨지는 이유는 이런 이유들이 있습니다.
- 로케일이 올바르게 설정되지 않음
- 서버의 로케일이
C
또는POSIX
로 설정되어 있으면 한글이 제대로 표시되지 않습니다.
- 서버의 로케일이
- UTF-8 인코딩이 적용되지 않음
- 터미널에서 UTF-8을 지원하지 않거나, 클라이언트와 서버 간 인코딩이 일치하지 않을 경우 깨짐 현상이 발생합니다.
- SSH 클라이언트 설정 문제
- Windows의 PuTTY나 WSL(Windows Subsystem for Linux) 환경에서 UTF-8이 제대로 적용되지 않은 경우 발생할 수 있습니다.
시스템 언어는 영어 유지 + 한글 깨짐 방지
하지만 우분투 언어 자체를 한국어로 바꾸고 싶지는 않죠..
우분투의 기본 언어를 영어로 유지하면서 한글이 깨지지 않도록 하려면 LC_CTYPE
만 ko_KR.UTF-8
로 변경하면 됩니다.
1. 현재 로케일 확인
먼저, 서버에서 현재 설정된 로케일을 확인합니다.
locale
출력 결과가 아래처럼 나온다면, UTF-8이 아닌 C
또는 POSIX
상태일 가능성이 높습니다.
LANG=en_US.UTF-8
LC_ALL=
LC_CTYPE=C
이 경우 한글이 제대로 표시되지 않으므로 LC_CTYPE을 ko_KR.UTF-8
로 변경해야 합니다.
2. 로케일 설정 (한글 깨짐 방지)
현재 시스템 언어는 en_US.UTF-8
로 유지하면서, 한글 처리를 위해 LC_CTYPE만 ko_KR.UTF-8
로 설정합니다.
sudo locale-gen en_US.UTF-8 ko_KR.UTF-8
sudo update-locale LANG=en_US.UTF-8 LC_CTYPE=ko_KR.UTF-8
LANG=en_US.UTF-8
→ 시스템 기본 언어는 영어로 유지LC_CTYPE=ko_KR.UTF-8
→ 한글 인코딩 처리 가능하도록 설정
3. 설정 적용
이제 변경 사항을 적용합니다.
export LANG=en_US.UTF-8
export LC_CTYPE=ko_KR.UTF-8
source /etc/default/locale
변경 사항을 영구적으로 유지하려면 ~/.bashrc
또는 ~/.profile
에 추가합니다.
echo 'export LANG=en_US.UTF-8' >> ~/.bashrc
echo 'export LC_CTYPE=ko_KR.UTF-8' >> ~/.bashrc
source ~/.bashrc
설정을 적용한 후 locale
명령어를 실행하면 다음과 같은 결과가 나와야 합니다.
LANG=en_US.UTF-8
LC_CTYPE=ko_KR.UTF-8
물론 SSH를 사용하는 클라이언트(로컬 터미널)에서도 UTF-8이 적용되어 있어야 합니다.
Mac/Linux
Mac이나 Linux의 터미널에서는 기본적으로 UTF-8이 적용되어 있을 것입니다.
echo $LANG
출력이 UTF-8
이 아니라면 다음을 실행하세요.
export LANG=en_US.UTF-8
Windows (PuTTY 사용 시)
PuTTY를 사용할 경우에는 UTF-8 설정이 필요합니다.
PuTTY → Window → Translation
으로 이동Character set
을UTF-8
로 변경Session → Save
를 눌러 설정 저장 후 다시 접속
Windows (Windows Terminal / WSL)
Windows의 기본 터미널(Windows Terminal)이나 WSL을 사용할 경우 다음을 실행하세요.
chcp 65001
이후 다시 SSH 접속을 시도하면 한글이 정상적으로 표시됩니다.
혹시 이렇게 해도 한글이 계속 꺠진다면 locale -a
출력 결과를 확인해보세요 :)