github-rest-api

1 개의 포스트

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 대체 경로를 마련하는 것이 안정적인 운영에 중요하다.