제 개발 기록(devlog)을 이제 한 도구만 쓰는 게 아니라 여러 AI 에이전트가 같은 파일에 나눠 씁니다. 편해진 만큼 새 걱정이 생겼어요. “둘이 같은 파일에 동시에 쓰면 어떻게 되지?” 이번에 그 사고를 미리 막는 규칙을 넣으면서, 초보도 언젠가 꼭 만나는 함정이라 정리해 둡니다. 버그를 잡은 무용담은 아니고, 사고가 나기 전에 막는 이야기예요.
같은 파일을 둘이 동시에 쓰면 생기는 일
프로그램이 파일을 고칠 때 보통 이렇게 합니다. ① 파일을 읽고 → ② 내용을 고치고 → ③ 다시 저장. 혼자면 아무 문제가 없어요. 그런데 두 프로그램이 거의 같은 순간에 이걸 하면 사고가 납니다.
말로 풀면 이래요. A와 B가 둘 다 같은 옛날 버전을 읽어옵니다. A가 자기 수정을 저장하고, 곧이어 B도 저장해요. 그런데 B는 A가 방금 바꾼 걸 모른 채, 자기가 읽었던 옛날 내용 위에 덮어써 버립니다. 결과적으로 A의 수정이 흔적도 없이 사라져요. 분명 저장은 됐는데 내 변경만 증발한 거죠.
이런 걸 경쟁 상태(race condition, 두 작업이 같은 자원을 두고 순서가 꼬여 결과가 뒤죽박죽되는 상황)라고 불러요. 공유 문서를 두 사람이 각자 옛날 사본에 편집한 뒤 차례로 덮어 저장하면, 나중에 저장한 사람 것만 남는 것과 똑같습니다.
왜 초보도 이걸 만나나
“난 프로그램 하나만 돌리는데?” 싶겠지만, 의외로 자주 겹칩니다.
- 클라우드 동기화(구글 드라이브·드롭박스 같은 것)가 파일을 백업하려고 잡고 있는 순간에, 내 프로그램이 같은 파일을 저장하려 할 때.
- 스크립트를 실수로 두 번 동시에 실행했을 때.
- 편집기로 파일을 열어둔 채, 다른 도구가 같은 파일을 건드릴 때.
이럴 때 흔히 보는 신호가 “파일이 다른 프로세스에 의해 사용 중입니다” 같은 에러예요. 빨갛게 떠서 놀라지만, 사실 코드가 틀린 게 아니라 순간적으로 파일이 잠긴 것뿐인 경우가 많습니다.
막는 법 1 — 쓰기 ‘직전에’ 다시 읽어서 병합한다
이번에 넣은 핵심 규칙이 이거예요. 저장하기 바로 직전에 파일을 한 번 더 읽어서, 그 최신 내용 위에 내 변경만 얹는 겁니다.
왜 이게 통하냐면, 앞의 사고는 “내가 오래전에 읽은 옛날 내용”에 덮어썼기 때문에 생겼거든요. 저장 직전에 최신본을 다시 읽으면, 그새 다른 프로그램이 바꾼 내용을 깔고 그 위에 내 것을 더하니 남의 변경을 지우지 않아요. 읽고 쓰는 사이의 틈을 최대한 좁히는 게 요령입니다.
막는 법 2 — 잠겨 있으면 잠깐 기다렸다 다시 시도
그래도 하필 저장하려는 순간에 파일이 잠겨 있을 수 있어요. 이럴 땐 곧장 포기하지 말고 아주 짧게 기다렸다가 다시 시도하게 합니다. 보통 잠금은 순식간에 풀리거든요. 몇 번 재시도해도 계속 잠겨 있으면, 그때는 에러로 뻗지 말고 조용히 넘어가고 다음 기회에 저장하게 두는 게 좋아요. 특히 이런 기록 작업은 본업(코딩)을 방해하면 안 되니까요.
단, 여기서 조심할 게 있어요. “잠김” 때문인 실패에만 다시 시도해야 합니다. 진짜 코드 버그로 난 에러까지 조용히 삼키면, 진짜 문제를 못 보고 넘어가거든요. 안 되는 걸 원인도 모른 채 계속 다시 돌리는 건, 틀린 풀이를 그대로 또 쓰는 것과 같으니까요. (오늘의 수학쌤 비유는 여기까지.)
그래서 뭘 하면 되나
파일을 여러 곳에서 건드릴 가능성이 있다면, 이렇게 챙기세요.
| 상황 | 하면 좋은 것 | 왜 |
|---|---|---|
| 같은 파일을 둘 이상이 쓸 수 있음 | 🟢 저장 직전에 다시 읽고 병합 | 남의 변경을 안 지움 |
| “사용 중” 에러가 가끔 뜸 | 🟢 짧게 기다렸다 재시도 | 잠금은 대개 순식간에 풀림 |
| 재시도해도 계속 잠김 | 🟡 조용히 넘기고 다음에 | 본업 방해 안 함 |
| 재시도 조건 정할 때 | 🔴 ‘잠김’에만, 버그엔 안 됨 | 진짜 문제를 숨기면 안 됨 |
한 문장 요약: 여러 곳이 같은 파일을 쓸 수 있으면, 저장 직전에 최신본을 다시 읽어 병합하고, 잠겨 있으면 잠깐 기다렸다 재시도하되 ‘잠김’일 때만 그렇게 하라.
혼자 개발할 땐 평생 안 만날 수도 있어요. 그런데 클라우드 동기화를 쓰거나, 자동화 도구가 늘거나, 여러 프로그램이 한 파일을 공유하기 시작하면 슬그머니 찾아옵니다. 그때 “왜 저장한 게 사라지지?” 하고 헤매지 않게, 이 두 가지만 기억해두면 큰 사고를 피할 수 있어요.