티스토리 뷰
GitHub App 기반 고급 자동화 기능 개발: AI 응답, 이슈 분류, 멀티 리포지토리 연동
이전 글에서는 Webhook 서버를 GitHub App으로 전환하는 과정과, 인증 및 API 호출 방식에 대해 다뤘습니다.
이번 글에서는 GitHub App의 고급 기능을 활용해 AI 연동, 이슈 자동 분류, 멀티 리포지토리 자동화를 구현하는 실제 사례 중심으로 살펴봅니다.
이제 GitHub App은 단순한 자동화 도구가 아니라, 지능형 협업 에이전트로 진화합니다.
1. AI와 GitHub App을 연결하는 이유
✅ AI가 GitHub 협업에 유용한 이유
- 이슈 내용 요약
- PR 설명 자동 생성
- 태그 및 라벨 추천
- 중복 이슈 탐지
- 코드 변경 사항 설명
💡 AI는 단순 자동화를 넘어서, 협업의 질을 높이는 역할을 합니다.
2. 기능 1: 이슈 자동 분류 및 라벨 추천 (with GPT)
🔹 GitHub App의 issues 이벤트 활용
📌 Webhook Payload 예시 (이슈 생성 시)
{
"action": "opened",
"issue": {
"title": "로그인 실패 시 에러 메시지가 없음",
"body": "사용자가 잘못된 비밀번호를 입력해도 에러 메시지가 출력되지 않습니다."
}
}
🔹 GPT API 연동을 통한 라벨 추천 예시
📌 AI 요청 및 응답
const issueText = `${title}\n\n${body}`;
const prompt = `다음 이슈에 적절한 라벨을 추천해줘: \n${issueText}`;
const response = await openai.chat.completions.create({
messages: [{ role: 'user', content: prompt }],
model: 'gpt-4',
});
const recommendedLabel = response.choices[0].message.content.trim();
🔹 GitHub API를 통해 라벨 적용
await axios.post(
`https://api.github.com/repos/${owner}/${repo}/issues/${issueNumber}/labels`,
{ labels: [recommendedLabel] },
{ headers: { Authorization: `token ${accessToken}` } }
);
🧠 이슈 작성만 해도 GPT가 읽고 적절한 라벨을 자동으로 달아주는 스마트한 협업 경험!
3. 기능 2: PR 설명 자동 생성 및 리뷰어 추천
🔹 PR 생성 시 Webhook 이벤트 수신 (pull_request + opened)
const prTitle = payload.pull_request.title;
const prDiffUrl = payload.pull_request.diff_url;
const prompt = `다음 PR의 제목은 "${prTitle}"입니다.\n변경된 코드(diff)를 읽고 핵심 변경 요약 및 코드 리뷰어 후보를 추천해주세요.`;
📌 GPT 응답 예시
[PR 요약]
- 로그인 실패 시 사용자에게 명확한 에러 메시지를 반환하도록 수정
- 백엔드 API 응답 구조 통일
[리뷰어 추천]
- backend-lead
- ux-reviewer
🔹 GitHub API로 PR에 코멘트 및 리뷰어 자동 지정
// 코멘트 추가
await axios.post(
`https://api.github.com/repos/${owner}/${repo}/issues/${prNumber}/comments`,
{ body: gptSummary },
{ headers: { Authorization: `token ${accessToken}` } }
);
// 리뷰어 지정
await axios.post(
`https://api.github.com/repos/${owner}/${repo}/pulls/${prNumber}/requested_reviewers`,
{ reviewers: ['backend-lead', 'ux-reviewer'] },
{ headers: { Authorization: `token ${accessToken}` } }
);
✨ GPT가 코드를 요약하고, 리뷰까지 도와주는 협업 도우미로 작동합니다.
4. 기능 3: 멀티 리포지토리 자동화 구조 설계
GitHub App은 조직 단위로 설치하면 모든 리포지토리에 이벤트를 수신할 수 있습니다.
이를 통해 하나의 Webhook 서버에서 여러 리포지토리를 동시에 자동화할 수 있습니다.
📌 예시 구조
/github/webhook
├── repo-a (PR 이벤트 처리)
├── repo-b (이슈 자동 라벨링)
├── repo-c (Project 보드 자동화)
🔹 리포지토리 식별 정보 활용
const { repository } = payload;
const repoName = repository.name;
const owner = repository.owner.login;
if (repoName === 'frontend-app') {
// 프론트 전용 PR 룰 적용
} else if (repoName === 'backend-api') {
// 백엔드 이슈에 라벨 자동 추천
}
✅ 하나의 서버에서 다양한 GitHub 리포지토리를 처리할 수 있어 유지보수가 쉬워집니다.
5. 확장 팁: GitHub Project, Actions, Slack 연동까지 함께!
기능 활용 방식
GitHub Project 보드 이동 | PR Merge → Done 칼럼 이동 |
Slack 알림 | PR 리뷰 요청 → 실시간 Slack 전송 |
GitHub Actions + App | 테스트 완료 후 App 서버에 상태 전송 |
GPT 기반 이슈 요약 | 매일 생성된 이슈 요약 → Slack 메시지 전송 |
6. 실전 적용 예시 정리
기능 기술 요소 설명
이슈 자동 분류 | GPT-4 + GitHub App | 이슈 생성 → AI가 라벨 추천 → 자동 지정 |
PR 리뷰 보조 | GPT-4 + Webhook | PR 코드 요약 + 리뷰어 지정 |
다중 리포 관리 | GitHub App 설치 + 중앙 Webhook 서버 | 조직 전체 리포지토리 이벤트 처리 |
협업 알림 | Slack + Webhook | 주요 이벤트 실시간 알림 |
7. 마무리 및 다음 글 예고
이번 글에서는 GitHub App을 활용한 고급 자동화 기능 (AI 연동, 멀티리포 처리 등) 을 살펴봤습니다.
단순한 자동화를 넘어, 개발 문화를 개선하는 지능형 시스템 구축의 가능성을 열 수 있습니다.
다음 글에서는 GitHub App을 완전한 SaaS 형태로 배포하는 방법 (사용자 설치, 설정 UI, 인증 연동 등) 을 다룰 예정입니다.
→ GitHub App을 서비스로 만드는 과정 (Marketplace 출신 App 구축)
'모음집 > git' 카테고리의 다른 글
GitHub Marketplace에 GitHub App 등록하기 – 심사 통과를 위한 체크리스트 (0) | 2025.03.25 |
---|---|
GitHub App을 SaaS 서비스로 배포하기: 설치형 자동화 도구 만들기 (0) | 2025.03.25 |
GitHub Webhook 서버를 GitHub App으로 진화시키는 방법 (0) | 2025.03.24 |
GitHub Actions vs Webhook: 자동화 전략 비교와 통합 사용 가이드 (0) | 2025.03.23 |
GitHub Webhook 실전 적용 사례: 자동화된 팀 협업 시스템 구축 (0) | 2025.03.22 |
- Total
- Today
- Yesterday
- AI챗봇
- AI 자동화
- LangChain
- Prisma
- 개발블로그
- PostgreSQL
- Docker
- 관리자
- NestJS
- fastapi
- llm
- rag
- seo 최적화 10개
- gatsbyjs
- 웹개발
- CI/CD
- nodejs
- Next.js
- App Router
- SEO 최적화
- 프론트엔드
- 스마트 컨트랙트
- SEO최적화
- github
- Webpack
- nextJS
- REACT
- kotlin
- Ktor
- 백엔드개발
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |