Skip to content

[조사] GitHub App 전환 타당성  #483

Description

@moncher-dev

📄 근거: docs/2026-07-19-github-api-rate-limit-audit.md (§2 R8)

배경

rate limit 버킷은 installation 단위로 분리되므로, 리포지토리가 여러 org에 분산된 경우 GitHub App 전환이 실효가 있다. 단 R1·R1.5로 이미 44배를 확보하므로 후순위다.

⚠️ 현재 구성에서는 전환 불가

이 저장소의 프로젝트는 user-owned다 — https://github.com/users/hojinzs/projects/14 (PVT_kwHOAPiKdM4BYPVD, owner __typename: User).

user 소유 Projects V2는 installation token으로 접근 자체가 불가하다. 전환하려면 org 소유로 이전이 선행되어야 한다.

조사 항목

  • 프로젝트를 org 소유로 이전할지 결정 (전환의 전제)
  • 리포지토리가 실제로 여러 org에 분산되는 시나리오가 있는지 확인 — 단일 org면 버킷 배수 효과 없음
  • 아래 블로커별 대응 설계
블로커 위치 내용
GET /user 403 adapter.ts:823 fetchCurrentUserLogin installation token 불가. 현재 --assigned-only 구동 중이라 즉시 실패
viewer 쿼리 cli/src/github/client.ts:848, :869 부트스트랩/프로젝트 탐색 실패 (데몬 루프는 무관)
user-owned 프로젝트 도달 불가. org 이전 필요
토큰 회전 캐시 churn adapter.ts:1625 fingerprintToken, orchestrator-adapter.ts:254 hashToken 캐시 키가 토큰 값 기반. 1시간마다 만료되는 토큰에서 갱신 때마다 캐시 전부 무효화. 최우선 수정 대상

공개 URL은 불필요

installation token 흐름은 전부 outbound다 (JWT 서명 → POST /app/installations/{id}/access_tokens → GraphQL 호출). webhook을 쓰지 않으면 공개 엔드포인트가 필요 없다.

재사용 가능한 기반

tool-github-graphql/src/tool.ts:62 resolveGitHubGraphQLToken이 이미 { token, expiresAt } 브로커 패턴을 구현하고 있다(캐시 파일 0600, 60초 재사용 윈도우). 트래커는 정적 token: string을 가정하므로(adapter.ts:18), string | (() => Promise<string>)로 확장하면 된다.

Metadata

Metadata

Assignees

Labels

integrationTracker / external system integrationquestionFurther information is requested

Projects

Status
Backlog

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions