Nerd Font: 터미널 아이콘을 위한 개발자 폰트

Nerd Font: 터미널 아이콘을 위한 개발자 폰트

터미널 도구를 설치하다 보면 “Nerd Font를 설치하세요”라는 안내를 한 번쯤 보셨을 거예요. Starship을 깔 때도 그렇고, NeoVim 플러그인이나 Ghostty 같은 터미널을 꾸밀 때도 빠지지 않고 등장하죠.

그런데 막상 “Nerd Font가 뭔데?” 하고 물으면 선뜻 설명하기가 애매합니다. 폰트인 건지 아이콘 라이브러리인 건지 헷갈리는 분들을 위해 이 글을 준비했어요.

Nerd Font가 뭔가요?

Nerd Font는 기존 프로그래밍 폰트에 개발 관련 아이콘을 덧붙여주는 오픈소스 프로젝트입니다. “폰트 패치(patch)“라는 방식으로 동작하는데요, 예를 들어 JetBrains Mono라는 폰트가 있으면 거기에 파일 아이콘, Git 심볼, 언어 로고 같은 글리프(glyph, 폰트 안에 들어 있는 각 문자의 시각적 형태)를 합쳐서 “JetBrainsMono Nerd Font”라는 새 폰트를 만들어주는 거예요.

한마디로 코딩용 폰트 + 10,000개 넘는 아이콘 = Nerd Font라고 보면 됩니다.

왜 필요한가요?

터미널에서 동작하는 개발 도구들은 텍스트만으로 UI를 구성해야 합니다. 그런데 파일 트리에 폴더 아이콘을 보여주거나, 상태바에 Git 브랜치 심볼을 띄우려면 일반 텍스트로는 한계가 있어요. 이때 Nerd Font에 포함된 특수 유니코드 글리프를 활용하는 겁니다.

일반 폰트로 터미널을 쓰면 이런 아이콘 자리에 (두부, tofu)나 ? 같은 깨진 문자가 보입니다. 해당 유니코드 코드 포인트에 대응하는 글리프가 폰트에 없기 때문이에요. Nerd Font를 설치하면 이 자리에 제대로 된 아이콘이 표시됩니다.

실제로 Nerd Font를 필요로 하는 도구가 꽤 많습니다.

쉘 프롬프트 쪽에서는 Starship이 대표적이에요. 공식 문서에서 Nerd Font를 필수 전제조건으로 안내하고 있고, Oh My Posh나 Powerlevel10k 같은 Zsh 테마도 Nerd Font 아이콘에 의존합니다.

NeoVim 생태계에서도 많이 쓰여요. nvim-tree(파일 탐색기), lualine(상태바), telescope(파일 검색) 같은 인기 플러그인이 파일 타입별 아이콘을 표시할 때 Nerd Font 글리프를 사용하거든요. NvChadLazyVim 같은 NeoVim 설정 프레임워크도 설치 조건으로 Nerd Font를 요구합니다.

ls 명령어를 대체하는 lsd나 eza도 파일 아이콘 표시에 Nerd Font를 쓰고, yazi나 ranger 같은 터미널 파일 관리자도 마찬가지예요.

어떤 아이콘이 들어 있나요?

Nerd Font에는 13개의 아이콘 세트가 통합되어 있어서, 하나만 설치하면 다양한 도구에서 쓰는 아이콘이 전부 커버됩니다.

주요 아이콘 세트를 살펴보면, Powerline Symbols는 쉘 프롬프트에서 화살표 구분자로 쓰이는 심볼이에요. Starship이나 Oh My Posh의 프롬프트 모양이 예쁜 건 이 글리프 덕분입니다.

Devicons는 프로그래밍 언어와 개발 도구 로고를 모아놓은 세트예요. NeoVim의 파일 탐색기에서 .py 파일 옆에 Python 뱀 아이콘이 뜨거나 Docker 고래가 보이는 게 이 세트 덕분이죠.

웹에서 많이 쓰이는 Font Awesome도 들어가 있고요. Nerd Font는 이걸 터미널에서도 쓸 수 있도록 폰트에 포함시켰어요.

가장 큰 비중을 차지하는 건 Material Design Icons로 6,000개가 넘는 아이콘이 들어 있습니다. 그 외에 GitHub 공식 아이콘인 Octicons, 리눅스 배포판 로고가 담긴 Font Logos 같은 세트도 포함되어 있어요.

전체 글리프를 검색하고 싶다면 Nerd Fonts Cheat Sheet에서 아이콘 이름으로 찾아볼 수 있습니다.

어떤 폰트를 골라야 하나요?

Nerd Font 프로젝트는 80개가 넘는 패치된 폰트를 제공합니다. 기존에 좋아하는 코딩 폰트가 있다면 그 폰트의 Nerd Font 버전을 설치하면 돼요.

인기 있는 폰트 몇 가지를 소개해볼게요.

