메인 콘텐츠로 건너뛰기 탐색으로 건너뛰기 푸터로 건너뛰기
기간 한정 디자인 파트너 프로그램. BUSINESS 플랜 평생 무료.

브랜칭: 커밋 & 롤백

저장소 상태를 불변 커밋으로 고정하고, 브랜치로 이름을 붙이고, 어느 커밋이든 쓰기 가능한 포크로 체크아웃합니다.

브랜칭: 커밋 & 롤백

코드처럼 저장소를 버전 관리합니다. 커밋은 포크를 불변 이미지로 고정하고, 브랜치는 그것에 이름을 붙이며, 체크아웃은 어느 커밋이든 새로운 쓰기 가능한 포크로 되돌립니다. 이 튜토리얼에서는 안정적인 상태를 커밋하고, 실제 PostgreSQL 테이블을 DROP하고, 몇 초 만에 모든 행을 복구합니다.

튜토리얼 보기

모델

Commits, branches, checkout

커밋은 절대 변하지 않습니다. 마운트조차 거부합니다. 포크는 절대 기다리지 않습니다. 체크아웃은 거의 즉각적인 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에서 열어 이를 증명합니다.


다음: 라이브 마이그레이션.