---
id: issue-fixer
type: project
title: Issue Fixer
url: https://auejin.com/ko/projects/issue-fixer/
lang: ko
alternate:
  en: https://auejin.com/en/projects/issue-fixer/
updated: '2026-08-11'
---

# Issue Fixer

*끊임없이 쌓이는 실무 버그 큐를 사람 대기열 없이 소화하는 자율 수정 시스템*

2026.02

- **무엇** — 프로덕션 버그 큐를 끝까지 처리하는 에이전트 시스템이다.
- **왜** — 버그 하나에 드는 시간의 대부분은 고치는 데가 아니라 무엇이 어떤 조건에서 깨졌는지 알아내는 데 든다.
- **어떻게** — Jira를 스스로 살펴 이슈를 고르고, 첨부 영상을 키프레임으로 잘라 VLM으로 촬영 조건을 복원한 뒤, 실제 브라우저에서 재현하고 고치고 Before/After로 자기 수정을 반박한 다음 PR을 연다.
- **새로움** — LLM이 끝났다고 말해도 완료 신호로 삼지 않는다. 판정은 열거형으로 강등시켰다. 격주 자체 감사로 자기 코드를 고치는 PR도 스스로 올린다.

## 요약

> **검증 수준**: 3D 공간 데이터 B2B SaaS 기업의 프론트엔드 모노레포에서 **5개월간 프로덕션 상시 가동**(야간·주말 포함 무인). 벤치마크나 데모가 아니라, 달력일 기준 하루 평균 6건 이상이 계속 유입되는 실제 버그 큐를 소화한 운영 기록이다. 최종 머지와 사고 대응만 사람 게이트.

## 왜 "코드 고치는 AI"와 다른가

| 흔한 버그 수정 에이전트 | Issue-Fixer |
|---|---|
| 사람이 이슈를 골라 프롬프트로 떠먹여 준다 | **트래커를 직접 운영한다** — Jira를 5분 주기로 폴링해 대상을 스스로 집고, 상태 전이·질문 댓글·실패 롤백까지 이슈 라이프사이클을 소유 |
| 레포를 읽고 바로 코드를 고친다 | **고치기 전에 제품 컨텍스트를 확정한다** — QA 링크로 대상 앱·환경 판별, 첨부 영상 → 키프레임 → VLM으로 촬영 조건(날짜·층·뷰 모드) 복원, 코드베이스 분석과 과거 PR 이력 주입 |
| 한 번에 한 이슈 (단일 체크아웃) | **동시에 굴린다** — git worktree 슬롯 풀로 이슈별 격리, 잡 사이 리셋 1.1초, 경합의 원인이던 "보류" 상태는 스키마에서 표현 자체가 불가능하도록 제거 |
| "고쳤습니다"라는 LLM 선언이 곧 완료 신호 | **LLM의 발화를 완료 신호로 쓰지 않는다** — 실브라우저 Before/After 반증, 판정은 타입드 enum, 실패는 5단 분류학, 완료는 마커 프로토콜 |
| 개선하려면 사람이 프롬프트를 손본다 | **스스로 개선 PR을 낸다** — 격주 KPI 자가 감사(숫자는 전부 결정적 코드가 계산) → 로드맵 자동 구현 → draft PR → 다음 사이클이 효과를 통계 검정 |
| 벤치마크·데모에서 검증 | **프로덕션 5개월 상시 가동** — 유입 924건 소화, 대형 사고 3건을 재발 불가능한 구조로 전환 |

## 핵심 수치 (5개월 실운영, 자체 분석 DB 집계)

