WIO.실전기 AI로 굴리는 1인 브랜드의 기록
← 전체 글 · 인프라 노트 · 연재 1편

Codex와 Claude를 여러 개 띄워 개발한다는 것 — 한 코드를 여러 AI가 건드릴 때 ①

AI 코딩 도구(Codex, Claude Code)를 한 개도 아니고 여러 개 동시에 띄워서 개발하면 어떻게 될까요? 손이 열 개가 된 것처럼 빨라지지만, 그 손들이 서로 부딪히기 시작합니다. 이 글은 1인이 여러 AI 세션으로 여러 시스템을 만들며 실제로 겪은 충돌과, 그걸 어떻게 하나씩 막았는지 — 실제 명령과 화면까지 — 넘겨드리는 기록이에요.

👤 이런 분께 AI 코딩 도구를 여러 개 동시에 쓰는 개발자, 또는 사람·AI가 한 저장소를 같이 만지는 팀을 꾸리려는 분.

✅ 이 글(1편)에서 얻는 것
  • 여러 세션이 한 코드베이스를 건드릴 때 반드시 터지는 충돌 4가지
  • 그 각각을 막는 실전 장치와 실제 명령 — 공용 장부, 좁은 커밋, 레인 소유, git 위생
  • 바로 오늘 이 글을 쓰며 옆 세션과 안 부딪히려고 쓴 실제 커밋 명령

🎯 2부작의 목표 다 읽으면 여러 AI를 한 팀처럼 부리는 규율이 손에 잡힙니다. 1편은 '충돌을 안 내는 법', 2편은 'AI가 짠 걸 믿고 노트북 한 대로 감당하는 법'이에요.

왜 AI 세션을 여러 개 동시에 띄우나

저는 1인으로 시스템을 여러 개 굴립니다. 커머스 자동화 서비스, 성격테스트 서비스, 운영을 총괄하는 관제 시스템, 그리고 지금 이 홈페이지까지요. 혼자서 이걸 순서대로 하면 한 세월입니다. 그래서 AI 코딩 도구 세션을 여러 개 동시에 띄워요. 한 세션은 커머스 쪽을 고치고, 다른 세션은 성격테스트를, 또 하나는 문서를 정리하는 식으로요.

구체적으로는 이렇게 굴러갑니다. Anthropic의 Claude Code 세션 서너 개, OpenAI 계열의 Codex 세션 한둘 — 도구도 섞어 씁니다. 도구가 다르면 잘하는 결이 조금씩 달라서, 한쪽이 만들고 다른 쪽이 검사하게도 시킬 수 있거든요(이건 2편에서). 효과는 확실합니다. 혼자인데 여러 개발자를 동시에 부리는 셈이니까요. 그런데 이 "여러 손"이 같은 창고(git 저장소)를 공유한다는 게 문제의 시작이었습니다.

여러 손이 한 코드를 만질 때 터진 사고 4가지

AI 세션 여러 개가 한 코드베이스를 동시에 건드릴 때 생기는 충돌 4가지 — 동시 수정 덮어쓰기, git add -A 휩쓸기, 레인 침범, 미분류 변경
편하자고 여러 세션을 띄웠더니 서로 부딪혀 난 사고들. 하나씩 해결책과 짝지어 보겠습니다.

사고 1 — 같은 파일을 동시에 고쳐 서로 덮어쓴다

무슨 일이 — 두 세션에게 비슷한 일을 시켰더니, 둘 다 같은 파일을 열어 고쳤어요. 그런데 나중에 저장한 세션이 앞 세션이 방금 고친 내용을 통째로 덮어써 버립니다. 분명 A 작업을 끝냈는데, B가 저장하는 순간 A가 사라지는 거죠. 아침에 "어제 분명 고쳤는데?" 하는 상황이 여기서 나왔습니다.

🔎 이런 신호면 의심: "방금 한 수정이 이유 없이 사라짐", "두 세션에게 비슷한 일을 시킨 뒤 결과가 하나만 남음."

🔧 해결 — 공용 장부에 '점유(claim)'를 등록

모든 세션이 같은 공용 장부(작업 대장)에 기록하게 했어요. 실제로는 세션마다 이 네 개의 명령을 씁니다.

