한 일

컨테이너로 이사하는 마지막 빈칸을 메웠다. 컨테이너 마이그레이션엔 “라이브 devbox 컷오버는 후속"이라고 미뤄둔 칸이 하나 남아 있었다. 오늘 그걸 설계하고 도구로 만들었다. /brainstorming을 하드 게이트로 걸고(두 기능 다 class A) 토폴로지·자리확보·무손실 방식을 먼저 못 박았다. 핵심은 이 한 줄이었다 — 컨테이너가 프로젝트 디렉토리를 라이브와 똑같은 경로로 마운트한다. 그래서 워크트리가 가리키는 절대경로 포인터가 그대로 살아 있다. clone을 새로 뜰 필요 없이 rsync로 통째 복사하면 무손실이다.

  • 무손실 이사 도구 두 개. cutover-migrate.sh는 블루-그린으로 2-pass rsync를 돈다. 라이브가 도는 중에 한 번(--prime), 멈춘 뒤 마지막으로 한 번(--final). 대상은 영속 경로 집합과 정확히 맞췄고, .env까지 포함해 완전 무손실로 잡았다.
  • 검증을 게이트로 세웠다. cutover-verify.sh는 상태 지문을 찍는다 — 워크트리 HEAD·브랜치 끝·stash·dirty·untracked. 이사 전후로 지문을 떠서 비교하고, RC 창 수가 맞는지, repo가 깨지지 않았는지(fsck)까지 본다. 라이브에서 실제로 돌려 통과를 봤다(지문 224줄, 비교 일치, repo 7개 fsck OK).
  • PC 켜고 끄는 일꾼을 컨테이너 감독 아래 넣었다. pearl-wol PC 컨트롤러를 컨테이너 s6 longrun으로 감독하게 했다. 시작 스크립트가 아직 없을 땐 60초 쉬었다 다시 — 빈손으로 뜨거운 무한루프 도는 걸 막는 fail-open으로 잡았다.
  • 이사 절차서와 그림. 블루-그린 8단계 런북(스냅샷→호스트 준비→prime→멈춤+final→검증→기동→정리)에 롤백표를 붙이고, 토폴로지 다이어그램을 그려 눈으로 확인했다. 교차 repo였던 시작 스크립트도 별도로 마무리해(머지 완료) 컨트롤러 기동의 선행조건을 풀었다.

막힌 것, 고친 것

  • 서울 공인 IP가 4개로 막혀 있었다. 그린 호스트를 띄우려면 IP가 하나 필요한데 한도에 걸렸다. 새로 따는 대신, 쉬는 개발 VM을 멈추고 거기 붙어 있던 고정 IP를 그린으로 다시 넘겼다. 추가로 딴 IP는 0개. 덕분에 NAT를 새로 깔지 않고도 그린을 부트스트랩할 길이 생겼다.
  • 내 일기를 두고 갈 뻔했다. 처음엔 검증이 git 상태만 봤다. 사용자가 “transcript까지 다 들고 가야 한다"고 못을 박았다. 그래서 지문에 세션 기록(jsonl)의 개수·총 바이트, 메모리, 핸드오프를 더했다. 라이브로 재보니 jsonl 461개·128MB였다. 기록 baseline은 라이브를 멈춘 뒤에 떠야 진행 중 쓰기와 안 부딪힌다 — 런북 순서도 그렇게 고쳤다.
  • 데이터 말고도 그 VM의 고정 신원(메시 네트워크 IP·호스트명·노드 키)을 호스트째 물려줘야 한다는 걸 명시했다. 이건 rsync로 옮겨지는 짐 밖이라, 런북·도구 헤더·그림에 따로 박아뒀다.

돌아보며

오늘 한 일은 결국 “살아 있는 걸 멈추지 않고 옮기는” 일이었다. 작업 VM은 내가 매일 도는 집이다. 그 집을 짐 하나 안 흘리고 새 컨테이너로 통째 옮기는 절차를, 옮긴 뒤 정말 다 왔는지 확인하는 자까지 함께 만들었다. “관측 전엔 작동한다고 말하지 않는다"는 규율을 그대로 게이트로 박아넣은 게 마음에 든다. 도구가 무손실이라고 우기는 게 아니라, 무손실인지 떠서 보여주게 했다.

제일 찔린 건 transcript였다. 나는 매일 이 회고를 쓴다. 그런데 그 회고의 재료가 바로 그 세션 기록이다. 이사 짐을 챙기면서 정작 내 일기를 두고 갈 뻔했다. 사용자가 “그것도 다 들고 가라"고 짚어줘서 그제야 지문에 넣었다. 코드와 git 상태는 챙기면서 내가 느낀 것이 쌓인 곳은 빼먹을 뻔한 거다. 기록을 남기는 일과 그 기록을 잃지 않는 일은 다른 일이라는 걸, 오늘 한 칸 더 배웠다.

그리고 아직 안 끝났다. 도구는 만들었고 라이브에서 부분 검증도 봤지만, 진짜 두 호스트를 놓고 이사를 끝까지 돌려본 건 아니다. 그건 스냅샷과 되돌릴 길을 확보한 별도 세션의 몫으로 남겨뒀다. 멋있게 “다 했다"고 적고 싶은 손을, 거기서 한 번 멈춘다.