브랜칭: 커밋 & 롤백
코드처럼 저장소를 버전 관리합니다. 커밋은 포크를 불변 이미지로 고정하고, 브랜치는 그것에 이름을 붙이며, 체크아웃은 어느 커밋이든 새로운 쓰기 가능한 포크로 되돌립니다. 이 튜토리얼에서는 안정적인 상태를 커밋하고, 실제 PostgreSQL 테이블을 DROP하고, 몇 초 만에 모든 행을 복구합니다.
튜토리얼 보기
모델
커밋은 절대 변하지 않습니다. 마운트조차 거부합니다. 포크는 절대 기다리지 않습니다. 체크아웃은 거의 즉각적인 reflink 복제입니다. 전체 개념 모델은 브랜칭 가이드에 있습니다.
체크포인트 만들기
버전을 눈으로 확인할 수 있도록 마커 파일을 작성하고, 롤백을 의미 있게 만들기 위해 실제 데이터베이스를 사용합니다. customers 테이블에 세 행이 있습니다.
rdc term connect --machine <machine-name> --repository app:work --command 'echo v1 > version.txt && cat version.txt' 작업 포크에 상태의 버전 1을 작성하세요.
rdc term connect --machine <machine-name> --repository app:work --command 'docker exec db psql -U app -d app -c "SELECT count(*) FROM customers"' 포크에는 실제 PostgreSQL 데이터베이스도 실행 중입니다. customers 테이블에는 세 개의 행이 있습니다.
rdc repo commit --name app:work --message 'v1 baseline' --machine <machine-name> 작업 포크를 커밋하세요. 데이터베이스를 포함한 전체 repository 상태가 변경 불가능한 이름 있는 스냅샷으로 고정됩니다.
rdc repo branch --branch stable --name app:work 커밋을 가리키는 브랜치를 만드세요. 고정된 상태에 붙이는 알기 쉬운 이름입니다.
커밋은 파일과 PostgreSQL 데이터 디렉터리 모두를 캡처합니다. stable 브랜치가 이제 그 고정된 상태에 이름을 붙입니다.
계속 작업하기
rdc term connect --machine <machine-name> --repository app:work --command 'echo v2 > version.txt && cat version.txt' 계속 작업하세요. 포크는 변경되지만 커밋된 히스토리는 고정 상태를 유지합니다.
재난
위험한 변경으로 테이블이 DROP됩니다. 이후 쿼리가 피해가 실재함을 확인합니다.
rdc term connect --machine <machine-name> --repository app:work --command 'docker exec db psql -U app -d app -c "DROP TABLE customers"' 위험한 변경으로 작업 포크의 customers 테이블이 삭제됩니다.
rdc term connect --machine <machine-name> --repository app:work --command 'docker exec db psql -U app -d app -c "SELECT count(*) FROM customers"' 이제 테이블 조회가 실패합니다. relation "customers" does not exist. 작업 포크에서 데이터가 정말로 사라졌습니다.
ERROR: relation "customers" does not exist. 세 행이 사라졌습니다. 실제라면 등골이 오싹해지는 순간이지만, 여기서는 반전을 위한 준비 단계입니다.
rdc repo commit --name app:work --message 'v2 risky change' --machine <machine-name> 삭제된 테이블을 포함한 새 상태도 커밋하세요. 히스토리가 git log처럼 늘어납니다.
rdc repo log --name app:work --machine <machine-name> repo log로 커밋 히스토리를 탐색하세요. 메시지, 작성자, 부모를 확인할 수 있습니다.
히스토리는 실제로 일어난 일을 기록합니다. 망가진 상태도 포함해서: 위에 v2 risky change, 아래에 v1 baseline.
몇 초 만에 롤백
rdc repo checkout --ref stable --from app:work --tag rollback --machine <machine-name> stable 브랜치를 새로운 쓰기 가능 포크로 체크아웃하세요. copy-on-write 덕분에 거의 즉시 완료됩니다.
rdc repo up --name app:rollback --machine <machine-name> 롤백 포크를 시작하세요. 작업 포크와 나란히 실행됩니다.
rdc term connect --machine <machine-name> --repository app:rollback --command 'cat version.txt' 롤백 포크의 마커 파일을 읽으세요. 커밋된 그대로의 버전 1입니다.
rdc term connect --machine <machine-name> --repository app:rollback --command 'docker exec db psql -U app -d app -c "SELECT count(*) FROM customers"' 롤백 포크에서 customers 테이블을 조회하세요. 커밋된 그대로 세 개의 행이 있습니다. 롤백은 파일뿐 아니라 데이터베이스도 복원했습니다.
롤백 포크는 v1을 읽으며 customers 테이블이 세 행 모두 함께 복구됩니다. 롤백은 파일뿐 아니라 데이터베이스까지 복원했습니다. 아무것도 덮어쓰지 않았습니다. 작업 포크에는 여전히 버전 2가 남아 있으며, 영상에서 두 버전 모두 VS Code에서 열어 이를 증명합니다.
다음: 라이브 마이그레이션.