동시성 제어의 출발점
여러 트랜잭션이 같은 데이터를 건드려도 일관성은 깨지지 않아야 합니다.
DBMS는 이 문제를 크게 두 방식으로 다룹니다. 잠금 기반은 충돌을 먼저 막고, MVCC는 버전을 나눠 읽기와 쓰기가 서로 다른 시점을 보게 합니다.
비교 축
잠금 기반
충돌이 보이면 먼저 멈춰 세웁니다
같은 행이나 범위를 잠가서, 동시에 바꾸려는 작업을 직렬화합니다.
MVCC
같은 데이터의 다른 버전을 보게 합니다
읽는 쪽은 스냅샷을 보고, 쓰는 쪽은 새 버전을 만들어 충돌 범위를 줄입니다.
충돌 처리
수정 전에 잠금을 잡아 충돌 자체를 늦춥니다.

다른 트랜잭션은 잠금이 풀릴 때까지 대기하므로 흐름은 단순하지만, 기다림이 생깁니다.

수정 시 새 버전을 만들고, 읽기는 자기 스냅샷을 유지합니다.

읽기와 쓰기가 같은 버전을 놓고 싸우지 않도록 분리하므로, 읽기 차단이 크게 줄어듭니다.

읽기와 쓰기
읽기-쓰기 충돌을 잠금으로 직접 관리합니다.

SELECT ... FOR UPDATE 같은 방식이 대표적이며, 정확한 대신 데드락과 대기 시간을 함께 관리해야 합니다.

읽기는 과거 버전, 쓰기는 최신 버전으로 진행합니다.

대부분의 읽기 작업은 막히지 않지만, 오래된 버전을 보관하고 정리하는 비용이 추가됩니다.

운영상 의미
충돌이 잦거나 같은 자원을 즉시 보호해야 할 때 유리합니다.

좌석 예약, 재고 차감처럼 틀린 중복 처리보다 대기가 더 안전한 작업에 잘 맞습니다.

읽기가 많고 충돌은 드문 서비스에서 동시성을 높이기 좋습니다.

웹 서비스처럼 조회 비중이 크면 성능 이점이 크지만, 버전 청소와 갱신 충돌 처리는 별도로 신경 써야 합니다.