ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION379 / 1500
데이터베이스난이도 중하5분 답변 목표 · 보강본

여러 사용자가 같은 문서를 편집합니다. updated_at 대신 증가하는 version으로 충돌을 검사하면 무엇이 달라지나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

버전 조건부 갱신은 자신이 읽은 상태가 여전히 현재일 때만 변경을 허용합니다. UPDATE의 WHERE에 ID와 예상 version을 넣고 성공 시 version을 증가시키며 영향 행 수로 충돌을 판정합니다.

동작 원리와 전제

두 사용자가 version 7을 읽었을 때 첫 저장이 8로 바꾸면 두 번째의 version 7 조건은 맞지 않습니다. 시각 기반 검사는 정밀도·같은 시각 갱신·서버 시계 문제를 가질 수 있습니다. 버전도 모든 쓰기 경로가 증가 규칙을 지켜야 하며 배치가 조건 없이 덮으면 보호가 깨집니다.

선택과 실패 처리

충돌 시 무조건 최신 값을 덮지 않고 사용자가 바꾼 필드와 원본 차이를 보여 주거나 재계산합니다. 독립 필드는 병합할 수 있어도 상태 전이·금액은 업무 규칙 검사가 필요합니다. 삭제 후 같은 ID를 재사용하면 버전이 되돌아가 옛 요청을 수용할 수 있어 식별자 수명도 관리합니다.

구체적인 사례와 검증

version 충돌을 자동 병합할 수 있는 예는 서로 다른 표시용 필드 수정이고, 자동 병합하기 어려운 예는 주문 취소와 결제 확정입니다. 두 변경이 같은 필드를 안 건드려도 상태 불변식이 연관될 수 있으므로 필드별 diff만으로 안전성을 확정하지 않습니다. UPDATE 영향 행 수가 0이면 미존재·권한 불가·버전 불일치 중 어떤 상태인지 안전하게 재조회합니다. 읽기 replica가 낡은 version을 줬다면 충돌이 자주 발생할 수 있어 조회 경로도 확인합니다. version 값은 수정 횟수의 통계나 서버 전체 순서가 아니라 해당 객체의 변경 전제를 식별하는 값이라는 범위를 유지합니다.

API에서는 ETag와 If-Match 같은 조건 요청으로 표현할 수 있습니다. DB 충돌과 권한 부족·미존재를 구분하되 비공개 데이터 존재를 과하게 노출하지 않습니다. 동시 편집·배치 변경·삭제·재시도를 시험해 충돌 감지뿐 아니라 사용자 복구 경험을 확인합니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • 핵심 구분: 버전 조건부 갱신은 자신이 읽은 상태가 여전히 현재일 때만 변경을 허용합니다.
  • 선택 조건: 충돌 시 무조건 최신 값을 덮지 않고 사용자가 바꾼 필드와 원본 차이를 보여 주거나 재계산합니다.
  • 검증 기준: API에서는 ETag와 If-Match 같은 조건 요청으로 표현할 수 있습니다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • 버전 충돌이 나면 최신 version으로 조건만 바꿔 강제 저장한다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

  • 이 버전 조건을 HTTP 수정 API로 공개하려면 ETag와 실패 응답을 어떻게 연결하나요?
  • 각 요청을 transaction으로 묶어도 읽기와 쓰기 사이의 경쟁이 남는다면 어떤 원자 조건을 추가하나요?
  • 여러 자동 작업자가 같은 기준 파일을 바꿀 때 텍스트 충돌과 의미 충돌을 어떻게 검증하나요?

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기