영상 링크: Automating Large Scale Refactors with Parallel Agents - Robert Brennan, AllHands
채널명: AI Engineer
평행 에이전트를 활용한 대형 코드 리팩터 자동화 핵심 요약
- 본 강연은 “Open Hands”라는 오픈소스 에이전트 프레임워크를 바탕으로, 대규모 소프트웨어 리팩터링 및 코드 유지보수, 기술 부채 해소 등의 반복적 작업을 자동화하는 방법을 상세히 다룸
- 발표자 Robert Brennan(오픈핸즈 공동창업자, CEO)는 소프트웨어 개발 현장에 LLM 기반 에이전트가 실제로 어떻게 투입되고 발전해왔는지, 현업 경험을 구체적 예시와 함께 제시
- LLM 기반 도구 진화사: 단순한 맥락 없는 코드 스니펫 생성 → 프로젝트 맥락을 인지하는 IDE 통합(예: GitHub Copilot) → 자가 실행‧디버깅하는 자율형 에이전트 → 여러 에이전트 병렬 오케스트레이션
- “Open Hands” 및 프레임워크 사용자 사례: 수만 명 개발자, 수천 개 저장소에서 보안 취약점(CVE) 자동 조사 및 패치 PR 생성/병합 → 인간 작업 대비 최대 30배 시간 단축 효과
- 오케스트레이션형 에이전트 활용 대상: 의존성 최신화, 문서/릴리스 노트 자동화, 대규모 마이그레이션(예: Spark2→3, Redux→Zustand), 사용하지 않는 코드 자동 제거 등 반복적·대량·규칙 기반 작업
- 대형 리팩터 작업의 어려움: 컨텍스트 한계(코드베이스 맥락 제한), 도메인지식 부족, 인간/에이전트간 추론 상이, 오류 전파, 인간의 중간 리뷰 및 최종 결정 필요
- 에이전트 오케스트레이션 전략: 작업을 병렬화 가능한 세부 단위로 쪼개고, 각 에이전트 결과를 병합/리뷰하여 90% 수준의 자동화(남은 10%는 인간이 중재 or 승인)
- 실제 예시: 대규모 코드베이스(60,000라인, 380파일)를 그래프 분해로 작은 패치 단위(batch)로 배분, 검증기(verifier)로 코드 스멜 자동 검출, 수정(fixer) 및 PR 생성/리뷰 루프 반복
- 효과적인 오케스트레이션을 위한 주요 원칙: ‘병렬화 가능/쉬운 검증/명확한 의존성/단일 에이전트 완결 가능’한 작업 단위로 세분화, 변환 상황(Scaffolding), 컨텍스트 공유 전략(파일/메시지/방송 등) 실험
- Open Hands SDK 활용 실습: 리포지토리 취약점 자동 스캔→공격 취약점별 병렬 에이전트 패치·PR 생성까지, 실전 스크립트 예시 및 CLI/WebUI 실습 안내
세부 요약 - 주제별 정리
LLM 기반 개발 에이전트는 코드 작성 방식의 근본적 변화를 촉진 중임
- Robert Brennan은 LLM과 개발 도구의 융합으로 소프트웨어 개발 패러다임이 근본적으로 바뀌고 있음을 강조
- 과거에는 IDE에서 직접 코드를 작성했지만, 이제는 거의 모든 코드가 에이전트 프로세스를 거쳐 생성됨
- 기능 구현 방식이 “직접 작성”에서 “에이전트에게 서술적으로 지시”하는 방식으로 변화
- 인간 개발자는 여전히 중요한 사고와 문제해결을 담당하지만, 실제 실행 작업의 주체가 기계로 점진적으로 이동 중임
- 이 변화는 아직 시작 단계에 불과하며, LLM 능력이 현 수준이더라도 2~3년간 산업 전반에 걸쳐 적용 확산이 이뤄질 전망
- 심리적·조직적 저항은 줄어들고 있으며, 이미 개발 경험의 실질적인 측면들이 재정의되고 있음
LLM 활용 코딩 도구의 진화 경로는 맥락성 인지와 자율행동의 확장으로 진행되고 있음
- 1세대: 맥락없는 코드 스니펫 생성(예: 버블소트 알고리즘)
- 2세대: GitHub Copilot 등 IDE 내부의 맥락을 이해, 변수명/DB명/주변 코드 참조 기반 자동완성
- 3세대(2024년): 자동화 코딩 에이전트 Devon, OpenDevon(현 Open Hands) 출현 → 코드 작성 → 실행 → 오류 메시지 검색/디버깅/테스트 자동화까지 수행
- 4세대: 복수 에이전트 병렬 오케스트레이션, 에이전트가 중첩적으로 에이전트 생성 및 협업, 개발 대작업을 여러 에이전트에 병렬 분배
- 이러한 단계별 도구 진화에 따라 생산성은 기하급수적 도약(점진적 개선에서 단숨에 ‘작업 자동화’ 단계로)
에이전트 환경은 지역/클라우드/오케스트레이션 단계로 발전하며, 이에 따른 개발 흐름도 변화함
- 초창기: 기존 IDE 플러그인(예: Copilot)
- 현시점: 지역(local) 에이전트와 클라우드 기반 에이전트 모두 사용되나, 클라우드 환경에서는 에이전트마다 격리된 샌드박스 제공(더 안전하고 확장 가능)
- 최첨단: 클라우드 내에서 에이전트간 상호작용 및 오케스트레이션(1% 미만의 선구적 개발자만 활성 활용 중)
- Open Hands 팀은 CLI, local 도구와 클라우드 환경을 병행 지원하여 개발자의 습관에 맞는 도입을 유도
- 에이전트 기반 대규모 작업은 일반 개발자가 익숙하지 않아 도입 장벽 존재하나, 상위 개발팀은 막대한 생산성 향상과 기술 부채 해소 경험
대규모 리팩터 및 반복적 유지보수 작업은 에이전트 오케스트레이션의 가장 강력한 적용 분야임
- 적용 예시: 보안 취약점(CVE) 대응, 의존성 최신화, 릴리스 노트 및 문서 자동화, 타입 어노테이션 추가(Py3→타입), 단일 모놀리스를 마이크로서비스로 분리 등
- 실제 Open Hands 고객(수만 개발자, 수천 저장소) 사례
- 신규 오픈소스 취약점(CVE) 발표 시, 전사 코드베이스에 일괄 검색→취약 리포지토리 선별→자동 패치 PR 생성, 현업팀은 리뷰/머지만 하면 됨
- 해당 방식으로 패치 작업 처리 속도가 30배 향상(30x improvement)
- Spark2→Spark3, Redux→Zustand 등 대형 마이그레이션 진행 사례
- 사용하지 않는 코드 자동 탐지·제거, 에러 패턴별 즉각적 핸들러 삽입 등 반복 대량 작업에 효과적
대형 작업을 단일 에이전트가 처리하지 못하는 기술적·조직적 한계가 명확히 존재함
- LLM의 컨텍스트 윈도우(문맥 허용량) 한계로 인해 대규모 코드베이스 전체 맥락 파악이 불가
- 에이전트의 도메인 지식 부족 및 점진적 오류 전파 문제(초기 실수 반복 확산)
- 임의적 의견: “3개 서비스만 바꿨으니 나머지 97개는 팀을 더 고용하세요”와 같은 부정확한 평가
- 인간은 작업 목표 및 완성도를 직관적으로 파악하나, 에이전트는 명확하게 전달받지 못하면 오작동 발생
- 작업 분해(decomposition) 및 중간/최종 산출물에 대한 인간의 적극적 리뷰 루프 필요
오케스트레이션 작업은 90% 자동화·10% 인간 리뷰의 구조로, 병렬화 및 작업 단위의 분해가 핵심임
- 에이전트 오케스트레이션 방식: 대형 과업→독립적으로 병렬 수행 가능한 소과업(task)으로 쪼개기
- 작업 단위별로 에이전트 할당 및 결과 수집→중간 리뷰→최종 병합
- 실전 지침: 초기에는 3
5개 병렬 에이전트 권장, 익숙해지면 수백수천 개 동시 운영도 가능(수만 건의 PR 자동 생성) - 중간/최종 산출물 리뷰 루프 내 인간 참여 필수(100% 자동화 목표가 아님, ‘90% 자동화’만 해도 10배 효율)
실제 코드 리팩터 자동화 사례: 그래프 분해를 통한 작업 배치, 자동 검사·수정 연계
- 켈빈 동료 발표 사례:
- Open Hands 리포지토리(60,000라인, 380파일) 전체에서 코드 스멜을 제거하는 대규모 리팩터 작업
- 전체 파일 간의 의존 그래프 시각화→‘의미적 관련 파일 단위(batch)’로 그룹핑
- 각 배치별로 코드 복잡도, 의존성 분석 후 검증(verifier) 수행: LLM 기반 규칙 검사로 코드 스멜 리포트 자동 생성
- 문제가 없는 배치는 자동 완료, 문제가 있는 경우 수정(fixer) 단계로 연결
- fixer는 Open Hands SDK 기반 에이전트가 직접 코드 수정, 테스트 및 PR 생성
- 각 PR은 상세 리포트 및 요약과 함께 제출되고, 최종적으로 인간 리뷰 후 병합
- 전체 그래프에서 모든 노드(배치)가 녹색(완료)될 때까지 루프 반복
- 결과적으로, 코드 타입 추가·테스트 개선 등 방대한 작업도 일관성 있게 신속히 달성
효율적인 작업 분해와 병렬화를 실현하려면 구체적 분할 전략과 검증 루틴을 설계해야 함
- 이상적인 소과업(배치)은 “단일 에이전트가 1회(원샷)에 처리·PR 생성 가능”, “서로 독립적이어서 병렬화 가능”, “검증이 쉽고 확실”, “작업 의존성/순서가 명확”
- 분할 전략:
- 단순 분할(파일별 일괄), 디렉터리별, 함수/클래스 기준
- 의존 트리/그래프 분석을 통한 잎(leaf)노드→상위 진입점 방향 진행
- 변환 중간 상태(scaffolding) 적용: 일부만 변환된 상황에서도 애플리케이션 동작 가능하도록 임시 구조 도입(예: 리덕스→주스탄 상태관리 이관 시 동시 운영 임시 구조)
- 각 컴포넌트 변환 후 테스트 및 인간 리뷰, 완료 후 임시구조 제거
대규모 프로젝트에서 컨텍스트와 노하우 공유는 병목이 될 수 있어 다양한 전략이 실험됨
- 컨텍스트 공유 방식:
- 모든 에이전트에 전부 공유(naive)→실효성 낮음, 컨텍스트 윈도우 한계 야기
- 인간이 수기로 각 에이전트에 상황 전달(비효율, 확장성 낮음)
- 문서(agents.md/micro-agent 등)를 이용해 에이전트끼리 메시지/메타정보 공유(에이전트가 직접 PR로 정보 업데이트, 인간 리뷰 필요)
- 최첨단: 에이전트간 직접 메시지 송수신(브로드캐스트/포인트투포인트), 대화형/비동기 구조 실험,케이스에 따라 무한 루프 유발 등 예측불가성 존재
Open Hands SDK를 활용한 실습 절차는 대형 병렬 CVE 패치 작업을 단계별로 안내함
- 실습 목차:
-
- 새로운 GitHub 리포지토리 생성, Open Hands SDK/CLI/웹UI 세팅, API 토큰 취득
-
- 도커 컨테이너 기반의 에이전트 서버 실행→에이전트가 자체 격리 환경에서 작업하도록 구성(대규모 확장 시 쿠버네티스 클러스터 활용 가능)
-
- Hello world 단위 LLM+에이전트 기동, LLM API 키 유효 확인
-
- 첫 에이전트로 코드베이스 CVE 스캔, 언어와 환경에 따라 적합한 스캐너 자동 결정(trivy, npm audit 등)
-
- 취약점 리스트 확보→각 CVE별로 에이전트 기동→해결책 조사, 의존성 업데이트, API breaking change 자동 수정, PR 생성 반복
-
- 병렬 PR 생성으로 인간 작업자는 완료된 PR만 ‘Approve/Merge’(부분실패 무관, 95% 이상 자동 해결 지향)
-
- 실습용 스크립트(Python 및 SDK 예제), CLI/웹UI 혼용 예시, 실제 오류 메시지 분석 및 수정 피드백 실시간 시연
-
- 과정 중 토큰 발급, 도구 설치, 환경 변수 설정 등 상세 실무 팁 제공
-
Open Hands SDK 및 에이전트 운영 실무에서 자주 마주치는 기술적 이슈와 활용 팁도 상세히 공유됨
- CLI/WebUI 중 자유롭게 택일, 실습 환경에 맞게 활용(로컬 편의/데모 목적 구분)
- 도구 설치, API 키 설정, 도커 컨테이너 기동 등 환경 세팅 이슈 상세 설명
- 설치 오류(uv 등 Python 패키지, 에이전트 서버 기동 등) 발생시 상황별 대안(버전 주의, 바이너리 직접 다운로드, docker 활용 등)
- 실습용 에이전트/스크립트 구조는 데모 목적상 단일 스크립트이나, 실제 운영에선 모듈화/파일 분리 권장
- LLM/에이전트가 내린 액션/옵서베이션 구조, 내부 이벤트 플로우 등 작동 방식을 교육
- 실습 참가자 질의응답을 통해, 실시간 문제 해결 및 설치/인증서 관리/토큰 발급 과정 지원
인간 개발자 개입이 핵심인 ‘90% 자동화/10% 인간 리뷰’ 전략을 고수하며 대규모 자동화를 실현함
- 에이전트가 모든 작업을 완전히 대체하지는 않음
- 반복적이고 규칙에 기반한 작업은 최대한 세분화 및 병렬화해 에이전트가 처리
- 중간 산출물 리뷰, 컨텍스트 습득, 복잡한 의사결정, 최종 승인은 인간 역할
- 이 같은 전략적 역할 분담으로, 기존 1~2년 걸리던 작업도 몇 주만에 달성하는 실제 효과 사례 다수