고성능 Zsh 설정 방법

Young-jae

Young-jae

28 March 2025

고성능 Zsh 설정 방법

Zsh (Z Shell)은 강력한 기능과 폭넓은 사용자 맞춤화 가능성 덕분에 개발자들 사이에서 점점 더 인기를 끌고 있습니다. 이 가이드는 일반적인 성능 문제를 피하는 빠르고 효율적이며 기능이 풍부한 Zsh 구성을 설정하는 방법을 안내합니다.

💡
터미널 환경을 최적화하는 동안 API 개발 워크플로우도 향상시키는 것이 좋습니다. API와 함께 작업하는 개발자라면 Apidog를 Postman의 훌륭한 대안으로 확인해 보시기를 강력히 추천합니다.

Apidog는 API 문서화, 디버깅 및 자동화된 테스트를 하나의 플랫폼에 통합하여 보다 직관적인 인터페이스와 더 나은 팀 협업 기능을 제공합니다.

가져오기 기능 덕분에 Postman에서의 전환이 원활하며, 많은 개발자들은 모의 서버와 환경 관리로 더 빠른 워크플로우를 보고하고 있습니다. 무료 요금제가 상당히 관대하여 개인 개발자와 소규모 팀에 접근 가능하게 만듭니다.

새로운 Zsh 구성과 함께 Apidog를 사용해 보세요. 완전히 새로워진 개발 환경을 경험할 수 있습니다!
버튼

이 구성이 더 나은 이유

제가 설명할 접근 방식은 전통적인 설정에 비해 여러 가지 장점을 제공합니다:

설치 옵션

Zsh 프레임워크에는 여러 가지 선택이 있으며, 각기 다른 장단점이 있습니다:

옵션 1: Zinit + Powerlevel10k (고급, 최적의 성능)

Zinit는 비동기 로딩을 허용하고 뛰어난 성능을 제공하는 강력한 플러그인 관리자입니다.

  1. 먼저 Zsh를 설치하십시오:
# Ubuntu/Debian용
sudo apt install zsh

# Homebrew가 설치된 macOS용
brew install zsh

# Fedora용
sudo dnf install zsh

2. Zsh를 기본 셸로 설정하십시오:

chsh -s $(which zsh)

3. Zinit을 설치하십시오:

bash -c "$(curl --fail --show-error --silent --location <https://raw.githubusercontent.com/zdharma-continuum/zinit/HEAD/scripts/install.sh>)"

4. .zshrc 구성 파일을 생성하십시오:

# Powerlevel10k 인스턴트 프롬프트 활성화 (셸이 즉시 나타나게 함)
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
  source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi

# Zinit 로드
source "$HOME/.local/share/zinit/zinit.git/zinit.zsh"

# Powerlevel10k 테마 로드
zinit ice depth=1
zinit light romkatv/powerlevel10k

# 핵심 zsh 기능 (히스토리, 자동 완성)
zinit snippet OMZL::history.zsh
zinit snippet OMZL::completion.zsh
zinit snippet OMZL::key-bindings.zsh

# 비동기 로딩을 위한 필수 플러그인 (터보 모드)
zinit wait lucid for \\\\
  atinit"zicompinit; zicdreplay" \\\\
    zdharma-continuum/fast-syntax-highlighting \\\\
  atload"_zsh_autosuggest_start" \\\\
    zsh-users/zsh-autosuggestions \\\\
  zdharma-continuum/history-search-multi-word

# Git 플러그인 - git 리포지토리에 들어갈 때 로드됨
zinit ice wait lucid
zinit snippet OMZP::git

# 필요할 때만 Node 버전 관리자를 로드
export NVM_LAZY_LOAD=true
export NVM_COMPLETION=true
zinit ice wait lucid
zinit light lukechilds/zsh-nvm

# 시작 디렉토리
cd ~/repos

# 더 나은 조직을 위해 별도의 파일에서 별칭 소스 가져오기
[[ -f ~/.zsh_aliases ]] && source ~/.zsh_aliases

# Powerlevel10k 구성
POWERLEVEL9K_PROMPT_ADD_NEWLINE=true
POWERLEVEL9K_MODE='awesome-fontconfig'
POWERLEVEL9K_BATTERY_SHOW=false  # 배터리 상태 표시 끄기
POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(dir vcs)
POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status time background_jobs)

# Powerlevel10k 초기화
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh

5. Powerlevel10k을 구성하십시오:

터미널을 재시작한 후 Powerlevel10k의 구성 마법사가 자동으로 시작됩니다. 프롬프트 외관을 사용자 지정하기 위해 안내에 따라 진행하십시오.

나중에 다시 구성할 필요가 있는 경우, 다음을 실행하십시오:

p10k configure

옵션 2: Zim (간단하면서 여전히 빠름)

Zim은 더 사용자 친화적이면서도 여전히 매우 빠른 Zsh 프레임워크로 기능과 성능의 훌륭한 균형을 제공합니다.

  1. Zsh 설치 (위와 동일)
  2. Zim 설치:
curl -fsSL <https://raw.githubusercontent.com/zimfw/install/master/install.zsh> | zsh

  1. 모듈을 추가하기 위해 .zimrc 파일을 편집하십시오:
# 핵심
zmodule environment
zmodule git
zmodule input
zmodule termtitle
zmodule utility

# 프롬프트
zmodule romkatv/powerlevel10k

# 자동 완성
zmodule zsh-users/zsh-completions
zmodule completion

# 마지막에 초기화해야 하는 모듈
zmodule romkatv/zsh-defer  # 비동기 로딩을 위한
zmodule zsh-users/zsh-syntax-highlighting
zmodule zsh-users/zsh-autosuggestions
zmodule zsh-users/zsh-history-substring-search

  1. 당신의 .zshrc 파일을 생성하십시오:
