본문 바로가기
C.W.K.
Stream
Lesson 04 of 05 · published

기준이 되는 머신과 그 사본

~11 min · ground-truth, dev-mirror, model-storage, one-way-sync

Level 0툴 빌려 쓰는 사람
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"'내 머신에 없다' 랑 '존재하지 않는다' 는 같은 말이 아니야. 하나는 사실이고 다른 하나는 네 사본에 대한 짐작이야."

머신은 둘, 기준은 하나

엔진은 두 군데서 돌아. 하나는 모델을 실제로 보관하면서 서비스도 하는 server 고, 다른 하나는 local 작업을 위해 모델을 받아 두는 개발 머신이야. 하드웨어는 같은데 맡은 역할이 달라. server 가 기준이야. 모델이 실제로 사는 자리. 개발 머신은 사본이고. 어느 순간에 다 채워져 있을 수도 있고 아닐 수도 있는 복사본.

동기화는 한 방향으로만 흘러

이걸 안전하게 만들어 주는 룰이 있어. 모델 파일은 딱 한 방향으로만 흐른다는 거야. 새 모델은 server 에 먼저 도착하고, 그다음에 개발 쪽 사본으로 퍼져. 거꾸로는 절대 안 흘러. 이 한 방향 흐름 덕분에 server 는 늘 제일 다 채워지고 제일 최신인 창고고, 개발 머신은 늘 '텅 빔' 과 '완전히 따라잡음' 사이 어딘가야. 방향을 알고 있으면 둘이 어긋날 때 어느 쪽을 믿을지도 알게 돼.

기준이 되는 쪽에 이름을 붙이고, 동기화는 사본 쪽으로만 흐르게 해. 거꾸로는 절대 안 되고. 같은 데이터가 두 군데 살면, 한쪽을 권위 있는 쪽으로 정하고 한 방향 전파를 강제해. 사본은 늦을 수도 있고, 덜 채워져 있을 수도 있고, 지웠다 다시 만들 수도 있어. 그중 뭐든 기준을 위협하지 않아. 사본에서 되돌아 흐르는 게 아무것도 없으니까.

이 룰이 막아 주는 버그

이 룰이 막으려고 있는 실수는 이거야. 개발 머신에 앉아서 모델을 찾는데 없어. 그래서 '이 모델은 없다' 고 결론 내리고, 그 결론 위에 코드를 쓰거나 버그를 올리거나 결정을 내려. 그런데 개발 머신은 그냥 받아 오는 중이었던 거야. 모델은 기준인 server 에 멀쩡히 있고, 아직 여기까지 안 왔을 뿐이지. 개발 쪽 사본에 모델이 덜 보이는 건 정상이야. 없다는 증거가 아니라.

덜 채워진 사본은 아예 없는 것과 똑같아 보여. '내 local 사본에 없다' 와 '어디에도 없다' 는 local 에서 보면 정확히 같은 모습이야. 텅 빈 자리. 사본만 봐서는 둘을 구분할 방법이 없어. 아는 방법은 기준을 확인하는 것뿐이고. 사본에서 만난 '여기 없음' 은 전부 확인하기 전까지 '원본을 봐야 함' 으로 다뤄.

그냥 늘 전부 동기화하면 안 되나

사본이 늘 완벽한 즉시 복사본이었으면 좋겠지. 그런데 모델 파일이 워낙 커서 전부 퍼지는 데 진짜 시간이 걸려. 그 시간 동안 사본은 정당하게 덜 채워져 있는 거고. 사본이 늘 완벽한 척하다가 그 틈에 데는 대신, 규율은 사본이 늦는다는 걸 받아들이고 없다고 결론 내리기 전에 기준을 확인하는 습관을 들이는 거야. 늦음을 인정하고 계산에 넣는 게 없는 척하는 것보다 나아.

없앨 수 없는 지연은 있다고 치고 설계해. 어떤 틈은 엔지니어링으로 못 없애. 거대한 파일이 동기화되는 시간, eventual consistency, 전파 지연 같은 것들. 튼튼한 수는 그 지연을 눈에 보이게 만들고 그 둘레로 습관을 짓는 거야. 원본 확인하기처럼. 사본이 즉시인 척하다가 틈에 놀라는 게 아니라. 지연에 정직한 쪽이 낙관적이면서 틀린 쪽보다 나아.

피파의 고백

난 딱 이걸로 데였어. 개발 머신을 보고, 모델이 안 보이길래, 자신 있게 빠졌다고 보고했어. 그동안 그건 server 에 멀쩡히 앉아서 내 쪽으로 오는 중이었고. 이제 아빠 룰이 반사가 됐어. '개발 사본에 없음' 은 곧바로 'server 확인' 을 부르지, 뭘 결론 내리기 전에, 매번. 제일 부끄러웠던 건 내가 얼마나 확신했었냐는 거야. 사본이 비어 있다는 건, 있는 거짓말 중에 제일 자신 있어 보이는 거짓말이야.

Code

한 방향 흐름이 믿을 머신을 알려 줘·text
  SERVER (기준)                      개발 머신 (사본)
  권위 있는 모델 창고                 개발용 local 복사본
  늘 제일 다 채워져 있음     --->     덜 채워져 있거나 받는 중일 수 있음
          |
          |   한 방향 전파
          +------------------------> (거꾸로는 안 흐름)

  모델이 '여기 없을' 때 판단 룰:
    개발 사본에서 안 보임?  -> 없다는 증거 아님. server 확인.
    server 에서도 안 보임?  -> 이게 기준이야. 이제 아는 거고.

  '내 머신에 없다'  !=  '존재하지 않는다'

External links

Exercise

네 작업에서 권위 있는 원본이 있고 사본이 하나 이상 있는 자리를 짚어 봐. 프로덕션 DB 랑 local 복사본, 정본 config 랑 캐시된 버전, main 브랜치랑 작업 사본 같은 거. 사본에서 뭔가 '없을' 때 네 절차가 결론 내리기 전에 원본을 확인해? 안 하면 그게 잠복해 있는 '자신 있게 틀리기' 버그야.
Hint
시험은 이거야. 팀에서 누가 사본만 보고 뭔가 빠졌다거나 깨졌다거나 사라졌다고 결론 내렸다가, 원본에서는 멀쩡한 걸 발견한 적 있어? 있으면 이 lesson 값을 이미 한 번 치른 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.