JetBrains Mono는 JetBrains에서 만든 코딩 폰트로 가독성이 뛰어납니다. Ghostty 터미널 앱에서 기본 폰트로 사용하고 있죠.

Fira Code는 합자(ligature) 지원으로 유명해요. !=처럼, =>처럼 표시해주거든요. 합자를 좋아하는 분에게 추천합니다.

Hack은 오래전부터 터미널 사용자들에게 사랑받아온 깔끔한 모노스페이스 폰트예요.

한글 표시가 중요하다면 D2Coding이 좋습니다. 네이버에서 만든 코딩 폰트 D2 Coding의 Nerd Font 버전이에요.

Meslo LG는 Oh My Posh에서 공식 권장하는 폰트고요.

처음이라 뭘 골라야 할지 모르겠다면 JetBrains Mono Nerd Font를 추천합니다. 가독성도 좋고, 커뮤니티에서 가장 널리 쓰이고 있어서 문제가 생겼을 때 도움을 받기도 쉬워요.

Mono vs Propo, 뭐가 다른가요?

Nerd Font 폰트를 설치하면 이름이 비슷한 변형이 여러 개 보여서 헷갈릴 수 있는데요.

Nerd Font는 기본 버전입니다. 아이콘 글리프가 문자 두 칸 너비(double-width)로 렌더링되어서 아이콘이 크고 선명하게 보여요. 다만 일부 터미널에서 정렬이 살짝 어긋나는 경우가 있습니다.

Nerd Font Mono는 아이콘 글리프를 한 칸 너비(single-width)로 축소한 버전입니다. 터미널에서 글자 정렬이 정확하게 맞는 대신 아이콘이 좀 작아 보일 수 있어요.

Nerd Font Propo는 가변 폭(proportional) 버전입니다. 글리프 본래의 너비를 유지해서 GUI 에디터나 비-모노스페이스 환경에서 쓰기에 적합합니다.

터미널에서 사용한다면 Nerd Font Mono가 정렬 문제를 피할 수 있어서 가장 무난한 선택입니다. 아이콘을 좀 더 크게 보고 싶고 약간의 정렬 어긋남이 괜찮다면 기본 Nerd Font 버전을 쓰면 됩니다.

설치하기

macOS에서는 Homebrew로 간편하게 설치할 수 있습니다.

$ brew install --cask font-jetbrains-mono-nerd-font

Homebrew에 등록된 Nerd Font가 72개나 되는데, 어떤 폰트가 있는지 검색해볼 수 있습니다.

$ brew search nerd-font

오래된 가이드에서 폰트 설치 전에 brew tap homebrew/cask-fonts를 실행하라고 안내하는 경우가 있는데, 이 Tap은 기본 저장소에 통합되어 폐지되었기 때문에 지금은 필요 없는 단계예요.

Linux에서는 배포판에 따라 패키지 매니저를 사용하거나 수동 설치를 할 수 있습니다. Arch Linux라면 Extra 리포지토리에서 바로 설치가 가능하고요.

$ sudo pacman -S ttf-jetbrains-mono-nerd

Ubuntu나 Debian 같은 배포판에서는 GitHub Releases 페이지에서 원하는 폰트의 zip 파일을 다운로드한 뒤, ~/.local/share/fonts/ 디렉터리에 복사하고 폰트 캐시를 갱신하면 됩니다.

$ mkdir -p ~/.local/share/fonts
$ unzip JetBrainsMono.zip -d ~/.local/share/fonts/
$ fc-cache -fv

Windows에서는 Chocolatey로 설치하거나, Nerd Fonts 다운로드 페이지에서 zip 파일을 받아 압축을 풀고 폰트 파일을 더블클릭하면 됩니다.

모든 폰트 한 번에 설치하기

위에서는 폰트를 하나만 골라서 설치했는데, 여러 폰트를 비교해보고 싶거나 아예 전부 깔아두고 싶을 수도 있잖아요. Nerd Fonts 프로젝트는 80개가 넘는 패치된 폰트를 제공하는데, 이걸 하나씩 다운로드하려면 꽤 번거롭습니다.

Nerd Fonts 다운로드 페이지에 가면 모든 폰트가 나열되어 있긴 한데, 개별 다운로드 버튼만 있어서 하나씩 클릭해야 해요. 다행히 GitHub Releases를 활용하면 한 번에 받을 수 있습니다.

macOS에서는 Homebrew로 모든 Nerd Font를 한 줄로 설치할 수 있어요.

$ brew search nerd-font | xargs brew install --cask

brew search가 Nerd Font cask 목록을 출력하고, xargs가 그걸 brew install 명령에 넘기는 구조예요. 폰트가 70개 넘다 보니 시간이 좀 걸리지만 알아서 다 깔아줍니다.

Linux에서는 공식 저장소의 설치 스크립트를 쓰는 게 편합니다.

