상세 컨텐츠

본문 제목

iTerm2에서 SSH로 Linux 접속할 때 한글 깨짐 + zsh/Powerline 테마 잡기

환경설정

by 코드스키 2026. 7. 22. 15:45

본문

 iTerm2 SSH 한글 로케일과 zsh Powerline 설정 대표 이미지
iTerm2 SSH 한글 로케일과 zsh Powerline 설정 대표 이미지

집에 새로 맞춘 우분투 PC를 메인 작업 환경으로 쓰려고 하는데 노트북은 맥북 에어다. 책상에서 같은 모니터를 쓰면 좋겠지만 자리를 자주 옮기다 보니, 맥북에서 iTerm2로 우분투에 SSH 접속하는 게 제일 편했다. ssh dohyun@<리눅스IP>로 접속까지는 잘 됐는데, 두 가지가 계속 거슬렸다.

하나는 우분투 쪽에서 한글이 들어간 파일명이나 메시지가 표시될 때 폭이 너무 넓게 잡혀서 줄이 밀려 보이는 문제였다. 한글파일.txt한 글 파 일 . t x t처럼 사이가 벌어진 느낌으로 보였다. 다른 하나는 우분투 기본 bash 프롬프트가 너무 단조로워서 pwd도 매번 쳐야 하는 게 불편했다는 거였다.

한글 폭이 이상하게 렌더링되는 문제

처음엔 우분투 쪽 로케일이 잘못된 줄 알았다. locale을 쳐보니 ko_KR.UTF-8로 잘 잡혀 있었고, 폰트 문제도 아니었다. 한글 자체는 잘 보였고, 다만 한 글자가 차지하는 셀 폭이 두 칸이 아니라 그 이상처럼 렌더링됐다.

찾아보니 iTerm2의 "ambiguous-width" 설정 때문이었다. 유니코드 명세상 어떤 문자(그리스 문자나 일부 기호)는 폭이 모호하게 정의돼 있어서, 터미널이 그걸 1칸으로 그릴지 2칸으로 그릴지 선택할 수 있다. iTerm2는 기본적으로 이걸 double-width로 그리게 돼 있는데, CJK 환경에서는 이게 한글과 충돌해서 폭 계산이 꼬이는 것 같았다.

iTerm2 → Settings → Profiles → Text에서 "Treat ambiguous-width characters as double-width" 체크를 해제하니 바로 해결됐다. 같은 메뉴 옆에 있는 "Use Unicode version 9+ widths"는 켜두는 게 좋다. 이모지나 최신 유니코드 글리프의 폭 계산을 더 정확하게 해준다.

여기서 하나 더 알아둔 게 있다. macOS는 한글 파일명을 NFD(분리형, ㅎ+ㅏ+ㄴ+ㄱ+ㅡ+ㄹ)로 저장하고 Linux는 NFC(조합형, 한글)를 쓰는데, 이 때문에 어떤 상황에서는 한글이 자모 단위로 쪼개져 보이는 일이 생긴다고 한다. iTerm2의 "Unicode normalization form" 옵션은 기본값(None)으로 두는 게 무난했다. 굳이 NFC로 강제했다가 다른 문제가 생길 수 있어서 건드리지 않았다.

bash에서 zsh로

기본 bash가 너무 밋밋해서 zsh로 갈아탔다.

sudo apt install -y zsh
chsh -s $(which zsh)

chsh로 기본 셸을 바꾸고 로그아웃 후 다시 로그인했다. 이어서 oh-my-zsh를 설치했다.

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

설치가 끝나면 ~/.zshrc가 자동으로 생기고, 여기서 ZSH_THEME 항목을 바꾸면 테마가 바뀐다. 처음엔 agnoster 테마를 골랐다.

ZSH_THEME="agnoster"

source ~/.zshrc 하고 새 터미널을 띄웠는데 화살표 모양 글리프가 두부(□)로 떴다. 여기서 30분을 날렸다.

Powerline 폰트 함정

