커버
📝 한줄 요약
AI 코딩 도구를 여러 개 켜두고 일하면 커밋이 섞이지 않을까요?
섞입니다. 저는 세 번 당했어요. 규칙 문 서에 적어두는 걸로는 안 막혀서, 결국 명령을 가로채는 자동 검사기를 붙였습니다.
바쁘시면 이것만 읽어도 돼요:
여러 창을 띄워도 저장 대기 목록(스테이징)은 하나예요 — 다른 창이 올려둔 파일이 내 커밋에 실립니다
규칙 문서에 "이렇게 하세요"라고 적어뒀는데 세 번 다 뚫렸어요
원인은 명령어에서
--두 글자가 빠진 것 — 이 정도 크기는 사람 주의로 못 막아요그래서 경로를 안 적은 커밋은 아예 실행이 안 되게 막았습니다
만들고 나서 일부러 맞아봤어요 — 진짜 막히는지, 멀쩡한 건 안 막는지 둘 다
🎯 이런 분들께 도움돼요
AI 코딩 도구를 두 개 이상 띄워놓고 일하는 분
"분명 이 파일만 저장했는데 왜 저것까지 들어갔지?" 겪어보신 분
팀 규칙을 문서에 적어놨는데 계속 안 지켜져서 답답한 분
자동화에 안전장치를 붙이고 싶은데 어디부터 손댈지 모르겠는 분
😫 문제 상황 (Before): 내가 안 만진 파일이 내 이름으로 저장됐어요
지난 7월에 AI 여러 개로 일하다 서로 작업을 덮어썼어요를 썼어요. 창을 여러 개 띄우면 서로 파일을 덮어쓰는데, 일을 어떻게 나누면 안 꼬이는지를 정리한 글이었습니다.
그렇게 나눠서 잘 쓰고 있었는데, 한 군데가 더 샜습니다.
저는 AI 코딩 도구(Claude Code)를 여러 창 띄워놓고 일합니다. 한 창은 기업 건, 한 창은 문서 정리, 한 창은 도구 만들기 — 이런 식으로요.
파일은 안 겹치게 나눴는데도 이상한 일이 반복됐어요. 제 작업을 저장했는데, 열어보면 다른 창이 만지던 파일까지 같이 들어가 있는 거예요. 한 번은 13개 파일이 엉뚱한 제목의 기록에 딸려 들어갔습니다.
기록이 뒤섞이면 나중에 "이 변경은 왜 했더라"를 되짚을 수가 없어요. 저장 기록은 나중의 나를 위한 메모인데, 남의 메모가 섞여 들어온 셈입니다.
🛠️ 사용한 도구
도구명: Claude Code (터미널에서 쓰는 AI), git (파일 변경 이력을 남기는 도구)
만든 것: 명령을 가로채 검사하는 훅 스크립트 1개 + 테스트 1개
비용: 0원. 코드는 50줄 남짓이에요
🔧 왜 남의 파일이 내 저장에 딸려올까?
창은 여럿, 장바구니는 하나
원인은 저장 대기 목록이 하나뿐이라는 데 있었어요.
git으로 파일을 저장할 때는 두 단계를 거칩니다. 먼저 저장할 파일을 목록에 올리고, 그다음 그 목록을 한 번에 확정해요. 이 중간 목록을 스테이징이라고 부릅니다.
공용 장바구니라고 생각하면 쉬워요. 창을 세 개 띄워도 장바구니는 하나입니다.
그래서 이런 일이 벌어집니다.
B창이 물건을 장바구니에 담아둡니다 (아직 계산 전)
그 사이 A창인 제가 계산대로 갑니다
B가 담아둔 것까지 제 이름으로 계산됩니다
각자 다른 창에서 일하고 있으니 서로 뭘 담았는지 모릅니다. 그런데 장바구니는 공유예요.
💡 창은 여러 개인데 장바구니는 하나예요. 이걸 모르면 원인 없이 사고만 반복됩니다.
🔧 규칙 문서에 적어뒀는데 왜 또 뚫렸을까?
규칙은 적어놨는데 또 뚫렸다
해결책 자체는 간단했어요. 계산할 때 "이것만 계산해주세요"라고 품목을 찍으면 됩니다. 명령어로는 이렇게요.
git commit -m "메시지" -- 내파일.md-- 뒤에 파일을 적으면 그것만 저장됩니다. 장바구니에 뭐가 있든 상관없어요.
저는 이걸 팀 규칙 문서에 정확히 적어놨습니다. 7월 말에요. 사고 경위까지 같이 적었고요.
그리고 또 뚫렸습니다. 7월에 두 번, 이번 주에 한 번.
마지막 사고를 뜯어보니 이랬어요. 파일을 목록에 올릴 때는 하나씩 제대로 지정했는데, 정작 계산할 때 품목을 안 찍었습니다. 명령어로 치면 -- 두 글자와 파일 이름이 빠진 거예요.
여기서 생각이 바뀌었습니다. 조심해야 할 대상이 두 글자면, 조심으로는 못 막습니다. 규칙 문장이 틀린 게 아니라, 문장으로 막을 수 있는 종류의 실수가 아니었어요.
💡 규칙을 세 번 적었는데 세 번 뚫렸다면, 규칙을 네 번째 적을 게 아니라 지키는 방식을 바꿔야 해요.
🔧 명령을 아예 실행 못 하게 막기
그래서 훅을 붙였습니다. 훅은 명령이 실행되기 직전에 끼어드는 검사기예요. 은행 창구 앞의 번호표 확인 같은 겁니다 — 통과 못 하면 창구까지 못 갑니다.
검사 규칙은 세 줄로 정했어요.
막히는 것과 통과하는 것
품목을 안 찍은 저장: 막기
"전부 다" 옵션을 붙인 저장: 막기
이미 한 저장을 다시 쓰는 명령: 막기
품목을 찍은 저장: 통과
막힐 때는 왜 막혔는지와 올바른 형태를 같이 보여주게 했어요. 그냥 "안 됩니다"만 뜨면 사람이 훅을 꺼버리거든요.
🔧 만들다 밟은 함정 하나
첫 버전은 멀쩡한 명령까지 막았어요.
저장할 때 남기는 메시지 안에 --가 들어 있으면 검사기가 그걸 품목 표시로 착각했습니다. 반대로 메시지에 "전부 다" 옵션과 같은 글자가 들어 있으면 멀쩡한 명령을 막았고요.
git commit -m "규칙 -- 정리" # 메시지일 뿐인데 품목으로 오해
git commit -m "옵션 -a 설명" # 메시지일 뿐인데 위험 옵션으로 오해
메시지 본문은 검사 대상에서 빼는 처리를 넣어 해결했어요. 사람이 쓴 글은 검사하지 않고, 명령어 부분만 봅니다.
💡 안전장치는 빡세야 하지만, 멀쩡한 걸 자꾸 막으면 사람이 꺼버려요. 오탐 하나가 장치 전체를 무력화합니다.
🔧 일부러 맞아보기
만들어놓고 통과하는 것만 보면 진짜 막는지 알 수 없어요. 그래서 막혀야 하는 명령 9개, 통과해야 하는 명령 9개를 미리 적어두고 한 번에 돌렸습니다.
막혀야 하는 쪽에는 이번 주에 실제로 사고 난 명령을 그대로 넣었어요. 그게 안 막히면 만든 의미가 없으니까요.
결과는 18개 전부 기대대로였습니다.
그리고 마지막으로, 실제 작업 중에 진짜 사고 명령을 한 번 쳐봤어요. 막혔습니다. 이 글을 쓰는 지금 저장은 품목을 찍어서 통과한 거고요 — 막히는 것과 통과하는 것을 양쪽 다 실제로 확인했습니다.
💡 안전장치는 두 번 시험해야 해요. 진짜 막는지, 그리고 멀쩡한 걸 안 막는지.
✅ 결과 (After)
실수 방지: 규칙 문서를 기억하기 → 명령이 아예 실행 안 됨
사고 발견 시점: 저장하고 한참 뒤 → 저장 전
되돌리기: 이미 올라가서 불가 → 애초에 안 일어남
검사 근거: "확인했습니다" → 테스트 18개 통과 기록
만드는 비용: 코드 50줄, 반나절 안 걸림
💬 해보고 남은 팁
AI 창을 두 개 이상 띄운다면 오늘 바로 확인하세요. 저장 전에
git diff --cached --stat한 줄이면 장바구니에 뭐가 들었는지 보입니다.규칙을 세 번 적었는데 세 번 뚫렸다면 신호예요. 문서를 다듬을 게 아니라 장치로 옮길 때입니다.
막을 때 대안을 같이 보여주세요. "안 됩니다"만 뜨면 사람은 장치를 끕니다. 올바른 형태를 붙이 면 그 자리에서 고쳐 씁니다.
🧭 장바구니를 아예 나누는 방법은 언제 쓸까?
더 센 방법이 있습니다. 창마다 작업 폴더를 통째로 따로 두는 것이에요. 그러면 장바구니가 창마다 하나씩 생겨서 이 문제가 원천적으로 사라집니다. 공용 카트를 같이 미는 대신 각자 카트를 끄는 셈이죠.
저는 지금 안 씁니다. 제 작업이 대부분 문서라서요. 창을 나눠도 결국 같은 문서(오늘 일지 같은 것)를 여럿이 써야 하는데, 그러면 섞이는 시점이 없어지는 게 아니라 "저장할 때"에서 "나중에 합칠 때"로 미뤄질 뿐이에요. 지금은 훅으로 충분합니다.
넘어갈 때가 됐는지는 이 네 가지로 봅니다.
오래 붙잡기: 몇 시간씩 쥐고 고쳐야 해서 "짧게 고치고 바로 저장"이 성립 안 함
또 섞임: 규칙도 지키고 장치도 붙였는데 여전히 섞임 = 공용 장바구니 자체가 병목
동시 실행 충돌: 한쪽이 오래 도는 작업 중인데 다른 쪽이 같은 걸 고쳐야 함
큰 개편 격리: 통째로 바꾸는 작업을 검증 전까지 본선에 안 섞고 키우고 싶음
하나도 해당 안 되면 아직입니다. 문서 작업 위주라면 대개 아직이에요.
💡 더 센 장치가 항상 더 나은 건 아니에요. 문제가 생기는 시점을 뒤로 미루기만 하는 것인지 먼저 봐야 합니다.
❓ 자주 묻는 질문
Q. 창을 하나만 쓰면 안 겪는 문제 아닌가요?
맞아요. 이건 여러 개를 동시에 돌릴 때만 생깁니다. 다만 한 번 병렬로 일해보면 되돌아가기 어렵더라고요.
Q. 코딩을 몰라도 만들 수 있나요?
검사기 코드는 AI가 짜줍니다. 사람이 정할 건 무엇을 막을지예요. 저도 비개발자고, 정한 건 "품목 안 찍은 저장은 막는다" 한 줄이었습니다.
Q. 급할 때 막히면 답답하지 않나요?
잠시 끌 수 있게 해뒀어요. 다만 끄는 게 번거로운 편이 낫습니다 — 쉽게 꺼지면 결국 늘 꺼진 상태가 되거든요.
Q. 다른 실수에도 쓸 수 있나요?
같은 방식이에요. "이 명령에 이게 없으면 막는다"로 바꿔 쓰면 됩니다. 저는 개인정보가 든 파일 저장을 막는 검사기도 따로 쓰고 있어요.
🚀 앞으로 할 것
막힌 횟수를 세어보기 — 자주 막히면 제 습관이 아직 안 바뀐 거예요
위 네 신호 중 하나라도 켜지면 작업 폴더 분리로 넘어가기
다른 반복 실수도 같은 방식으로 옮길 수 있는지 훑기
🔗 같이 읽으면 좋은 글
이 글은 두 글의 뒤를 잇습니다. 문제는 앞의 글에서, 해법은 뒤의 글에서 이어졌어요.
AI 여러 개로 일하다 서로 작업을 덮어썼어요 — 실무에서 안 꼬이게 나누는 법 — 창을 여러 개 띄울 때 일을 어떻게 나누는지. 이 글은 나눠도 새는 곳**에 대한 이야기예요.
AI로 만든 현황판을 접이식으로 바꿨더니 — 요약과 근거가 따로 노는 걸 코드가 잡게 했어요 — 사람 눈 대신 코드가 판정하게 한 첫 사례. 이번엔 그 대상이 제가 쓴 규칙**이었습니다.
📋 재사용 템플릿
그대로 복사해서 쓰세요.
"AI 창을 여러 개 띄우고 일하는데, 다른 창이 올려둔 파일이
내 커밋에 딸려 들어가는 일이 반복돼.
명령 실행 전에 검사하는 훅을 만들어줘.
1) git commit 에 -- 경로가 없으면 막기
2) -a / --all 처럼 전부 담는 옵션도 막기
3) 막 을 때는 이유 + 올바른 명령 형태를 같이 보여주기
4) -m 메시지 본문은 검사에서 뺄 것 — 메시지에 --나 -a가 있어도 오탐 나면 안 돼
그리고 회귀 테스트도 같이 만들어줘.
막혀야 하는 명령과 통과해야 하는 명령을 각각 나열해서 한 번에 돌리는 형태로.
막혀야 하는 쪽에는 내가 실제로 실수했던 명령을 그대로 넣어줘."
마지막 줄이 핵심이에요. 실제로 사고 났던 명령을 테스트에 넣는 것. 그게 안 막히면 만든 의미가 없으니까요.