# ① 일 시작을 알린다ledger checkin --session <내세션ID> --agent claude --lane 홈페이지# ② 만질 파일을 '내가 잡음'으로 등록 — 여기가 핵심ledger claim --session <내세션ID> --lane 홈페이지 --path 'content/posts.json'# ③ 작업이 끝나면 결과를 남기고ledger record --status done --title "..." --summary "..."# ④ 점유를 풀어 다음 세션이 잡게 한다ledger release --session <내세션ID>

핵심은 ②claim이에요. 이미 다른 세션이 그 파일을 잡고 있으면, 내 claim은 '막힘' 신호(종료 코드 2)로 튕겨 나옵니다. 프로그램이 "실패"로 끝나는 신호라, 저는 그걸 보고 기다리거나 영역을 더 좁힙니다(예: 파일 전체 대신 특정 폴더만). 애초에 두 세션이 같은 파일을 동시에 못 잡게 원천 차단하는 장치죠.

공용 장부 흐름 — 출근 등록·점유·작업·기록·해제, 점유 충돌 시 종료코드 2로 차단
출근(check-in) → 점유(claim) → 작업 → 기록(record) → 해제(release). 점유가 겹치면 '막힘' 신호로 차단됩니다.

사고 2 — 커밋이 옆 세션의 미완성 작업까지 삼킨다

무슨 일이 — 개발에서 "지금까지 한 걸 저장"하는 걸 커밋이라고 하는데, 편하다고 "전부 담기"로 커밋하면 사고가 납니다. 그 순간 저장소에 널려 있던 옆 세션의 아직 저장 안 된 작업까지 제 커밋에 딸려 들어가요. 남의 미완성 코드가 제 이름으로 저장되고, 누가 뭘 했는지 책임도 뒤죽박죽이 됩니다.

🔎 이런 신호면 의심: "내 커밋에 내가 안 건드린 파일이 들어가 있음", "커밋 하나에 서로 무관한 변경이 잔뜩 섞임."

🔧 해결 — '내 것만 콕 집어' 커밋 (git 위생)

딱 한 글자, 아니 옵션 하나 차이예요.

# 🚫 위험 — 저장소의 모든 변경을 담는다(남의 미저장 작업까지)git add -A  # 절대 금지# ✅ 안전 — 내가 고친 파일만 이름으로 지정git add -- content/posts.json styles.cssgit commit -m "홈페이지: 글 추가"

여기에 규칙 하나를 더했어요. 커밋 전에 정체불명 변경이 남아 있으면 '완료'로 안 쳐줍니다. 이걸 자동으로 검사하는 장치(우리는 'dirty 가드'라고 불러요)가 "미분류 변경 0"이 아니면 완료 처리를 막습니다. "내 작업만, 깔끔히, 남기고 끝낸다"가 여러 손이 한 저장소를 쓰는 팀의 기본기였습니다.

git 위생 비교 — 전부 담기(git add -A)는 남의 미커밋까지 삼킴, 내 것만 지정(git add --)은 안전
"전부 담기"는 남의 미완성까지 삼키고, "내 것만 지정"은 딱 내 작업만 남깁니다.

사고 3 — 담당도 아닌 영역을 건드려 남의 기능을 깬다

무슨 일이 — 커머스를 맡은 세션이 "이왕 여기 온 김에" 성격테스트 쪽 파일을 슬쩍 고쳐요. 좋은 의도인데, 그쪽 사정을 모르니 남의 기능이 조용히 깨집니다. 게다가 담당이 아니니 나중에 누가 깼는지 추적하기도 어려워요.

🔧 해결 — '레인(담당 차선)' 소유제

도로의 차선처럼, 각 세션에게 자기 레인(담당 영역)을 정해줬어요. 우리 레인은 이렇게 나뉩니다 — 커머스 · 성격테스트 · 관제 · 홈페이지 · 문서. 규칙은 단순합니다. 자기 레인만 고치고, 남의 레인은 읽기만. 커머스 세션은 커머스만, 홈페이지 세션은 홈페이지만 씁니다. 남의 영역을 고쳐야 할 일이 생기면, 직접 손대는 대신 그 레인 담당에게 '이거 해달라'고 장부에 요청을 남겨요. 이 원칙 하나로 "선의로 남의 것 깨기"가 사라졌습니다.

