-
Oh My Zsh(OMZ) 는 여전히 널리 추천되지만, 셸 시작 시간을 느리게 만드는 불필요한 스크립트 부하를 초래함
- OMZ는 셸 스크립트로 작성되어 새 터미널 탭을 열 때마다 모든 스크립트를 해석해야 하며, 기본 설정만으로도 약 0.38초의 지연이 발생
- 단순한 Zsh 최소 설정과 Starship 프롬프트, fzf 기반 히스토리 검색을 사용하면 시작 시간을 0.07초로 단축 가능
- Starship은 하나의 바이너리로 프롬프트를 구성해, 기존 OMZ의 git·가상환경·언어별 플러그인을 대체함
- 복잡한 플러그인보다 필요한 기능만 직접 추가하는 경량화된 셸 구성이 효율적임
Oh My Zsh의 성능 문제
-
Oh My Zsh(OMZ) 는 여전히 많이 사용되지만, 불필요한 부하(bloat) 로 인해 셸 시작 속도를 저하시킴
- OMZ는 셸 스크립트로 구성되어 새 터미널 탭을 열 때마다 모든 스크립트를 해석해야 함
- 기본 플러그인(git, zsh-autosuggestions, zsh-autocomplete)을 포함한 설정에서 /usr/bin/time -f "%e seconds" zsh -i -c exit 실행 결과 0.38초 소요
- git 리포지토리 폴더에서 새 탭을 열면 체감상 약 1초의 지연이 발생
- OMZ는 주기적으로 업데이트를 확인하며, 이 과정이 몇 초의 추가 지연을 유발
- 셸 설정의 잦은 업데이트는 불필요하며, 필요한 기능만 직접 추가하는 단순한 구성이 권장됨
최소 Zsh 설정
- 제안된 최소 Zsh 설정은 다음과 같음
export HISTSIZE=1000000000
export SAVEHIST=$HISTSIZE
setopt EXTENDED_HISTORY
setopt autocd
autoload -U compinit; compinit
-
HISTSIZE와 SAVEHIST는 명령어 히스토리 크기 지정
-
EXTENDED_HISTORY는 히스토리에 타임스탬프 추가
-
autocd는 cd 명령 없이 디렉터리 이동 가능
-
compinit은 자동 완성 시스템 초기화
- 이 설정만으로도 완성 기능이 포함된 기본적인 셸 환경 제공
프롬프트 커스터마이징
- 프롬프트는 Starship을 사용
- Starship은 하나의 바이너리로 구성된 빠르고 최소한의 프롬프트
- 기존 OMZ의 플러그인 및 테마를 대체하며, git·가상환경·언어별 상태를 표시
- Starship 설정 예시에서는 AWS, GCP, Azure, NodeJS 등 클라우드 관련 표시를 비활성화해 시각적 잡음을 줄임
- Python과 Rust 프로젝트에서 각각의 언어가 프롬프트에 강조 표시되며, 명령 실행 시간도 표시
-
.zshrc에 다음 한 줄을 추가해 활성화
eval "$(starship init zsh)"
히스토리 검색
- 일반적으로 사용되는 zsh-autosuggestions 플러그인은 입력 중 제안이 표시되어 주의를 분산시킬 수 있음
- 대신 fzf를 Ctrl+R에 바인딩해 대화형 퍼지 검색(fuzzy search) 으로 히스토리를 탐색
source <(fzf --zsh)
성능 개선 결과
- 위 설정 적용 후 셸 시작 시간은 다음과 같음
❯ /usr/bin/time -f "%e seconds" zsh -i -c exit
0.07 seconds
- OMZ 대비 약 5배 이상 빠른 시작 속도 확보
추가 팁
-
Vim 사용자는 Zsh에서 Vim 모드를 활성화해 명령 편집 속도를 향상 가능
set -o vi
bindkey -v '^?' backward-delete-char
-
zle은 기본적으로 Emacs 키 바인딩을 사용하므로, 이 설정으로 Vim 방식 입력 지원
결론 및 사용 사례
- OMZ에서 전환한 후 며칠 만에 새로운 워크플로에 적응
- 필요한 플러그인은 직접 수동 로드 가능
- 다수의 탭을 여는 이유는 tmux와 터미널 기반 편집기(helix) 를 함께 사용하기 때문
- tmux에서 lazygit과 yazi 파일 관리자를 팝업 형태로 실행
- 코드 실행 및 테스트 출력을 위한 임시 분할 창을 사용, 각각이 별도 셸 세션으로 동작
댓글 요약
- 일부 사용자는 OMZ의 시작 시간이 0.03초 수준으로 충분히 빠르다고 주장
- 작성자는 zsh-autocomplete 플러그인이 속도를 저하시킨다고 지적
-
zsh-bench 결과에서 OMZ의 첫 프롬프트 지연 603ms, 단순 Zsh 설정은 103ms로 측정됨
- Starship은 OMZ의 프롬프트 관련 기능을 단일 도구로 대체
- 다른 사용자들은 Zimfw, Atuin, 직접 작성한 bash 프롬프트 등 대안을 언급