아티클 목록으로
AI 에이전트

DoorDash, 멀티 에이전트 LLM으로 6만 개 Feature Flag 정리

약 4분 소요

들어가며

Feature Flag는 점진적 배포와 실험을 돕지만, 역할을 끝낸 Flag가 남으면 코드 부채가 된다. DoorDash는 이 문제를 해결하기 위해 실험 플랫폼의 메타데이터, 코드 검색, 사람의 승인, 격리된 실행 환경, 자동 검증을 하나로 연결한 멀티 에이전트 LLM 시스템을 구축했다.

핵심 내용

  • DoorDash의 플랫폼은 약 623개 저장소에서 6만 개가 넘는 Feature Flag를 관리한다.
  • 매달 약 2,300개가 추가되며, 이미 1,000개 이상이 만료된 것으로 분류됐다.
  • 90일 동안 수정되지 않았고 코드에서 계속 참조되며, 보관·폐기·명시적 제외 대상이 아닌 Flag를 만료 상태로 본다.
  • 50개 평가에서 45개의 사용 가능한 Pull Request를 생성했고, 건당 평균 시간은 13.8분, 비용은 4.79달러였다.

Flag 삭제가 어려운 이유

DoorDash는 의존성 주입 방식의 Wrapper를 사용한다. Flag의 정의, 클라이언트 호출, 비즈니스 로직, 테스트가 여러 파일에 흩어질 수 있기 때문에 단순한 Boolean Flag 하나를 정리하는 데도 5~20개 파일을 수정해야 할 수 있다.

이 구조는 구문 기반 자동화의 한계를 드러낸다. Uber의 오픈소스 도구 Piranha는 추상 구문 트리와 규칙 기반 변환으로 만료된 Flag를 찾고 제거한다. 그러나 DoorDash는 의존성 주입으로 생기는 관계가 구문이 아니라 의미 수준에 있기 때문에, 이 방식만으로는 모든 경우를 처리하기 어렵다고 봤다.

LLM 방식은 코드 검색 결과와 사용 맥락, 삭제 전략을 함께 다룰 수 있다는 장점이 있다. 다만 결정론적 검사를 대체하는 것은 아니다. Agent의 판단을 빌드와 테스트 같은 검증 단계로 감싸는 것이 핵심이다.

두 단계로 구성된 워크플로

첫 단계는 Claude Sonnet 기반 오케스트레이션 Agent가 담당한다. Agent는 Jira에서 만료 Flag 작업을 가져오고 관련 저장소를 검색한 뒤, Model Context Protocol을 이용해 실험 플랫폼을 조회한다. 여기서 배포 비율과 목표값 같은 메타데이터를 얻는다. 생성된 보고서는 엔지니어가 검토하고 목표값을 확인해야 다음 단계로 넘어간다.

두 번째 단계에서는 Claude Opus 기반 정리 Agent가 실제 코드 변경을 수행한다. 각 작업은 격리된 Git Worktree에서 실행되며, 저장소 하나당 최대 4개의 Agent를 동시에 실행할 수 있다. Agent는 모든 참조를 찾고 정리 전략을 정한 뒤 소스 코드와 테스트를 수정한다. 이후 빌드, 테스트, JaCoCo 패치 커버리지 검사, Detekt 정적 분석을 수행한다. 모든 검사를 통과한 경우에만 Pull Request를 만들며, Agent의 제한 시간은 1시간이다. Worktree 간 상태 공유를 막기 위해 Gradle Daemon도 비활성화했다.

성과와 한계

평가 대상 50건 중 31건은 첫 제출 후 바로 병합됐고, 14건은 수정이 필요했으며, 5건은 엔지니어의 개입이 필요했다. 단순한 Flag의 1회 성공률은 100%, 중간 복잡도는 94%, 복잡한 Flag는 85%였다. 수동 개입이 발생한 5건은 모두 깊은 호출 체인이나 인터페이스를 가로지르는 매개변수 전달과 관련됐다. DoorDash는 50개 변경에서 버그나 회귀를 발견하지 못했다고 밝혔다.

이 사례의 의미는 LLM에게 코드를 삭제하게 하는 데 있지 않다. 실험 의미가 모호할 때는 사람이 승인하고, 변경은 격리하며, 결과는 자동 검증하는 운영 구조가 함께 설계됐다는 점이 중요하다. DoorDash는 앞으로 저위험 작업에 신뢰도 점수를 추가하고, Flag 제거 뒤 잘못된 변수명처럼 남을 수 있는 품질 문제를 확인하는 후속 검사를 도입할 계획이다.

다른 개발 조직에도 오래된 Flag 정리는 Agent 적용에 적합한 후보가 될 수 있다. 목표가 비교적 명확하고 변경 내용을 리뷰할 수 있으며 테스트로 결과를 확인할 수 있기 때문이다. 재사용 가능한 교훈은 특정 모델보다 실행, 승인, 격리, 검증을 연결한 엔지니어링 루프에 있다.

출처: InfoQ 中文

댓글

로그인 상태 확인 중…

댓글 불러오는 중…

관련 게시물

CCTest · Blog
IterSynth, 역할 분리로 딥서치 에이전트를 다시 설계하다
AI 에이전트
cctest.ai
AI 에이전트

IterSynth, 역할 분리로 딥서치 에이전트를 다시 설계하다

IterSynth는 하나의 공유 모델이 Planner와 Synthesizer 역할을 번갈아 수행하도록 해 검색 계획과 근거 종합을 분리한다. 전체 검색 기록 대신 계속 갱신되는 요약을 상태로 사용하고, RDPO로 역할별 학습 신호를 제공한다.

더 보기