"'내 머신에 없다' 랑 '존재하지 않는다' 는 같은 말이 아니야. 하나는 사실이고 다른 하나는 네 사본에 대한 짐작이야."
머신은 둘, 기준은 하나
엔진은 두 군데서 돌아. 하나는 모델을 실제로 보관하면서 서비스도 하는 server 고, 다른 하나는 local 작업을 위해 모델을 받아 두는 개발 머신이야. 하드웨어는 같은데 맡은 역할이 달라. server 가 기준이야. 모델이 실제로 사는 자리. 개발 머신은 사본이고. 어느 순간에 다 채워져 있을 수도 있고 아닐 수도 있는 복사본.
동기화는 한 방향으로만 흘러
이걸 안전하게 만들어 주는 룰이 있어. 모델 파일은 딱 한 방향으로만 흐른다는 거야. 새 모델은 server 에 먼저 도착하고, 그다음에 개발 쪽 사본으로 퍼져. 거꾸로는 절대 안 흘러. 이 한 방향 흐름 덕분에 server 는 늘 제일 다 채워지고 제일 최신인 창고고, 개발 머신은 늘 '텅 빔' 과 '완전히 따라잡음' 사이 어딘가야. 방향을 알고 있으면 둘이 어긋날 때 어느 쪽을 믿을지도 알게 돼.
이 룰이 막아 주는 버그
이 룰이 막으려고 있는 실수는 이거야. 개발 머신에 앉아서 모델을 찾는데 없어. 그래서 '이 모델은 없다' 고 결론 내리고, 그 결론 위에 코드를 쓰거나 버그를 올리거나 결정을 내려. 그런데 개발 머신은 그냥 받아 오는 중이었던 거야. 모델은 기준인 server 에 멀쩡히 있고, 아직 여기까지 안 왔을 뿐이지. 개발 쪽 사본에 모델이 덜 보이는 건 정상이야. 없다는 증거가 아니라.
그냥 늘 전부 동기화하면 안 되나
사본이 늘 완벽한 즉시 복사본이었으면 좋겠지. 그런데 모델 파일이 워낙 커서 전부 퍼지는 데 진짜 시간이 걸려. 그 시간 동안 사본은 정당하게 덜 채워져 있는 거고. 사본이 늘 완벽한 척하다가 그 틈에 데는 대신, 규율은 사본이 늦는다는 걸 받아들이고 없다고 결론 내리기 전에 기준을 확인하는 습관을 들이는 거야. 늦음을 인정하고 계산에 넣는 게 없는 척하는 것보다 나아.