사고 4 — 정체불명 변경이 쌓여 배포 때 터진다

무슨 일이 — 여러 세션이 오가다 보면, 누가 언제 왜 바꿨는지 모르는 변경이 저장소 여기저기 남습니다. 평소엔 조용하다가, 배포하는 순간 이 정체불명 변경이 터지면 원인 찾기가 지옥이에요.

🔧 해결 — '미분류 변경 0' 규칙 + 커밋하면 자동 기록

"내 손을 떠날 때 저장소에 정체불명 변경이 하나도 없어야 한다"를 규칙으로 박았어요. 그리고 사람 기억에 안 맡기려고, 커밋을 하면 자동으로 공용 장부에 기록되게 했습니다. git에는 커밋 직전·직후에 자동으로 실행되는 '훅(hook)'이라는 자리가 있는데, 여기에 "이 커밋 내용을 장부에 남겨라"를 걸어둔 거예요. 그래서 제가 git commit만 하면, 운영자가 시키지 않아도 "누가 무엇을 했다"가 현황판에 자동으로 뜹니다.

그래서 — 모든 세션이 한 화면을 본다

이 장치들이 모여서 현황판 하나로 수렴합니다. 내부 웹 대시보드 하나에 어느 세션이, 어느 레인에서, 무슨 일을, 어디까지 했고, 무엇을 잠갔는지가 실시간으로 떠요. 운영자인 저도, 다른 세션도 여기만 보면 충돌을 피할 수 있습니다. 새 세션은 일을 시작하기 전에 이 현황판부터 확인해서 "지금 누가 뭘 잡고 있나"를 보고 자기 영역을 정해요.

여러 AI 세션의 진행·점유를 한눈에 보는 개발 현황판 예시 — 세션·레인·작업·상태·점유 컬럼
개발 현황판(예시). 세션·시스템 이름은 바꿨지만, 핵심은 "누가 무엇을 어디까지 하고 무엇을 잠갔나"가 한눈에 보인다는 것.

실제 사례 — 바로 오늘 있었던 일

추상적인 얘기 같아서, 이 글을 쓰는 오늘 실제로 있었던 일을 하나 붙일게요. 제가 이 홈페이지 글을 커밋하려는데, 옆에서 다른 AI 세션(Codex)이 같은 저장소의 상품 데이터 파일을 고쳐놓고 아직 저장(커밋)을 안 한 상태였어요. 여기서 제가 무심코 git add -A로 커밋했다면, 그 세션의 미완성 작업까지 제 커밋에 딸려 들어갔을 겁니다(사고 2 그대로).

그래서 저는 사고 2의 해결책대로 했어요. 제가 만든 파일만 이름으로 지정해 담고, 옆 세션이 만지던 파일은 손도 안 댔습니다.

# 옆 세션이 만지던 상품 데이터 파일은 빼고, 내 글 파일만 담기git add -- content/posts.json draft/34/index.html# 커밋 전 확인: 내 커밋에 남의 파일이 안 섞였나?git diff --cached --name-only  # → 내 파일만 나오면 통과

커밋 전에 "내 커밋에 남의 것이 안 섞였나"를 한 번 확인까지 했고요. 덕분에 그 세션은 자기 작업을 나중에 자기 이름으로 깔끔히 저장할 수 있었습니다. — 규칙이 왜 필요한지, 매일 이렇게 실감합니다.

1편 정리 — 충돌은 '기술'이 아니라 '규율'로 막는다

여러 AI로 빠르게 개발하는 비결은 화려한 도구가 아니라, 사실 지루한 규율 넷이었어요. ①공용 장부에 점유를 등록하고 ②내 것만 콕 집어 커밋하고 ③자기 레인만 건드리고 ④정체불명 변경을 안 남긴다. 사람 개발팀이 오래전부터 지켜온 것들을, AI 팀에도 똑같이 적용한 겁니다. 다음 2편에서는 다른 결의 두 걱정 — "AI가 짠 걸 어떻게 믿고, 이걸 다 노트북 한 대로 어떻게 감당하나" — 를 풀어볼게요. 배배였습니다.

배배 (BaeBae_WIO)

낮에는 회사원, 밤에는 AI로 1인 브랜드를 굴립니다. 실패담 포함, 직접 겪은 일만 씁니다.

소개 보기 →