AutoMaintainer 구축하기: GitHub 이슈를 처리하는 AI 엔지니어링 팀
요약
GitHub 이슈를 분석하여 즉시 배포 가능한 PR로 변환하는 멀티 에이전트 시스템 AutoMaintainer를 소개합니다. 이슈 분석부터 개발, QA, 보안, 문서화까지 실제 엔지니어링 팀의 워크플로우를 모방하여 자동화합니다.
핵심 포인트
- 멀티 에이전트 오케스트레이션을 통한 엔지니어링 워크플로우 자동화
- 분석, 개발, 테스트, 보안, 문서화 등 전문화된 에이전트 구성
- 인간의 최종 승인을 포함한 Human-in-the-loop 구조 설계
- FastAPI, Qwen LLM, Docker Sandbox 기반의 기술 스택 활용
요약 (TL;DR)
저는 Qwen Cloud AI 해커톤 기간 동안 GitHub 이슈를 즉시 배포 가능한 풀 리퀘스트 (Pull Request)로 변환하는 멀티 에이전트 (Multi-agent) AI 시스템인 AutoMaintainer를 구축했습니다. 이 시스템은 전문화된 에이전트들(이슈 분석가, 개발자, QA, 보안, 문서화, 리뷰어)을 조율하여 실제 엔지니어링 팀처럼 문제를 해결하며, 그 과정에서 인간이 통제권을 유지하도록 합니다. 제가 배운 점은 다음과 같습니다.
문제점
오픈 소스 유지 관리자들은 가혹한 현실에 직면해 있습니다:
- 📚 압도적인 이슈 백로그 (Issue Backlogs)
- 🔄 반복적인 버그 수정 및 문서화 공백
- ⏱️ 코드 리뷰 병목 현상
- 😴 모든 것을 혼자 처리하며 발생하는 번아웃 (Burnout)
기존의 AI 도구들은 코드 작성을 도와주지만, 계획, 개발, 테스트, 보안 리뷰, 문서화, 그리고 인간의 승인에 이르는 전체 워크플로우 (Workflow)를 조율하지는 못합니다.
만약 실제 개발자처럼 협업하는 AI 엔지니어링 팀을 구축할 수 있다면 어떨까요?
솔루션: AutoMaintainer
AutoMaintainer는 실제 소프트웨어 회사를 모방한 **멀티 에이전트 오케스트레이션 시스템 (Multi-agent orchestration system)**입니다:
- 이슈 분석가 (Issue Analyst) – GitHub 이슈를 읽고, 요구 사항을 추출하며, 심각도를 평가합니다.
- 아키텍트 (Architect) – 저장소 (Repo) 구조를 분석하고, 구현 접근 방식을 설계합니다.
- 개발자 (Developer) – 코드를 작성하고, 파일을 업데이트하며, 새로운 모듈을 생성합니다.
- QA 테스터 (QA Tester) – 테스트를 생성하고, 수정 사항을 검증하며, 엣지 케이스 (Edge cases)를 확인합니다.
- 보안 에이전트 (Security Agent) – 취약점을 스캔하고, 위험한 패턴을 방지합니다.
- 문서화 (Documentation) – 변경 로그 (Changelogs), PR 요약, 릴리스 노트 (Release notes)를 업데이트합니다.
- 리뷰어 (Reviewer) – 코드 품질을 점수화하고, 개선 사항을 권장합니다.
- 인간 승인 게이트웨이 (Human Approval Gateway) – 머지 (Merge) 전 최종적인 인간의 검토를 수행합니다.
그 결과는 무엇일까요? 인간이 확인하기도 전에 분석, 구축, 테스트, 보안 검증, 문서화 및 리뷰가 모두 완료된 풀 리퀘스트 (Pull Request)를 얻게 됩니다.
기술 스택
프론트엔드 (Frontend)
- Next.js – 대시보드 UI를 위한 React 프레임워크
- Tailwind CSS – 신속한 유틸리티 우선 스타일링
- TypeScript – 프론트엔드 레이어를 위한 타입 안정성
백엔드 (Backend)
- FastAPI (Python) – 가볍고 비동기 우선(async-first)인 API
- Qwen-compatible LLM API – 모든 에이전트를 위한 AI 모델 통합
- SQLite + Async (aiosqlite) – 지속적인 파이프라인 및 메모리 저장소
- Redis-ready architecture – 분산 큐잉(distributed queuing)을 위한 준비된 아키텍처
통합 (Integrations)
- GitHub API – 이슈 가져오기, 컨텍스트 검색, PR 생성
- Docker sandbox – 격리된 코드 실행 환경
배포 (Deployment)
- Vercel – 프론트엔드 호스팅
- FastAPI + Uvicorn – 백엔드 서버
- Prepared for Alibaba Cloud – 확장 가능한 백엔드 인프라
주요 학습 내용 (Key Learnings)
1. 에이전트 오케스트레이션(Agent Orchestration)은 어렵다 (하지만 가치가 있다)
여러 AI 에이전트를 관리하려면 세심한 상태 관리(state management)가 필요합니다. 각 에이전트에는 다음이 필요합니다:
- 역할을 정의하는 명확한 시스템 프롬프트 (system prompts)
- 공유 컨텍스트(repo 정보, 이전 에이전트 출력값)에 대한 접근 권한
- 구조화된 출력 형식 (structured output formats)
- 에러 처리 및 복구
교훈: 에이전트 간 통신을 위해 TypedDict/Pydantic 모델을 사용하세요. 에이전트들이 고립된 상태(silos)로 작동하게 두지 마세요.
class BaseAgent(ABC):
async def execute(self, pipeline: PipelineRun, context: Dict[str, Any]) -> Dict[str, Any]:
# 각 에이전트는 파이프라인 상태 + 공유 컨텍스트를 전달받습니다
...
2. 인간의 승인은 타협할 수 없는 요소다
AI 에이전트가 시스템을 망가뜨리는 변경 사항(breaking change)을 머지(merge)하기 전까지는 완전 자동화가 아주 멋지게 들릴 것입니다. 머지 전 인간이 검토하는 승인 게이트웨이(approval gateway)는 가장 중요한 기능입니다.
교훈: 투명성을 통해 신뢰를 구축하세요. 무엇이, 왜 변경되었는지, 그리고 어떤 리스크가 있는지 인간에게 정확히 보여주세요.
3. 컨텍스트(Context)가 전부다
에이전트는 다음과 같은 정보를 가질 때 더 나은 성능을 발휘합니다:
- 저장소 구조 및 파일 트리
- README 및 문서
- 이전 PR 및 이전에 사용된 패턴
- GitHub의 코드 분석 결과
교훈: 초기 단계부터 메모리 시스템에 투자하세요. 패턴, 결정 사항, 실패한 시도들을 저장하세요. 두 번째 PR 수정 작업은 10배 더 나아질 것입니다.
4. LLM 통합에는 폴백(Fallbacks)이 필요하다
Qwen API 호출은 실패할 수 있습니다. 응답이 잘못된 형식의 JSON(malformed JSON)일 수도 있습니다. 속도 제한(Rate limits)도 중요합니다.
교훈:
- 지수 백오프(exponential backoff)를 적용한 재시도 로직(retry logic)을 구현하세요.
- 모든 LLM 출력을 검증(Validate)하세요.
- 중요하지 않은 에이전트(agents)를 위해 우아한 성능 저하(graceful degradation)를 준비하세요.
- 토큰 사용량과 비용을 주의 깊게 모니터링하세요.
5. FastAPI의 비동기 모델은 에이전트 파이프라인에 완벽합니다
에이전트는 순차적으로 실행되며 각각 LLM을 호출하기 때문에(I/O 바운드), 비동기/대기(async/await) 방식은 파이프라인 실행을 매우 훌륭하게 처리합니다.
async def _run_pipeline(self, pipeline: PipelineRun, issue_body: str):
# 비동기 I/O를 사용하여 에이전트를 순차적으로 실행
await self.agents[AgentRole.ISSUE_ANALYST].execute(pipeline, context)
...
교훈: 처음부터 비동기(Async)로 시작하세요. 나중에 끼워 맞추려 하지 마세요.
6. AI 에이전트 테스트는 다릅니다
단순히 출력이 정확한지 확인(assert)하는 것만으로는 부족합니다. 대신 다음과 같이 하세요:
- 결정론적 테스트(deterministic tests)를 위해 LLM 응답을 모킹(Mock)하세요.
- 에이전트가 파이프라인 상태를 적절히 업데이트하는지 테스트하세요.
- 에러 처리(error handling) 및 폴백(fallback) 경로를 검증하세요.
- 동작을 보여주기 위해 데모/예시 파이프라인을 사용하세요.
7. GitHub 통합은 과소평가되어 있습니다
GitHub API는 강력하지만 다음과 같은 사항이 필요합니다:
- 대규모 저장소(repos)를 위한 적절한 페이지네이션(pagination)
- 아키텍처 컨텍스트를 위한 트리 페칭(Tree fetching)
- 이슈 트리거를 위한 웹훅(Webhook) 처리
- 적절한 형식을 갖춘 PR 생성
교훈: GitHub API 문서를 철저히 읽으세요. 작은 실수가 통합을 망가뜨립니다.
8. Qwen 모델은 매우 뛰어납니다
Qwen-plus와 Qwen-turbo는 다음 작업에서 우수한 성능을 보였습니다:
- 코드 분석 및 생성
- 구조화된 추론(Structured reasoning)
- 시스템 프롬프트(system prompts) 준수
- 비용 효율성
교훈: Qwen 호환 API는 폐쇄형 모델(closed models)에 대한 확실한 대안입니다. 해커톤 기간 동안 빠른 반복(iteration)이 가능합니다.
나를 놀라게 한 점들
1. 특화된 역할의 가치
처음에는 하나의 "슈퍼 에이전트(super agent)"가 모든 것을 할 수 있을 것이라고 생각했습니다. 아니었습니다. 관심사를 분리하는 것(분석 → 계획 → 개발 → 리뷰)은 각 단계가 우아하게 실패할 수 있고 독립적으로 개선될 수 있는 파이프라인을 만듭니다.
2. 메모리는 게임 체인저입니다
첫 번째 PR(Pull Request) 이후, 시스템은 저장소(repo)의 패턴을 학습했습니다. 두 번째 이슈 수정은 에이전트(agent)들이 이전 결정에 대한 컨텍스트(context)를 가지고 있었기 때문에 훨씬 더 뛰어난 결과를 보여주었습니다.
3. 보안 에이전트(Security agents)가 실제 문제를 포착했습니다
저는 보안 스캐닝이 형식적인 절차에 그칠 것이라고 예상했습니다. 하지만 보안 에이전트는 다른 에이전트들이 놓친 실제 취약점과 의존성(dependency) 위험을 찾아냈습니다.
4. 인간은 여전히 "이유"를 알고 싶어 합니다
AI의 확신도가 99%라 할지라도, 리뷰어들은 다음 사항을 확인하고 싶어 합니다:
- 어떤 문제가 해결되었는가?
- 왜 이 접근 방식을 선택했는가?
- 어떤 대안들이 고려되었는가?
이는 단순한 자동화보다 양질의 문서화와 설명 가능성(explainability)이 더 중요하다는 것을 의미합니다.
도전 과제 (Challenges)
1. 속도 제한(Rate Limiting) 및 비용
이슈당 여러 번의 LLM 호출을 실행하면 비용이 빠르게 누적됩니다. 에이전트의 응답을 캐싱(caching)하고 요청을 배치(batching) 처리하는 것이 도움이 됩니다.
2. 복잡한 저장소(Repos) 처리
수천 개의 파일이 있는 대규모 코드베이스는 LLM의 컨텍스트 윈도우(context window)에 맞게 요약하기 어렵습니다. 더 나은 요약(summarization) 기술과 시맨틱 검색(semantic search)이 필요합니다.
3. 오류 복구 (Error Recovery)
에이전트가 실패할 때(잘못된 코드 형식, 테스트 실패 등), 어떻게 복구해야 할까요? 현재 방식은 더 많은 컨텍스트를 제공하여 재시도하는 것입니다. 향후에는 다른 에이전트에게 도움을 요청하는 방식을 고려하고 있습니다.
4. 비동기 디버깅 (Async Debugging)
동시에 실행되는 멀티 에이전트(multi-agent) 파이프라인은 디버깅하기 어렵습니다. 구조화된 로깅(structured logging)이 필수적입니다.
결과 (Results)
✅ 이슈 → PR: GitHub 이슈를 분석부터 리뷰 준비 완료된 PR까지 처리할 수 있음
✅ 인간 참여형 (Human-in-the-loop): 유지 관리자(maintainer)가 병합(merge) 전 항상 승인함
✅ 멀티 에이전트 협업 (Multi-agent coordination): 에이전트들이 컨텍스트를 공유하고 서로의 작업 내용을 바탕으로 발전함
✅ Qwen 통합: 폴백(fallback) 처리가 포함된 매끄러운 LLM API 통합
✅ 배포 완료: 프론트엔드는 Vercel에, 백엔드는 클라우드 배포 준비 완료
다음 단계 (What's Next)
- 문맥 요약 개선 (Improve context summarization) – 거대한 코드베이스 (codebases)를 더 효과적으로 처리
- 캐싱 레이어 (Caching layer) 추가 – 반복되는 패턴에 대한 LLM 호출 감소
- Alibaba Cloud에 배포 – 동시 실행되는 파이프라인 (pipelines)을 위해 백엔드 확장
- 기여자 온보딩 (Contributor onboarding) – 에이전트 (agents)를 사용하여 새로운 기여자를 위한 학습 로드맵 생성
- 멀티 리포 학습 (Multi-repo learning) – 여러 오픈소스 프로젝트 전반의 패턴을 학습
핵심 요약 (Key Takeaway)
AI 엔지니어링 팀을 구축하는 것은 개발자를 대체하는 것이 아니라, 유지보수자 (maintainers)의 역량을 증폭시키는 것입니다.
AutoMaintainer는 특화된 에이전트 (agents), 인간의 감독 (human oversight), 그리고 스마트한 통합 (integrations)을 결합함으로써 오픈소스의 실제 병목 현상, 즉 아이디어를 테스트되고 검토된 프로덕션 준비 완료 (production-ready) 코드로 전환하는 문제를 해결할 수 있음을 보여줍니다.
이번 해커톤은 짧은 시간 내에 실제 작동하는 무언가를 출시하도록 강제했습니다. 그러한 제약은 가치 있었습니다. 기능 확장 (feature creep)에 빠지는 대신 핵심 워크플로우 (이슈 → 계획 → 코드 → 테스트 → 리뷰 → 승인)에 집중할 수 있게 해주었습니다.
만약 당신이 이슈에 파묻혀 있는 오픈소스 유지보수자이거나, 멀티 에이전트 시스템 (multi-agent systems)에 호기심이 있는 AI 엔지니어라면, 리포지토리를 확인해 보세요: https://github.com/okuhlecharlieman/AutoMaintainer
감사합니다 (Thank You)
다음 분들께 깊은 감사를 드립니다:
- 해커톤과 훌륭한 LLM API를 제공해 준 Qwen & Alibaba Cloud
- 강력한 API를 제공해 준 GitHub
- 훌륭한 프레임워크를 제공해 준 FastAPI & Next.js 팀
- 영감을 준 전 세계의 모든 오픈소스 유지보수자들
다음에 무엇을 만드실지 알려주세요. 🚀
멀티 에이전트 시스템 (multi-agent systems), LLM 통합 (LLM integration), 또는 오픈소스 자동화에 대해 논의하고 싶으신가요? 아래에 댓글을 남겨주세요!
Tags: #ai #hackathon #agents #opensource #qwen #fastapi #nextjs
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기