🕒 타임스탬프 기반 규약이란?
타임스탬프 기반 규약은 데이터베이스 시스템에서 여러 트랜잭션이 동시에 실행될 때 충돌 없이 안전하게 작동하도록 해주는 규칙이다.
이 규약은 각 트랜잭션과 데이터 항목에 타임스탬프를 부여하고, 이 타임스탬프를 기준으로 읽기(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)로 갱신.

'Journey to CS > KNOU CS' 카테고리의 다른 글
| [자료구조] 스택(stack)을 이용하여 중위 표기식을 후위 표기식으로 변환해보자 (0) | 2025.09.12 |
|---|---|
| [운영체제] 가상메모리와 주소 변환 - Part4. 페이징/세그먼테이션 혼용기법 (0) | 2025.06.10 |
| [운영체제] 가상메모리와 주소 변환 - Part3. 연관/직접사상의 동적 주소변환 과정 (0) | 2025.06.10 |
| [운영체제] 가상메모리와 주소 변환 - Part2. 페이징 기법과 데이터 참조 과정 (0) | 2025.06.10 |
| [DBS] 트랜잭션 - Part 2. 회복 가능한 스케줄과 비연쇄적 스케줄 (0) | 2025.06.09 |