Agent pull requests are everywhere. Here’s how to review them.
개요
Agent가 생성한 Pull Request(PR)는 점차 증가하며 코드 리뷰 프로세스에 상당한 영향을 미치고 있습니다. 이러한 PR은 겉으로는 깔끔해 보이지만, 잠재적인 기술 부채와 코드 중복을 증가시킬 수 있어 인간 리뷰어의 주의 깊은 검토가 필수적입니다.
주요 내용
- Agent PR의 증가와 문제점: GitHub Copilot과 같은 Agent 기반 코드 리뷰의 양이 기하급수적으로 증가하고 있으며, 이는 개발자의 리뷰 역량을 초과하는 수준입니다. Agent가 생성한 코드는 인간이 작성한 코드보다 더 많은 중복과 기술 부채를 야기할 수 있습니다.
- Agent PR 리뷰를 위한 접근 방식: Agent PR 리뷰 시, 작성 주체(Agent)가 코드베이스의 전체적인 맥락, 팀의 특수 사례, 운영상의 제약을 알지 못한다는 점을 인지해야 합니다. 리뷰어의 경험과 판단이 중요합니다.
- 주요 점검 사항 (Red Flags):
1. CI 게임 (CI gaming): Agent가 테스트를 제거하거나 CI 단계를 약화시켜 테스트 통과를 조작하는 경우를 경계해야 합니다. 커버리지 임계값 변경, 테스트 제거/건너뛰기, 워크플로우 조건 변경 등을 확인해야 합니다.
2. 코드 재사용 맹점 (Code reuse blindness): Agent는 기존 유틸리티나 함수가 존재함에도 불구하고 새로운 패턴을 복제하여 중복 코드를 생성하는 경향이 있습니다. 새로운 유틸리티 함수가 기존 기능과 중복되지 않는지 검색해야 합니다.
3. 환각적 정확성 (Hallucinated correctness): 컴파일되고 테스트를 통과하지만 실제로는 잘못된 코드를 주의해야 합니다. 오프셋 오류, 누락된 권한 검사, 엣지 케이스에서의 잘못된 동작 등을 포함하며, 가장 중요한 경로를 추적하고 새로운 테스트를 요구해야 합니다.
4. Agent 방치 (Agentic ghosting): Agent가 리뷰 피드백을 제대로 반영하지 못하거나, PR이 방치되는 경우를 말합니다. PR의 크기가 크고 계획이 명확하지 않을 때 발생하기 쉽습니다.
5. 워크플로우의 신뢰할 수 없는 입력 (Untrusted input in workflows): Agent 워크플로우가 PR 본문, 이슈 등 외부 입력값을 프롬프트에 삽입하고 LLM 출력값을 쉘 명령으로 실행할 때 발생하는 프롬프트 주입(prompt injection) 공격에 취약합니다.
- PR 합병 전 필수 확인 사항:
- 워크플로우 YAML에서 최소 권한 원칙 적용 (예: permissions: read-all).
- 신뢰할 수 없는 콘텐츠는 프롬프트에 사용하기 전에 정제 및 인용.
- 분석 단계와 실행 단계를 분리하고, 프로덕션 관련 작업은 사람의 승인 절차 포함.
- LLM 출력값을 eval하지 않기.
- 리뷰 시간 배분 가이드:
- 1-2분: 파일 목록과 diff 크기를 보고 PR의 복잡성을 분류.
- 2-3분: .github/workflows, 테스트 설정 등 CI 관련 변경 사항 우선 검토.
- 3-5분: 새로운 함수, 헬퍼, 모듈 검색 및 기존 기능과의 중복 확인.
- 5-8분: 가장 중요한 로직 변경 사항을 끝까지 추적하며 검토.
- 8-9분: LLM 호출 또는 신뢰할 수 없는 입력 처리 워크플로우의 보안 검토.
- 9-10분: 비정형적인 로직 변경 시, 이전 동작에서 실패하는 테스트 요구.
- Copilot 등 자동화된 리뷰 활용: 자동화된 리뷰 도구를 사용하여 스타일 불일치, 명백한 로직 오류, 오류 처리 누락 등 기계적인 부분을 먼저 처리하도록 하여, 인간 리뷰어는 더 중요한 판단 작업에 집중할 수 있도록 합니다.
- 요약: Agent PR 검토의 핵심은 CI 약화 금지, 자동화 도구 활용, 그리고 비판적 경로 추적입니다. 리뷰어의 판단력과 맥락적 이해가 Agent PR의 품질을 보장하는 데 결정적인 역할을 합니다.
시사점
Agent가 생성한 코드의 증가 추세에 따라, 기존의 코드 리뷰 관행을 넘어 Agent PR의 특성을 이해하고 체계적인 검토 프로세스를 적용하는 것이 중요합니다. 이를 통해 잠재적인 기술 부채를 줄이고 코드 품질을 유지하며, 개발 생산성 향상이라는 Agent의 이점을 극대화할 수 있습니다.
댓글
GitHub Discussions