거대한 AI 생성 풀 리퀘스트 하나를 검토 가능한 스택으로 바꾸기 (새 탭에서 열림)
AI 코딩 에이전트는 짧은 시간에 대규모 기능을 구현하지만, 모든 변경을 하나의 거대한 PR에 담는 방식은 리뷰 품질과 병합 속도를 떨어뜨린다. 이 글은 기능을 데이터·API·애플리케이션 연결·UI처럼 논리적 계층으로 나누고, 각 계층을 작은 PR로 쌓는 “스택드 풀 리퀘스트(stacked pull requests)”를 대안으로 제시한다. 이를 통해 에이전트의 생산성은 유지하면서도 각 변경을 독립적으로 검토하고 관리할 수 있다.
AI가 만든 대규모 PR의 문제
- 쇼핑 어시스턴트에 상품 검색 기능을 추가하면 다음 변경이 한 PR에 함께 들어가기 쉽다.
- 새 데이터 모델과 시드 데이터
- API 라우트와 입력 검증
- 클라이언트 연결
- UI 및 빈 상태·오류 상태·대체 상태
- 결과적으로 1,000~1,700줄 이상의 큰 diff가 만들어질 수 있다.
- 리뷰어는 변경 내용을 한 번에 이해하기 어렵고, PR 설명이 길지만 구체적이지 않으면 검토를 뒤로 미루게 된다.
- 리뷰가 늦어지면서 문맥이 사라지고 피드백 품질이 낮아지며, 충돌과 수동 동기화가 늘어난다.
- 결국 기능이 충분히 검토되지 않은 채 병합될 위험이 커진다.
스택드 풀 리퀘스트의 기본 원리
- 하나의 대형 PR 대신 기능을 논리적으로 분해해 여러 개의 작은 PR로 만든다.
- 각 PR은 하나의 관심사만 다루며, 리뷰어가 한 번에 이해할 수 있는 크기로 제한한다.
- PR은 의존성 순서에 따라 연결된다.
- 하위 계층이 먼저 구현되고, 상위 계층은 그 변경을 기반으로 작업한다.
- 이전 계층에서 얻은 문맥은 다음 계층으로 자연스럽게 이어지므로, 전체 기능을 매번 처음부터 읽을 필요가 없다.
- 데이터 담당자, 백엔드 담당자, UI 담당자처럼 변경 영역에 맞는 리뷰어를 배정할 수 있다.
상품 검색 기능의 스택 구조
| 계층 | 브랜치 | 작업 내용 | 의존 대상 |
|---|---|---|---|
| L1 | feat/catalog-data |
타입이 지정된 카탈로그, 시드 데이터, 검증, 데이터 접근 모듈 | main |
| L2 | feat/search-api |
검증을 포함한 /api/products/search 엔드포인트 |
L1 |
| L3 | feat/chat-grounding |
채팅이 API를 호출하고 실제 상품 데이터에 기반해 응답 | L2 |
| L4 | feat/grounded-ui |
상품 인용 카드와 UI 상태 처리 | L3 |
- 데이터, API, 애플리케이션 연결, UX가 각각 독립된 작업 단위가 된다.
- 각 계층은 자체적으로 리뷰할 수 있지만, 전체 기능은 계층 간 의존성을 통해 완성된다.
- 가장 기반이 되는 작업을 스택의 아래쪽에 배치하고, 그 위에 이를 사용하는 작업을 쌓는다.
GitHub 도구와 초기 설정
- GitHub는 PR 화면뿐 아니라 터미널에서도 스택드 PR을 관리할 수 있다.
gh-stackCLI 확장 설치:
gh extension install github/gh-stack
- 코딩 에이전트가 스택 구조를 이해하고 생성·관리하도록 관련 스킬을 설치할 수 있다.
gh skill install github/gh-stack
또는:
npx skills add github/gh-stack
- 스택을 시작하기 전에 스택의 기준 브랜치(stack base)를 정해야 한다.
- 일반적으로
main이 기준이 된다. - CI 검사와 병합 규칙이 전체 스택에서 이 기준을 바탕으로 평가된다.
- 일반적으로
- 모든 계층에 CI가 존재하는지 확인해야 한다.
- 각 PR 계층마다 CI 검사가 실행된다.
- 따라서 작은 PR이라도 테스트와 규칙 검증을 통과해야 한다.
에이전트별 작업 분담
- 에이전트에게 전체 기능을 한 번에 맡기기보다, 계층별로 역할과 범위를 지정한다.
- 예시 구성:
- L1: 데이터 모델러 에이전트
- L2: 백엔드 에이전트
- L3: 프론트엔드 에이전트
- L4: 프론트엔드 에이전트
- 각 에이전트는 하나의 작업 스트림과 엄격한 범위를 따르도록 구성한다.
- 이런 방식은 에이전트가 자동화 루프에서 작업하더라도 결과물이 지나치게 커지는 것을 방지한다.
- 작업 순서는 데이터 기반을 먼저 만들고, API, 채팅 연결, UI 순으로 진행한다.
실용적인 적용 방법
- 기능을 시작할 때 먼저 데이터·도메인 모델·API·애플리케이션 연결·UI로 나눈다.
- 각 PR이 단일 관심사만 포함하는지 확인한다.
- 기반 브랜치를 먼저 만들고, 각 후속 브랜치를 바로 이전 계층에서 파생한다.
- 계층별로 적절한 리뷰어를 배정하고, 각 PR에 해당 계층의 목적과 검증 방법을 명확히 작성한다.
- AI 에이전트에는 “전체 기능 구현”이 아니라 특정 스택 계층과 변경 범위를 명시하는 것이 좋다.
- 스택드 PR은 리뷰 부담을 줄이는 대신 브랜치 의존성을 관리해야 하므로, CLI와 자동화 도구를 함께 사용하는 것이 효과적이다.