스테이징 & 커밋
DynoTable의 모든 편집은 DynamoDB에 닿기 전에 스테이징 영역을 거칩니다. 안전 걸쇠가 달린 git 스테이징 영역으로 생각하세요: 편집, 생성, 삭제가 검토 가능한 diff로 쌓이다가, 커밋할 때만 로 나갑니다.
사용자가 그러라고 하기 전까지는 테이블에 아무것도 기록되지 않습니다.
동작 방식
각 테이블에는 자체 스테이징 영역이 있으며, 그 테이블의 모든 뷰에서 공유됩니다. 항목 편집을 저장하거나, 행을 만들거나, 하나를 삭제하면 변경이 속성별 diff로 패널에 들어옵니다 — 추가, 제거, 변경된 속성이 나란히 표시됩니다. 그리드에서 영향받는 행은 작업별로 색이 입혀집니다:
- 초록 — 새 항목(생성)
- 주황 — 수정(변경된 셀 강조)
- 빨강 — 삭제(취소선)
같은 테이블을 두 탭에서 열면 둘 다 같은 대기 중 변경을 보여 줍니다. 탭을 닫고 다시 열어도 스테이지는 그대로 남습니다. 탭을 닫아도 스테이징된 변경이 폐기되는 일은 절대 없습니다.
⌘⇧D로 패널을 토글하세요. 가장자리를 끌어 크기를 조절하세요.

변경 검토하기
각 diff 카드는 무엇이 바뀔지 정확히 보여 줍니다:
- 스칼라는 빨강/초록 강조로 이전 → 새 값을 렌더링합니다.
- 긴 문자열은 인라인 단어 수준 diff를 보여 줍니다.
- Map과 List는 보기 좋게 출력된 JSON으로 렌더링됩니다(v1에서는 속성 전체 단위).
카드의 속성별 거부로 단일 속성을 원래 값으로 되돌리세요. 모든 속성을 거부하면 변경 전체가 폐기됩니다.
커밋하기
스테이징된 변경을 DynamoDB에 쓰려면 커밋하세요:
- Commit N은 그 테이블의 모든 스테이징된 변경을 — 그 모든 탭에 걸쳐 — 보냅니다.
- 이것만 커밋은 카드에서 단일 변경을 보냅니다.
커밋은 낙관적 잠금 조건과 함께 TransactWriteItems 배치로 나갑니다: 수정은
속성이 시작 시점의 값을 여전히 유지할 때만 성공하고, 생성은 항목이 아직 존재하지
않을 때만 성공하며, 삭제는 항목이 여전히 있을 때만 성공합니다. 큰 스테이지는
DynamoDB의 트랜잭션 한도 안에 들어가도록 자동으로 청크됩니다.
편집기의 저장 단축키가 여기서도 적용됩니다:
- ⌘S — 스테이징(커밋 안 함)
- ⌘⇧S — 저장 & 커밋
- ⌘⇧X — 스테이징된 변경 전부 버리기(확인 후)
그리드 선택에서는 편집기를 열지 않고도 삭제를 스테이징할 수 있습니다:
- ⌘⌫ — 선택한 행의 삭제를 스테이징
- ⌘⇧⌫ — 선택한 행을 삭제하고 커밋
충돌
커밋이 낙관적 잠금을 쓰기 때문에, 사용자가 스테이징한 뒤 다른 사람이 커밋한 변경은 조용히 덮어쓰이지 않고 감지됩니다. 카드에 인라인 배너가 표시됩니다:
- 드리프트 — 원격 항목이 사용자 모르게 바뀌었습니다. 원격으로 리베이스가 기준선을 새로 고쳐 다시 검토하게 하거나, 변경을 중단합니다.
- 원격 삭제됨 — 항목이 더 이상 없습니다. 변경을 중단하세요.
- 네트워크 사용 불가 — 커밋이 DynamoDB에 닿지 못했습니다. 재시도하거나 중단하세요.
커밋은 첫 번째 실패한 배치에서 멈춥니다 — 앞서 성공한 배치는 기록된 채로 남고, 나머지는 시도되지 않으며, 실패는 해결할 충돌로 드러납니다.
커밋을 막는 것
일부 상태는 읽기 전용이라 스테이징은 되지만 커밋은 안 됩니다 — 특히 만료되었거나 읽기 전용인 라이선스가 그렇습니다. 스테이징은 여전히 동작하며, 앱이 다시 활성 상태로 돌아오면 커밋도 잠금 해제됩니다.