# Powerlevel10k 인스턴트 프롬프트 활성화
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
  source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi

# 비동기 로딩을 위한 zsh-defer 초기화
source ${ZIM_HOME}/modules/zsh-defer/zsh-defer.plugin.zsh

# ZIM 시작
if [[ ! ${ZIM_HOME}/init.zsh -nt ${ZDOTDIR:-${HOME}}/.zimrc ]]; then
  # 정적 초기화 스크립트가 없거나 오래되었으면 업데이트
  zsh-defer source ${ZIM_HOME}/zimfw.zsh init -q
fi
source ${ZIM_HOME}/init.zsh

# 키 바인딩 사용자 지정
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down

# Node 버전 관리자를 지연 로드합니다
if command -v fnm &> /dev/null; then
  zsh-defer eval "$(fnm env --use-on-cd)"  # fnm 사용 (nvm보다 빠름)
elif command -v nvm &> /dev/null; then
  zsh-defer source $(brew --prefix nvm)/nvm.sh  # 필요할 때만 nvm 로드
fi

# 시작 디렉토리
cd ~/repos

# 별칭 로드
[[ -f ~/.zsh_aliases ]] && source ~/.zsh_aliases

# powerlevel10k 구성 로드
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh

더 나은 별칭 파일 만들기

모든 별칭을 직접 .zshrc에 포함하는 대신, 더 나은 조직을 위해 별도의 .zsh_aliases 파일을 생성하십시오:

# .zsh_aliases 파일 생성
touch ~/.zsh_aliases

다음은 더 나은 조직을 가진 별칭의 개선된 버전입니다:

# 파일 작업
alias rmrf='rm -rf'
alias ls='ls -lart --color=auto'

# 디렉토리 탐색
alias r='cd ~/repos'
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'

# 개발 환경
alias c='code .'
alias s='cursor .'
alias e='exit'

# Git 작업
alias g='git'
alias gs='git status'
alias ga='git add .'
alias gc='git commit -m'
alias gagc='git add . && git commit -m'
alias gp='git fetch -p'
alias gcom='git checkout main'
alias gcol='git checkout -'
alias gb='git checkout -b'
alias gbl='git branch -a'
alias grv='git remote -v'
alias grb='npx git-removed-branches'
alias gcl='git clone'
alias gbr='git browse'
alias pp='git pull --rebase && git push'

# 패키지 관리 - npm
alias ni='npm i'
alias nid='npm i -D'
alias nig='npm i -g'
alias nr='npm run'
alias nrb='npm run build'
alias nrd='npm run dev'
alias nrs='npm run start'
alias nlg='npm list -g --depth=0'

# 패키지 관리 - yarn
alias ya='yarn add'
alias yad='yarn add -D'
alias yb='yarn build'
alias yd='yarn dev'
alias ys='yarn start'
alias yyb='yarn && yarn build'
alias yyd='yarn && yarn dev'
alias ylg='yarn global list'

# 패키지 관리 - pnpm
alias pi='pnpm i'
alias pid='pnpm i -D'
alias prb='pnpm run build'
alias prd='pnpm run dev'
alias prs='pnpm run start'
alias plg='pnpm list -g --depth=0'
alias pc='pnpm create'

# 개발 도구
alias kill='npx kill-port'
alias di='echo dotenv > .envrc && touch .env && direnv allow'
alias tdl="tree -a -I 'node_modules|.svelte-kit|.git' --dirsfirst"

성능 최적화 팁

  1. 무거운 구성 요소의 지연 로딩 사용
  1. eval 출력 캐시화
  1. nvm 대신 fnm 고려
  1. 플러그인 최소화
  1. Powerlevel10k의 인스턴트 프롬프트 사용
  1. 구성을 여러 파일로 분할

셸의 성능 측정하기

셸의 시작 시간을 확인하기 위해 이 함수를 .zshrc에 추가하십시오:

function timezsh() {
  shell=${1-$SHELL}
  for i in $(seq 1 10); do
    /usr/bin/time $shell -i -c exit
  done
}

그런 다음 timezsh를 실행하여 평균 시작 시간을 확인하십시오.

결론

Zinit 또는 Zim과 같은 현대 도구를 사용하고, 지연 로딩을 구현하며, 구성을 적절히 조직함으로써 Zsh 경험이 훨씬 더 빠르고 쾌적하게 될 것입니다. 여기서 설명한 접근 방식은 기능성과 성능의 균형을 이루는 현재의 최선의 관행을 나타냅니다.

셸 구성은 매우 개인적인 것이므로 이러한 제안을 실험해보고 개인의 워크플로우 및 선호도에 맞게 조정하십시오.

💡
터미널 환경을 최적화하는 동안 API 개발 워크플로우도 향상시키는 것이 좋습니다. API와 함께 작업하는 개발자라면 Apidog를 Postman의 훌륭한 대안으로 확인해 보시기를 강력히 추천합니다.

Apidog는 API 문서화, 디버깅 및 자동화된 테스트를 하나의 플랫폼에 통합하여 보다 직관적인 인터페이스와 더 나은 팀 협업 기능을 제공합니다.

가져오기 기능 덕분에 Postman에서의 전환이 원활하며, 많은 개발자들은 모의 서버와 환경 관리로 더 빠른 워크플로우를 보고하고 있습니다. 무료 요금제가 상당히 관대하여 개인 개발자와 소규모 팀에 접근 가능하게 만듭니다.

새로운 Zsh 구성과 함께 Apidog를 사용해 보세요. 완전히 새로워진 개발 환경을 경험할 수 있습니다!
버튼

Apidog에서 API 설계-첫 번째 연습

API를 더 쉽게 구축하고 사용하는 방법을 발견하세요