Journey to CS/KNOU CS

[DBS] 트랜잭션 - Part3. 타임스탬프 기반 트랜잭션 동기화 규약

Cordilog 2025. 6. 10. 22:40

🕒 타임스탬프 기반 규약이란?

타임스탬프 기반 규약은 데이터베이스 시스템에서 여러 트랜잭션이 동시에 실행될 때 충돌 없이 안전하게 작동하도록 해주는 규칙이다.
이 규약은 각 트랜잭션과 데이터 항목에 타임스탬프를 부여하고, 이 타임스탬프를 기준으로 읽기(Read)나 쓰기(Write) 연산의 허용 여부를 판단한다.
 

타임스탬프 설정

  • TS(Ti): 트랜잭션 Ti가 시작될 때 부여받는 타임스탬프. 값이 작을수록 먼저 시작된 트랜잭션이다.
  • 각 데이터 항목 A는 다음과 같은 정보를 가진다:
    • R-TS(A): 지금까지 A를 읽은 트랜잭션 중 가장 큰 타임스탬프 (가장 최근에 A를 읽은 트랜잭션의 TS)
    • W-TS(A): 지금까지 A를 쓴 트랜잭션 중 가장 큰 타임스탬프 (가장 최근에 A를 쓴 트랜잭션의 TS)

Read(A) 규칙

트랜잭션 Ti가 데이터 항목 A를 읽으려고 할 때:
 
▪️TS(Ti) < W-TS(A)인 상황이라면, 

  • Ti는 A에 쓰기를 한 가장 최근 트랜잭션보다 먼저 시작되었는데, 지금 A를 읽으려 하는 상황이다.
  • 이 경우, Ti가 시작된 후에 A의 값이 변경된 것이므로, Ti는 변경된 값을 읽게 되어 일관성이 깨질 수 있다.
    • Ti는 A를 쓴 가장 최근 트랜잭션보다 이전에 시작되었지만,
    • 실제로는 Ti가 A를 읽기 전에 어떤 트랜잭션이 A를 이미 변경해버림.
    • 따라서 Ti는 타임스탬프 순서상 자신이 시작된 이후에는 A가 바뀌지 않았을 거라고 믿고 읽기를 시도하는데,
    • 이미 A가 바뀌었기 때문에, Ti가 그걸 모른 채 새로 바뀐 값을 읽으면, 마치 타임스탬프 순서를 어긴 것처럼 보이게 되어 일관성이 깨진다.
    • 논리적 시간 순서를 유지하려면 Ti를 중단시키고 롤백하는 수밖에 없다.
  • 읽기 거절, 트랜잭션 Ti는 롤백(Rollback)

▪️그 외의 경우 :

  • 읽기 허용.
  • R-TS(A)를 기존 R-TS(A)와 TS(Ti) 중 최대값으로 갱신.

Write(A)의 규칙

트랜잭션 Ti가 데이터 항목 A를 쓰려고 할 때:
 
▪️TS(Ti) < R-TS(A)인 상황이라면,

  • A를 Ti보다 나중에 시작된 트랜잭션이 이미 읽었다는 뜻이다.
  • Ti가 지금 A를 바꾸면, 먼저 읽힌 데이터가 나중에 수정되는 모순이 생길 수 있다.
    • 논리적인 시간 순서상, Ti가 먼저 실행된 것처럼 보여야 하기 때문에,
    • A를 읽은 다른 트랜잭션(더 나중에 시작된 트랜잭션)은 Ti가 수정한 A의 값을 읽었어야 일관성이 맞는다.
    • 하지만 실제로는 그 트랜잭션은 Ti의 Write 이전에 A를 읽었다.
    • → 즉, 미래에 일어날 Write를 반영하지 못한 상태로 읽은 셈이 된다.
    • 이 상황은 마치 "데이터가 수정되기 전에 이미 누가 읽어버린" 모순을 일으킨다.
    • 논리적 시간 순서를 유지하려면 Ti를 중단시키고 롤백하는 수밖에 없다.
  • 쓰기 거절, 트랜잭션 Ti는 롤백(Rollback)

▪️TS(Ti) < W-TS(A)인 상황이라면, 

  • A는 Ti보다 나중에 시작된 트랜잭션에 의해 이미 수정됐다.
  • Ti가 지금 A를 쓰면 값이 과거로 되돌아가는 꼴이 되기 때문에 안 된다.
    • 타임스탬프 순서상 Ti의 Write가 먼저 일어난 것처럼 보여야 하지만,
    • 실제로는 더 나중에 시작된 트랜잭션이 먼저 A를 바꿔놓은 상태다.
    • 만약 Ti의 Write를 허용하면,
      → 결과적으로 A의 값이 "더 나중에 시작된 트랜잭션의 결과"에서 "더 예전 트랜잭션의 결과"로 되돌아가는 것처럼 보이기 때문에 일관성이 깨진다.
    • 이런 모순을 피하기 위해, Ti의 쓰기 연산은 거절되거나 무시되고, 보통은 트랜잭션 Ti 전체가 롤백된다.
  • 쓰기 거절, 트랜잭션 Ti는 롤백 또는 무시

▪️ 그 외의 경우 (TS(Ti) ≥ R-TS(A) and TS(Ti) ≥ W-TS(A)) :

  • 쓰기 허용.
  • W-TS(A)를 TS(Ti)로 갱신.