github

Copilot SDK를 활용한 AI 기반 GitHub 이슈 분류 구축하기 (새 탭에서 열림)

IssueCrush는 GitHub 이슈를 카드처럼 검토하고, Copilot SDK로 각 이슈의 요약과 처리 방향을 자동으로 제안하는 앱이다. React Native가 Node.js 기반 SDK를 직접 실행할 수 없기 때문에, Copilot SDK는 서버에서 실행하고 클라이언트는 HTTPS로 통신하는 구조를 사용한다. 핵심은 AI를 활용해 트리아지 시간을 줄이되, 인증 보안·리소스 정리·AI 장애 시 대체 경로까지 함께 설계하는 것이다.

IssueCrush: 스와이프로 이슈 트리아지

  • GitHub 이슈를 스와이프 가능한 카드로 표시한다.
  • 왼쪽으로 넘기면 이슈를 닫고, 오른쪽으로 넘기면 유지한다.
  • “Get AI Summary”를 누르면 Copilot이 이슈 내용을 분석한다.
  • 긴 이슈 설명을 직접 모두 읽지 않고도 다음 정보를 빠르게 파악할 수 있다.
    • 이슈의 핵심 내용
    • 주요 문제나 기능 요청
    • 조사, 구현, 담당 팀 배정, 중복 이슈 종료 등 권장 조치

React Native와 서버 측 SDK 아키텍처

  • Copilot SDK는 Node.js 패키지이며 내부적으로 Copilot CLI 프로세스를 실행하고 JSON-RPC로 통신한다.
  • React Native 앱에서는 Node.js 런타임과 CLI 바이너리를 직접 사용할 수 없으므로 SDK를 서버에서 실행해야 한다.
  • 구성은 다음과 같다.
    • React Native·웹 클라이언트 → HTTPS → Node.js 서버
    • Node.js 서버 → Copilot SDK → 로컬 Copilot CLI
    • 클라이언트는 별도로 GitHub OAuth와 GitHub REST API를 사용해 이슈 데이터를 가져온다.
  • 서버 측 통합의 장점:
    • 여러 클라이언트가 하나의 SDK 인스턴스를 공유해 연결과 인증 오버헤드를 줄인다.
    • Copilot 인증 정보와 API 토큰을 모바일 앱에 포함하지 않아 보안성이 높다.
    • Copilot 장애나 타임아웃이 발생해도 기본 요약으로 대체할 수 있다.
    • 서버에서 요청·응답, 지연 시간, 오류를 기록해 디버깅과 모니터링이 쉽다.

사전 준비 사항

  • 서버에 Copilot CLI를 설치하고 시스템 PATH에서 실행 가능하게 해야 한다.
  • GitHub Copilot 구독 또는 BYOK 방식의 자체 API 키가 필요하다.
  • 서버에서 copilot auth를 실행하거나 COPILOT_GITHUB_TOKEN 환경 변수를 설정해 CLI를 인증해야 한다.

Copilot SDK의 세션 기반 실행

SDK 사용 흐름은 다음과 같다.

  • CopilotClient를 생성하고 start()로 CLI 프로세스를 시작한다.
  • createSession()으로 사용할 모델과 권한 처리 방식을 지정한다.
  • sendAndWait()에 프롬프트를 전달해 응답을 기다린다.
  • response.data.content에서 요약 결과를 추출한다.
  • 작업이 끝나면 세션을 disconnect()하고 클라이언트를 stop()한다.

예시에서는 gpt-4.1 모델과 approveAll 권한 처리기를 사용하며, 초기화부터 정리까지 try/finally로 감싼다.

세션 생명주기와 리소스 정리

  • SDK의 기본 생명주기는 다음 순서다.
    • start()
    • createSession()
    • sendAndWait()
    • disconnect()
    • stop()
  • 세션을 정리하지 않으면 리소스와 메모리가 누수될 수 있다.
  • 항상 try/finally에서 정리 작업을 수행해야 한다.
  • 정리 과정의 오류가 원래 발생한 오류를 덮지 않도록 catch(() => {})로 무시할 수 있다.

트리아지를 위한 프롬프트 설계

  • 원문을 그대로 전달하기보다 모델이 판단하기 쉬운 구조화된 정보를 제공한다.
  • 프롬프트에는 다음 정보가 포함된다.
    • 제목과 이슈 번호
    • 저장소 이름
    • 상태와 라벨
    • 생성일
    • 작성자
    • 이슈 본문
  • 모델에게 2~3문장으로 간결하게 답하도록 요청한다.
  • 응답 목표는 다음 세 가지다.
    • 이슈가 무엇에 관한 것인지 설명
    • 핵심 문제나 요청 식별
    • 조사 필요, 구현 가능, 백엔드 팀 배정, 중복으로 종료 등 권장 조치 제안
  • 빠른 검토를 위해 명확하고 실행 가능하게 작성하도록 하고, 마크다운 형식은 사용하지 않도록 지시한다.
  • 라벨과 작성자 같은 메타데이터도 이슈의 성격과 처리 방향을 판단하는 데 중요한 맥락으로 활용된다.

실용적인 권장 사항

Copilot SDK를 모바일이나 웹 앱에 직접 넣기보다 Node.js 서버에 배치하고, 인증 정보는 서버에만 보관하는 구성이 적절하다. 또한 세션 정리를 반드시 보장하고, AI가 실패해도 기본 트리아지가 가능하도록 비AI 대체 경로를 마련하는 것이 안정적인 운영에 중요하다.