| 지표 | 값 |
|---|---|
| 유입 압력 | 5개월(약 150일) **924건** — 달력일 기준 하루 평균 6건 이상 상시 유입, 시스템 피크 처리량 하루 35건 |
| 자동 triage | 유입 924건 전부 자동 분류 — 비버그·중복·스코프 밖 **176건**을 사람 손 없이 걸러냄 |
| 자동 생성한 수정 PR | **571건** — 이슈 감지부터 PR까지 중앙값 **35분**, p90 59분 |
| 머지율 | 리뷰 완료 기준 **35.4%** (159/449, 오픈 PR 122건 제외 — 생성 PR 전체 기준 27.8%) · 머지 중 **82.4%는 사람 수정 0건** |
| 원인 분석(RCA) 정확도 | **82.9%** (사람의 후속 커밋과 파일 집합 대조, 판정 가능 237건 기준) |
| 머지율 추이 | 초기 감사 시점 19.5% → 누적 35.4% (+15.9pp, 산식 차이로 근사 비교 — 이 기간 자가 개선 루프가 구현한 개선 3건 반영) |
| 가동 형태 | 5개월 상시 무인 가동 (launchd 상시 서비스 + main 폴링 자동 배포, graceful drain 재시작) |

## 기술 하이라이트 4가지

**1. 고치기 전에 제품 컨텍스트를 세우는 그라운딩** — 코드를 열기 전에 "무엇이 어떤 조건에서 깨졌나"를 실환경에서 확정한다: QA 링크 파싱으로 대상 앱·환경 판별, 첨부 재현 영상을 scene detection + 사용자 입력 시점 병합으로 증거 프레임 셋으로 압축해 VLM 분석, 재현 실패의 최대 원인이 프레임 해석이 아니라 촬영 조건 불일치라는 관측에서 촬영 컨텍스트(날짜·층·뷰 모드)를 1급 산출물로 승격. 검증은 스테이징이 아니라 **수정본이 들어 있는 작업 트리를 로컬 serve**해서 수행한다 — 스테이징을 보면 수정 전 코드를 두고 FIXED를 판정하는 원천적 거짓 성공이 생기기 때문. WebGL 캔버스 앱이라 DOM assertion이 불가능한 영역은 VLM이 Before/After를 판정하고, 재현·검증 산출물은 조건–변인–반응의 공통 실험 기록 스키마를 공유한다.

**2. LLM의 보고를 그대로 믿지 않는 실행 계층 (에이전트 하네스)** — 완료 선언·판정·입력 요청 등 LLM의 모든 발화를 검증 가능한 신호로 바꿔서만 소비한다: 세션을 22개 phase로 분리(컨텍스트 격리)하고 phase 간 인터페이스를 파일 스키마로 강제, 판정은 타입드 enum으로 강등해 상태 기계의 입력으로 사용. 체크포인트 기반 재개, 실패 유형 5단 분류(재시도/이슈 격리/사용자 입력/하네스 정지/셧다운), 모델 버전 핀과 phase 예산의 세트 관리.

**3. 처리량은 열되 사고는 구조로 닫는 신뢰성·동시성 공학** — 폭주 루프 사고(이틀간 rollback 5,534회)를 "종료 조건은 루프가 지울 수 없는 곳에" 원칙으로 재설계(내구성 실패 원장 + TTL 없는 서킷 브레이커), 공유 자원 연쇄 실패(1건의 보류가 대기 97건을 실패 확정)를 git worktree 슬롯 풀로 구조 제거한 뒤 그 위에서 동시 실행을 열었다. 전환은 측정 우선: 기준선 실측 → 격리 → 12시간 소킹 → 동시성 개방 순서로, 각 단계에 정량 게이트.

**4. 자기 성적표를 만들고 스스로 개선 PR을 내는 닫힌 루프** — 격주 보고서가 KPI를 감사하되 숫자는 전부 결정적 코드가 계산(LLM은 서사만), KPI 게이밍을 정규식 게이트로 차단. 보고서의 개선 로드맵을 시스템이 스스로 구현해 draft PR 제출, 다음 주기 보고서가 효과를 통계 검정으로 회귀 측정. 제안 → 자동 구현 → 사람 머지 → 효과 측정의 완전한 한 바퀴가 저장소에 기록으로 남아 있음.

## 역할

1인 프로젝트 — 아키텍처 설계, 에이전트 오케스트레이션, 신뢰성 설계, 관측/평가 체계 구축, 5개월 상시 운영 및 사고 대응까지 전담.

상세 포트폴리오: https://auejin.com/ko/projects/issue-fixer/portfolio/

## 관련

- [소프트웨어 엔지니어 @ 주식회사 큐픽스](https://auejin.com/ko/experience/cupix/)
