GitHub CLI 다중 계정을 디렉토리별로 자동 전환하기

2026-06-19 hit count image

개인 계정과 회사 계정을 오가며 gh auth switch를 반복하는 번거로움을 없애는 방법을 소개합니다. GH_TOKEN 환경변수와 zsh의 chpwd 훅을 조합해 디렉토리 진입 시 계정이 자동으로 전환되도록 설정합니다.

environment

들어가며

개인 프로젝트와 회사 프로젝트를 함께 작업하다 보면, GitHub CLI(gh)를 쓸 때마다 계정을 바꿔야 하는 상황이 생깁니다. 이슈를 올리려는데 회사 계정으로 올라간다거나, PR을 만들었더니 개인 계정으로 등록되는 식입니다.

gh auth switch로 해결할 수 있지만, 디렉토리를 이동할 때마다 이걸 기억해서 실행하는 것은 생각보다 번거롭습니다.

이 글에서는 GH_TOKEN 환경변수와 zsh의 chpwd 훅을 조합해, 디렉토리에 진입하는 순간 계정이 자동으로 전환되도록 설정하는 방법을 소개합니다.

gh auth switch의 한계

ghgh auth switch 명령어로 활성 계정을 전환할 수 있습니다.

gh auth switch --user <계정>

그런데 이 방식은 전역 상태를 변경합니다. 터미널 탭 A에서 계정을 바꾸면 탭 B에도 영향을 줍니다. 동시에 여러 프로젝트를 열어두고 작업할 때는 어떤 계정이 활성화되어 있는지 헷갈리기 쉽습니다.

GH_TOKEN 환경변수 방식

ghGH_TOKEN 환경변수가 설정되어 있으면, 저장된 계정 대신 그 토큰을 우선적으로 사용합니다.

export GH_TOKEN=ghp_xxxxxxxxxxxx
gh pr list  # GH_TOKEN의 계정으로 실행됨

환경변수는 셸 세션 단위로 격리됩니다. 터미널 탭 A와 탭 B가 각자 다른 GH_TOKEN을 가질 수 있어, gh auth switch의 전역 상태 문제가 없습니다.

토큰은 이미 gh에 로그인된 계정이라면 별도 발급 없이 꺼낼 수 있습니다.

gh auth token --user <개인-계정>
gh auth token --user <업무-계정>

chpwd 훅으로 자동 전환하기

zsh의 chpwd 훅은 디렉토리가 변경될 때마다 실행되는 함수입니다. add-zsh-hook chpwd로 등록하면, cd로 이동할 때마다 자동으로 호출됩니다.

GH_TOKEN 전환 로직을 여기에 넣으면, 디렉토리 진입과 동시에 계정이 바뀝니다.

전체 설정 코드

~/.zshrc에 다음을 추가합니다.

# GitHub CLI - 작업 디렉터리에 따라 GH_TOKEN 자동 전환
#   ~/personal/* -> 개인 계정
#   그 외         -> 업무 계정
_GH_TOKEN_PERSONAL=$(gh auth token --user <개인-계정> 2>/dev/null)
_GH_TOKEN_WORK=$(gh auth token --user <업무-계정> 2>/dev/null)

_gh_pick_account() {
  case "$PWD/" in
    "$HOME/personal/"*)
      export GH_TOKEN="$_GH_TOKEN_PERSONAL" ;;
    *)
      export GH_TOKEN="$_GH_TOKEN_WORK" ;;
  esac
}
add-zsh-hook chpwd _gh_pick_account
_gh_pick_account

gh() {
  local label
  case "$PWD/" in
    "$HOME/personal/"*) label="개인 계정" ;;
    *)                  label="업무 계정" ;;
  esac
  print -P "%F{cyan}▶ GitHub 계정: %B${label}%b%f"
  command gh "$@"
}

적용:

source ~/.zshrc

동작 원리

1. 쉘 시작 시 토큰 캐싱

_GH_TOKEN_PERSONAL=$(gh auth token --user <개인-계정> 2>/dev/null)
_GH_TOKEN_WORK=$(gh auth token --user <업무-계정> 2>/dev/null)

gh auth token은 매번 호출하면 약간의 지연이 생깁니다. 쉘 시작 시 한 번만 호출해 변수에 담아두면, 이후 디렉토리 이동마다 추가 지연 없이 즉시 전환됩니다.

2. chpwd 훅으로 GH_TOKEN 전환

_gh_pick_account() {
  case "$PWD/" in
    "$HOME/personal/"*)
      export GH_TOKEN="$_GH_TOKEN_PERSONAL" ;;
    *)
      export GH_TOKEN="$_GH_TOKEN_WORK" ;;
  esac
}
add-zsh-hook chpwd _gh_pick_account
_gh_pick_account  # 쉘 시작 시 현재 디렉토리에도 즉시 적용

개인 프로젝트 디렉토리 하위라면 개인 계정 토큰을, 그 외에서는 업무 계정 토큰을 설정합니다. 마지막 _gh_pick_account 호출로 새 터미널을 열었을 때도 바로 적용됩니다.

gh wrapper로 현재 계정 확인하기

계정이 자동으로 바뀌다 보면, 지금 어떤 계정으로 실행되는지 헷갈릴 수 있습니다. gh 명령을 래핑해서 실행 전에 현재 계정을 출력하면 실수를 방지할 수 있습니다.

gh() {
  local label
  case "$PWD/" in
    "$HOME/personal/"*) label="개인 계정" ;;
    *)                  label="업무 계정" ;;
  esac
  print -P "%F{cyan}▶ GitHub 계정: %B${label}%b%f"
  command gh "$@"
}

이제 gh 명령 실행 시 아래와 같이 현재 계정이 표시됩니다.

▶ GitHub 계정: 개인 계정

정리

방식터미널 간 격리자동 전환별도 도구
gh auth switchX (전역 상태)XX
direnv + GH_TOKENOO필요
chpwd + GH_TOKENOOX

chpwd 훅과 GH_TOKEN의 조합은 별도 도구 없이, 디렉토리 이동만으로 GitHub CLI 계정을 자동 전환합니다. 비슷한 패턴으로 다른 CLI 도구도 디렉토리별로 계정을 분리해 관리할 수 있습니다.

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

블로그를 운영하면서 좋은 기회가 생겨 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.



SHARE
Twitter Facebook RSS