동시성 문제의 출발점

하나의 UPDATE도 여러 내부 단계로 나뉘기 때문에, 그 사이에 다른 트랜잭션이 끼어들 수 있습니다.

읽기와 쓰기가 원자적으로 보이더라도 실제 실행은 짧은 작업 구간의 연속입니다. 같은 행을 다루는 트랜잭션이 이 구간을 나눠 갖기 시작하면 기준 시점이 어긋나고 일관성이 흔들립니다.

한 트랜잭션 안에서도 실행은 이렇게 흘러갑니다
실행 방식
결과
직렬 실행 T1이 끝난 뒤 T2가 실행
T1
읽기와 계산
같은 행의 현재 값을 기준으로 작업을 시작합니다.
T1
쓰기
변경 내용을 먼저 반영합니다.
T2
그다음 시작
이미 반영된 최신 상태를 보고 계산합니다.
T2
안전하게 종료
중간 상태가 섞이지 않아 결과가 예측 가능합니다.
한 번에 하나씩 기준이 이어집니다.

느릴 수는 있어도 각 트랜잭션이 최신 상태를 이어받아 처리합니다.

중간 개입 T1 도중에 T2가 끼어듦
T1
먼저 읽고 계산
아직 쓰기 전이라 변경 결과는 밖에 보이지 않습니다.
T2
같은 행을 다시 읽음
T1과 다른 타이밍 기준으로 자기 계산을 시작합니다.
T1
뒤늦게 쓰기
자신이 본 값을 기준으로 결과를 반영합니다.
T2
마지막 쓰기가 앞선 결과를 덮을 수 있음
이 지점부터 갱신 분실, 오손 읽기 같은 동시성 문제가 시작됩니다.
같은 데이터를 서로 다른 시점 기준으로 처리합니다.

병행성은 높지만, 제어가 없으면 최종 값이 직렬 실행과 달라질 수 있습니다.

핵심 목표
병행 실행은 유지하되, 최종 결과는 마치 직렬 실행한 것처럼 같아 보여야 합니다.

즉, 처리량을 확보하면서도 데이터의 기준 시점과 일관성은 무너지지 않게 만드는 것이 동시성 제어입니다.