$ git clone --filter=blob:none --sparse https://github.com/ryanoasis/nerd-fonts.git
$ cd nerd-fonts
$ ./install.sh

--filter=blob:none --sparse 옵션은 저장소의 메타데이터만 먼저 받아서 클론 시간을 줄여줘요. install.sh를 인자 없이 실행하면 모든 폰트를 ~/.local/share/fonts/에 설치하고 폰트 캐시까지 갱신해줍니다.

Windows에서는 PowerShell로 GitHub Releases에서 전체 폰트를 다운로드할 수 있습니다.

$releases = Invoke-RestMethod -Uri "https://api.github.com/repos/ryanoasis/nerd-fonts/releases/latest"
$assets = $releases.assets | Where-Object { $_.name -like "*.zip" }

foreach ($asset in $assets) {
    Invoke-WebRequest -Uri $asset.browser_download_url -OutFile $asset.name
    Expand-Archive -Path $asset.name -DestinationPath ".\NerdFonts\$($asset.name -replace '\.zip$','')"
}

압축을 풀고 나면 NerdFonts 폴더 안에 폰트 파일들이 들어 있어요. 전체 선택 후 우클릭 → “모든 사용자용으로 설치”를 누르면 한 번에 설치됩니다.

폰트가 많으면 디스크 공간을 꽤 차지할 수 있어서(전체 약 4GB), 용량이 걱정된다면 몇 개만 골라 설치하는 걸 추천합니다.

터미널에 적용하기

폰트를 설치한 것만으로는 부족합니다. 사용하는 터미널 앱에서 해당 폰트를 지정해줘야 해요.

Ghostty는 설정 파일에서 font-family를 지정합니다.

~/.config/ghostty/config
font-family = JetBrainsMono Nerd Font Mono
font-size = 14

Alacritty는 TOML 설정 파일을 사용합니다.

~/.config/alacritty/alacritty.toml
[font.normal]
family = "JetBrainsMono Nerd Font Mono"

WezTerm은 Lua 설정 파일에서 폰트를 지정합니다.

~/.wezterm.lua
config.font = wezterm.font("JetBrainsMono Nerd Font Mono")

Kitty는 kitty.conf에서 설정합니다.

~/.config/kitty/kitty.conf
font_family JetBrainsMono Nerd Font Mono

iTerm2는 GUI에서 설정합니다. Preferences → Profiles → Text → Font에서 “JetBrainsMono Nerd Font Mono”를 선택하면 돼요.

VS Code 통합 터미널은 settings.json에서 폰트를 지정합니다.

settings.json
{
  "terminal.integrated.fontFamily": "JetBrainsMono Nerd Font Mono"
}

설정을 바꾼 뒤 터미널을 재시작하면 아이콘이 정상적으로 표시되는 걸 확인할 수 있습니다.

아이콘이 여전히 깨진다면?

설치하고 터미널 폰트도 바꿨는데 아이콘이 여전히 로 보인다면 몇 가지를 점검해보세요.

가장 흔한 원인은 폰트 이름이에요. “JetBrainsMono Nerd Font”와 “JetBrains Mono”는 다른 폰트입니다. 터미널 설정에서 Nerd Font 버전의 정확한 이름을 써야 해요.

폰트 이름이 맞는데도 안 되면 터미널 앱을 완전히 종료했다가 다시 시작해보세요. 일부 터미널은 폰트 변경 후 재시작이 필요합니다.

SSH로 접속한 원격 서버에서 아이콘이 깨지는 건 좀 다른 문제예요. 폰트가 설치되어야 할 곳은 원격 서버가 아니라 로컬 터미널입니다. 글리프를 실제로 렌더링하는 건 로컬 터미널이니까요.

tmux를 쓰고 있다면 set -g default-terminal "tmux-256color"가 설정되어 있는지도 확인해보세요. 유니코드 지원이 제한된 터미널 모드에서는 글리프가 제대로 표시되지 않을 수 있습니다.

마치며

Nerd Font는 한마디로 “코딩 폰트 + 개발 아이콘”을 합친 프로젝트입니다. 설치 한 번이면 Starship, NeoVim, lsd 같은 터미널 도구들의 아이콘이 깨지지 않고 잘 표시돼요.

좋아하는 코딩 폰트를 골라서 Nerd Font 버전을 설치하고 터미널 설정에서 폰트 이름만 바꿔주면 끝이에요. 한 번 셋업해두면 이후에 어떤 도구를 깔아도 아이콘 걱정 없이 바로 쓸 수 있습니다.

더 자세한 정보가 궁금하다면 Nerd Fonts 공식 사이트GitHub 저장소를 참고해보세요.

This work is licensed under CC BY 4.0 CC BY

개발자를 위한 뉴스레터

달레가 정리한 AI 개발 트렌드와 직접 만든 콘텐츠를 전해드립니다.

Discord