Database

트랜잭션의 메커니즘

TedDev 2024. 10. 28. 18:06
728x90

트랜잭션이 필요한 이유

트랜잭션이 없다면 예를 들어 계좌이체와 같은 중요한 작업 도중 오류가 발생한다면 다음과 같은 문제들이 생길 수 있다.

  • 출금은 되었으나 입금이 안 된 경우
  • 입금은 되었으나 출금이 안 된 경우
  • 둘 다 처리되지 않은 경우 (데이터 불일치)

트랜잭션은 이러한 중간 상태를 방지하고 작업을 원자성(Atomicity) 있게 처리한다. 즉, 모든 작업이 성공하거나 모두 실패하도록 보장해 데이터를 일관된 상태로 유지한다.

트랜잭션의 동작 원리

트랜잭션의 주요 속성 (ACID)

  • Atomicity(원자성) : 모든 작업이 완료되거나 전혀 수행되지 않아야 한다
  • Consistency(일관성) : 트랜잭션이 끝난 후에도 데이터는 항상 일관된 상태여야 한다
  • Isolation(고립성) : 여러 트랜잭션이 동시에 수행될 때 서로의 작업에 영향을 주지 않도록 해야 한다
  • Durability(지속성) : 트랜잭션이 완료된 후에는 시스템 오류가 발생하더라도 데이터는 손실되지 않는다

DB 처리 흐름

  1. 쿼리 실행 : 트랜잭션은 특정 계좌에서 출금을 진행하고 다른 계좌에 입금하는 작업을 수행한다.
  2. 캐시 확인 : DB는 캐시에서 필요한 데이터를 조회한다. 캐시에 없다면 데이터 파일에서 직접 가져온다.
  3. 로그 기록 (Write-Ahead Logging)
    • 데이터가 변경되기 전에 로그에 이전 값과 변경 예정 값을 기록한다
    • 로그는 나중에 오류가 발생할 경우 데이터를 복구(rollback) 하는 데 사용된다
  4. 데이터 업데이트: 로그가 기록된 후 데이터를 캐시와 파일에 반영한다

 

오류와 복구 메커니즘

트랜잭션 도중 네트워크 장애나 전원 차단 등의 이유로 시스템이 비정상적으로 종료될 수 있다. 이때 데이터의 무결성을 보장하기 위해 다음과 같은 복구 메커니즘이 사용된다.

  1. 로그 기반 복구
    • 로그에 저장된 데이터 변경 기록을 통해 작업을 롤백(rollback) 하여 이전 상태로 되돌린다
    • 트랜잭션이 완료되지 않았다면 모든 변경 사항을 취소해 중간 상태를 방지한다
  2. 재시작 시 데이터 복구
    • 전원 장애 등으로 시스템이 중단된 경우 트랜잭션 로그를 읽어 시스템을 마지막 일관된 상태로 복구한다

 

728x90

동시성 제어와 Lock(락) 메커니즘

동시성 문제

여러 사용자가 동일한 데이터를 동시에 접근해 수정하면 다음과 같은 문제가 발생할 수 있다

  • Dirty Read : 다른 트랜잭션이 완료되지 않은 데이터를 읽는 문제
  • Lost Update : 두 트랜잭션이 동시에 업데이트를 시도해 하나의 작업이 유실되는 문제
  • Inconsistent Read : 한 트랜잭션이 여러 번 데이터를 조회할 때 중간에 다른 트랜잭션이 데이터를 수정해 불일치가 발생하는 문제

락 메커니즘의 사용

  • 트랜잭션이 특정 데이터에 락(Lock) 을 걸어 다른 트랜잭션이 동시에 접근하지 못하도록 한다
  • 락의 종류
    • 공유 락(Shared Lock) : 읽기 전용 작업에 사용, 여러 트랜잭션이 동시에 접근 가능
    • 배타 락(Exclusive Lock) : 쓰기 작업에 사용, 다른 트랜잭션의 접근을 차단

락을 통한 데이터 일관성 보장

예를 들어, 한 사용자가 계좌 A에서 10,000원을 출금하고 계좌 B에 입금하는 트랜잭션을 수행하는 동안 다른 트랜잭션이 계좌 A 또는 B에 접근하지 못하도록 락을 걸어준다. 이를 통해 데이터의 무결성을 유지할 수 있다.

 

트랜잭션의 최종 결과와 커밋(Commit)

  • 커밋(Commit) : 트랜잭션이 성공적으로 완료된 후, 데이터베이스에 모든 변경 사항을 영구적으로 반영한다
  • 롤백(Rollback) : 트랜잭션 도중 오류가 발생하면 로그를 사용해 변경된 데이터를 이전 상태로 되돌린다

트랜잭션이 끝날 때 데이터의 최종 상태를 검증해 사용자가 기대한 결과가 정확히 반영되었는지 확인해야 한다.

 

정리

트랜잭션은 데이터베이스 시스템에서 데이터 일관성, 무결성, 고립성을 유지하는 중요한 메커니즘이다. 로그 기록과 복구 시스템, 락을 통한 동시성 제어를 통해 시스템 오류와 충돌을 방지하며 안정적인 데이터 처리를 보장한다.

트랜잭션이 없으면 중간 상태의 데이터가 남아 데이터 불일치가 발생할 수 있으므로, 모든 트랜잭션은 ACID 속성을 준수해야 합니다. 특히, 주문, 계좌이체와 같은 중요한 작업에서는 트랜잭션이 필수적이다.

반응형

'Database' 카테고리의 다른 글

DB Replication  (1) 2024.12.09
MySQL 옵티마이저 실행계획 분석  (0) 2024.12.09
CDC(Change Data Capture)  (1) 2024.11.28
Sharding, Clustering, Replication  (0) 2024.10.23
데이터베이스 인덱스에 대한 이해와 활용  (2) 2024.09.05