본문 바로가기
C.W.K.
Stream
Lesson 11 of 13 · published

CI를 위한 GitHub App

~10 min · github-apps, auth, integration

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

PAT가 부족할 때

Personal Access Token(PAT)은 사용자 계정에 묶여 있어. 담당자가 퇴사하면 토큰도 만료되고, 사용자의 모든 권한을 그대로 쓰게 되지. '나 자신'으로 동작해야 하는 자동화에는 확장성이 떨어져.

GitHub App은 독립적인 식별자야. 조직이나 특정 저장소에 설치해서 세밀한 권한을 줄 수 있고, JWT와 단기 설치 토큰으로 인증해. 대부분의 자동화는 GitHub App을 쓰는 게 맞아.

활용 사례

  • 저장소 간 워크플로 — A 저장소의 워크플로가 B 저장소에 쓰기 권한이 필요할 때. PAT는 저장소 간 범위를 깔끔하게 나누기 어렵지만 GitHub App은 가능해.
  • 봇 계정 — release-please, semantic-release, dependabot 같은 도구들은 전부 GitHub App이거나 비슷한 방식을 써.
  • 커스텀 통합 — 슬랙 봇, 커스텀 대시보드, 내부 도구를 만들 때.
  • 높은 API 호출 한도 — App 토큰은 PAT보다 API 호출 한도가 더 높아.

인증 흐름

  1. App의 비밀 키로 서명한 JWT를 만들어.
  2. JWT를 설치 토큰(약 1시간 유효)으로 교환해.
  3. API 호출이나 git 작업에 이 설치 토큰을 사용해.

액션 actions/create-github-app-token이 이 과정을 알아서 처리해. 출력값은 토큰이고, 다음 단계에서 환경 변수로 넘겨주면 돼.

Code

App 토큰으로 저장소 간 쓰기·yaml
  cross-repo:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/create-github-app-token@v1
        id: app
        with:
          app-id: ${{ vars.MY_BOT_APP_ID }}
          private-key: ${{ secrets.MY_BOT_APP_PRIVATE_KEY }}
          owner: my-org
          repositories: target-repo
      - run: |
          curl -H "Authorization: Bearer ${{ steps.app.outputs.token }}" \
            -X POST https://api.github.com/repos/my-org/target-repo/dispatches \
            -d '{"event_type":"deploy-prod"}'

External links

Exercise

저장소 간 자동화가 있다면 어떻게 인증하는지 점검해 봐. PAT를 쓴다면 GitHub App으로 마이그레이션하자. App의 권한과 어느 저장소에 설치됐는지 문서화해 둬. 나중에 쓸 사람이 이 과정을 다시 밑바닥부터 짜지 않게 하려고.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.