git worktree로 AI 에이전트 병렬 작업 격리하기
AI 에이전트를 병렬로 돌리다 리뷰어가 낡은 커밋을 보고 통과시키는 사고를 겪고, git worktree와 SHA 대조로 막아낸 1인 개발 기록이에요.
AI 에이전트 두 개를 같은 레포에서 돌려본 적 있나요? 하나는 코드를 쓰고, 다른 하나는 그 코드를 리뷰하는 구성이요. 혼자 운영하면서 이 방식을 쓰는데, 얼마 전 리뷰어가 통과시킨 코드와 실제로 머지된 코드가 서로 달랐던 일을 겪었어요.
원인은 단순했어요. 리뷰를 요청한 뒤에 빌더 에이전트가 커밋을 1개 더 쌓았고, 리뷰어는 요청 시점의 낡은 커밋을 읽고 통과를 준 거예요. 같은 작업 디렉토리를 공유하다 보니 브랜치를 오가며 서로 파일을 덮어쓰는 일도 있었고요.
공간 분리: worktree 하나면 시작돼요
먼저 작업 공간부터 나눴어요. git worktree는 브랜치마다 독립된 디렉토리를 만들어 줘요. git worktree add ../review feature/rotation 명령 1줄이면 끝나요. clone과 달리 저장소 데이터를 공유해서 디스크 부담이 적고, 직접 세팅해 보니 10분이 안 걸렸어요. 빌더와 리뷰어가 각자의 디렉토리에서 일하니 파일을 덮어쓰는 문제는 바로 사라졌어요.
시점 고정: SHA 계약이 진짜 해결이었어요
그런데 테스트해 보면 worktree만으로는 낡은 커밋 리뷰가 안 막혀요. 디렉토리를 나눠도 리뷰 요청 후에 커밋이 더 쌓이면 똑같거든요. 그래서 핸드오프 매니페스트를 직접 만들어 봤어요. base_sha·head_sha·changed_files 3개 필드짜리 JSON을 빌더가 넘기고, 리뷰어는 시작 전에 자기 worktree의 HEAD가 head_sha와 같은지 대조해요. 다르면 리뷰를 거부하고 재요청을 받게 했어요.
적용해 봤더니 리뷰 거부가 실제로 뜨더라고요. 예전 같으면 낡은 코드가 조용히 통과됐을 순간이에요. 통과보다 거부가 뜨는 쪽이 오히려 안심됐어요.
- worktree로 공간 격리
- head_sha로 시점 고정
- 불일치면 리뷰 거부
플랜비(plan-b)의 출전 로테이션처럼 검증이 중요한 로직을 만들 때 이 구성이 특히 든든했어요. 에이전트 2개가 각자 디렉토리에서 일하고, 넘겨받는 쪽이 SHA부터 확인하니까요.
병렬 작업 사고는 대부분 같은 공간과 다른 시점에서 나와요. 공간은 worktree로 나누고, 시점은 3개 필드짜리 작은 계약으로 고정해 보세요.
관련 글
댓글
아직 댓글이 없어요. 첫 댓글을 남겨주세요.