agnoster 테마는 Powerline 글리프(화살표 모양)를 쓰는데, 이건 Powerline 패치가 들어간 폰트가 있어야 그려진다. 일반 폰트에는 그 글리프가 없어서 두부로 표시된 거였다.

가장 쉬운 해결책은 Nerd Fonts(Powerline과 아이콘 글리프를 다 박아넣은 패치판) 폰트를 쓰는 거였다.

mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts
wget https://github.com/ryanoasis/nerd-fonts/releases/download/v3.1.1/Meslo.zip
unzip Meslo.zip
fc-cache -fv

그런데 이걸 우분투에 깔아놓고 나서야 깨달았다. SSH 클라이언트는 맥북의 iTerm2니까, 폰트는 우분투가 아니라 iTerm2 쪽에 깔아야 했다. 터미널에서 글자를 실제로 그리는 건 클라이언트 쪽이다. 맥에서는 이렇게 설치했다.

brew tap homebrew/cask-fonts
brew install --cask font-meslo-lg-nerd-font

iTerm2 → Settings → Profiles → Text → Font에서 MesloLGS NF로 폰트를 바꾸니 화살표가 살아났다.

색감과 프롬프트 마무리

색감도 바꾸고 싶어서 Dracula 컬러 스킴을 깔았다. iTerm2용 컬러 프리셋은 draculatheme.com/iterm에서 받을 수 있다.

git clone https://github.com/dracula/iterm.git ~/dracula-iterm

iTerm2 → Settings → Profiles → Colors → Color Presets → Import에서 Dracula.itermcolors를 선택하고, 다시 Color Presets에서 Dracula를 적용하면 된다.

마지막으로 하나 더 손봤다. agnoster 테마는 기본적으로 user@hostname을 항상 표시하는데, 노트북에서 SSH로 들어가면 이게 길어져서 가독성이 떨어졌다. ~/.zshrc에 아래 한 줄을 추가하면 해결된다.

DEFAULT_USER="dohyun"

agnoster는 현재 사용자가 DEFAULT_USER와 같으면 user@host 부분을 그리지 않는다. SSH로 접속한 경우엔 자동으로 다시 표시되기 때문에 원격/로컬 구분도 알아서 된다.

돌아보면 원격 터미널의 한글 폭 문제는 거의 다 클라이언트 쪽 ambiguous-width 설정 때문이었고, Powerline 화살표가 두부로 뜨는 건 100% 폰트 문제였다. 둘 다 iTerm2 설정 몇 번 만지는 걸로 끝났다.

참고한 자료:

  • iTerm2 공식 FAQ — CJK characters and double-width 설정
  • iTerm2 Documentation — Text Profile Preferences
  • Nerd Fonts 프로젝트 (ryanoasis/nerd-fonts)
  • oh-my-zsh GitHub

문자 인코딩과 글꼴 문제를 따로 확인하기

SSH에서 한글이 깨지는 문제와 Powerline 기호가 네모로 보이는 문제는 겉보기만 비슷하다. 전자는 로컬·원격의 UTF-8 로케일과 터미널 환경변수를 보고, 후자는 실제로 선택한 글꼴에 필요한 glyph가 들어 있는지 봐야 한다.

iTerm2 공식 문서
iTerm2 공식 문서
OpenSSH 공식 매뉴얼 목록
OpenSSH 공식 매뉴얼 목록
Z shell 공식 사이트
Z shell 공식 사이트
Powerline fonts 공식 GitHub 저장소
Powerline fonts 공식 GitHub 저장소
# 로컬과 원격 양쪽에서 비교
locale
printf '%s
' "$LANG" "$LC_ALL"

# 실제 셸 확인
printf '%s
' "$SHELL"
ps -p $$ -o comm=

로케일이 정상인데 프롬프트 아이콘만 깨지면 인코딩을 다시 설치할 문제가 아니다. iTerm2 프로필의 Normal/Non-ASCII Font와 zsh 테마가 요구하는 글꼴을 맞춘다. 반대로 파일명과 명령 출력의 한글까지 깨지면 원격 서버 로케일부터 확인한다.

공식 자료

관련글 더보기