스테이징 & 커밋

DynoTable의 모든 편집은 DynamoDB에 닿기 전에 스테이징 영역을 거칩니다. 안전 걸쇠가 달린 git 스테이징 영역으로 생각하세요: 편집, 생성, 삭제가 검토 가능한 diff로 쌓이다가, 커밋할 때만 로 나갑니다.

사용자가 그러라고 하기 전까지는 테이블에 아무것도 기록되지 않습니다.

동작 방식

테이블에는 자체 스테이징 영역이 있으며, 그 테이블의 모든 뷰에서 공유됩니다. 항목 편집을 저장하거나, 행을 만들거나, 하나를 삭제하면 변경이 속성별 diff로 패널에 들어옵니다 — 추가, 제거, 변경된 속성이 나란히 표시됩니다. 그리드에서 영향받는 행은 작업별로 색이 입혀집니다:

  • 초록 — 새 항목(생성)
  • 주황 — 수정(변경된 셀 강조)
  • 빨강 — 삭제(취소선)

같은 테이블을 두 탭에서 열면 둘 다 같은 대기 중 변경을 보여 줍니다. 탭을 닫고 다시 열어도 스테이지는 그대로 남습니다. 탭을 닫아도 스테이징된 변경이 폐기되는 일은 절대 없습니다.

⌘⇧D로 패널을 토글하세요. 가장자리를 끌어 크기를 조절하세요.

속성별 diff 카드로 대기 중인 변경을 보여주는 스테이징 패널, 행별 및 일괄 커밋 포함.
속성별 diff 카드로 대기 중인 변경을 보여주는 스테이징 패널, 행별 및 일괄 커밋 포함.

변경 검토하기

각 diff 카드는 무엇이 바뀔지 정확히 보여 줍니다:

  • 스칼라는 빨강/초록 강조로 이전 → 새 값을 렌더링합니다.
  • 긴 문자열은 인라인 단어 수준 diff를 보여 줍니다.
  • Map과 List는 보기 좋게 출력된 JSON으로 렌더링됩니다(v1에서는 속성 전체 단위).

카드의 속성별 거부로 단일 속성을 원래 값으로 되돌리세요. 모든 속성을 거부하면 변경 전체가 폐기됩니다.

커밋하기

스테이징된 변경을 DynamoDB에 쓰려면 커밋하세요:

  • Commit N은 그 테이블의 모든 스테이징된 변경을 — 그 모든 탭에 걸쳐 — 보냅니다.
  • 이것만 커밋은 카드에서 단일 변경을 보냅니다.

커밋은 낙관적 잠금 조건과 함께 TransactWriteItems 배치로 나갑니다: 수정은 속성이 시작 시점의 값을 여전히 유지할 때만 성공하고, 생성은 항목이 아직 존재하지 않을 때만 성공하며, 삭제는 항목이 여전히 있을 때만 성공합니다. 큰 스테이지는 DynamoDB의 트랜잭션 한도 안에 들어가도록 자동으로 청크됩니다.

편집기의 저장 단축키가 여기서도 적용됩니다:

  • ⌘S — 스테이징(커밋 안 함)
  • ⌘⇧S — 저장 & 커밋
  • ⌘⇧X — 스테이징된 변경 전부 버리기(확인 후)

그리드 선택에서는 편집기를 열지 않고도 삭제를 스테이징할 수 있습니다:

  • ⌘⌫ — 선택한 행의 삭제를 스테이징
  • ⌘⇧⌫ — 선택한 행을 삭제하고 커밋

충돌

커밋이 낙관적 잠금을 쓰기 때문에, 사용자가 스테이징한 뒤 다른 사람이 커밋한 변경은 조용히 덮어쓰이지 않고 감지됩니다. 카드에 인라인 배너가 표시됩니다:

  • 드리프트 — 원격 항목이 사용자 모르게 바뀌었습니다. 원격으로 리베이스가 기준선을 새로 고쳐 다시 검토하게 하거나, 변경을 중단합니다.
  • 원격 삭제됨 — 항목이 더 이상 없습니다. 변경을 중단하세요.
  • 네트워크 사용 불가 — 커밋이 DynamoDB에 닿지 못했습니다. 재시도하거나 중단하세요.

커밋은 첫 번째 실패한 배치에서 멈춥니다 — 앞서 성공한 배치는 기록된 채로 남고, 나머지는 시도되지 않으며, 실패는 해결할 충돌로 드러납니다.

커밋을 막는 것

일부 상태는 읽기 전용이라 스테이징은 되지만 커밋은 안 됩니다 — 특히 만료되었거나 읽기 전용인 라이선스가 그렇습니다. 스테이징은 여전히 동작하며, 앱이 다시 활성 상태로 돌아오면 커밋도 잠금 해제됩니다.

업데이트됨