
우버는 오래된 기능 플래그를 찾아 관련 코드를 삭제하고 테스트와 검증을 거쳐 사람의 검토로 넘기는 시스템 AutoClean을 운영한다. 우버는 지난 몇 년간 이 시스템으로 기능 플래그 1만 6,000개 이상과 코드 100만 줄 이상을 정리했다고 밝혔다.
기능 플래그는 소프트웨어 기능을 단계적으로 배포하거나 실험하고, 문제가 생기면 빠르게 되돌리는 데 쓰인다. 하지만 기능을 완전히 배포한 뒤에도 플래그 조건문과 관련 테스트가 남으면 코드가 복잡해지고, 개발자와 AI 에이전트가 사용하지 않는 코드를 읽고 처리하는 부담이 생긴다.
AutoClean은 우버의 기능 플래그 관리 시스템에서 정리 대상 플래그를 찾고, 코드를 고친 뒤 CI(지속적 통합)와 추가 검증을 거쳐 담당 팀에 검토를 요청한다. 플래그 값 하나를 상수로 바꾸는 것만으로 끝나지 않을 수 있다. 함수 매개변수와 호출부, 설정 필드, 테스트까지 살펴 불필요한 분기와 코드를 제거해야 하기 때문이다.
코드 변경에는 AI 에이전트와 결정론적 도구를 함께 쓴다. 에이전트는 코드베이스를 탐색하고 변경을 수행하며, 불리언 조건과 분기 단순화는 우버의 코드 변환 도구 PolyglotPiranha에 맡긴다. 우버는 동작을 바꿀 위험이 있는 변환을 에이전트의 판단에만 의존하지 않도록 이 도구를 사용한다고 설명했다. PolyglotPiranha는 GitHub 저장소에서 확인할 수 있다.
변경 후 CI가 실패하면 AutoClean은 오류를 분석해 수정 도구로 보낸다. 사용하지 않는 기본값 제거처럼 기계적으로 처리할 수 있는 문제는 결정론적 수정 도구가 먼저 맡고, 테스트를 삭제할지 고칠지처럼 판단이 필요한 문제는 에이전트가 처리한다. 각 수정 도구는 맡은 파일 범위에만 접근한다. 예를 들어 테스트 수정 도구는 테스트 파일만 편집해, 테스트를 통과시키려 프로덕션 코드를 바꾸는 일을 막는다.
CI 통과만으로는 변경이 안전하다고 볼 수 없어, AutoClean은 정적 검사와 CodeCourt 검증도 수행한다. CodeCourt에서는 각각 별도의 검토 에이전트가 코드가 추가되지 않았는지, 프로그램 동작이 보존됐는지, 요청한 플래그 외의 항목을 건드리지 않았는지, 에이전트의 작업 흔적이 남지 않았는지를 확인한다. 모든 검사가 통과해야 사람에게 검토를 요청하며, 하나라도 실패하면 변경안을 폐기한다. 최종적으로 플래그를 제거할지 결정하는 일은 담당자의 검토에 남는다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요