트랜잭션이란?

  • 데이터베이스의 상태를 변화시키기 위해 수행되는 일련의 작업들을 하나의 단위로 묶은 것

  • 모든 작업이 성공해야 하며, 하나의 작업이라도 실패한다면 나머지 작업들도 수행되지 않아야 함

  • A 계좌에서 B계좌로 송금하는 계좌이체 예시

    1. A 잔고를 5000원 감소
    2. B 잔고를 5000원 증가
  • 1은 성공했는데 2가 실패한다면 A의 잔고만 감소했으므로 계좌이체 로직은 실패한 것

  • 따라서, B 잔고를 5000원 증가시키는 데 실패했다면 A 잔고도 원상태로 복구시켜야 함

  • 커밋(Commit) : 모든 작업이 성공하여 데이터베이스에 정상 반영하는 것

  • 롤백(Rollback) : 작업 중 하나라도 실패하여 모든 작업을 취소하는 것

  • 데이터를 저장할 때 단순히 파일에 저장할 수 있음에도 불구하고 데이터베이스에 저장하는 이유가 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문

트랜잭션 ACID

  • 원자성(Atomicity) : 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하거나 실패해야 함
  • 일관성(Consistency) : 트랜잭션이 완료된 후 데이터베이스는 일관된 상태를 유지해야 함
    • 예를 들어, 데이터베이스에서 정한 무결성 제약 조건을 만족해야 함
  • 격리성(Isolation) : 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리해야 함
    • 예를 들어, 동시에 같은 데이터를 수정하지 못하도록 해야 함.
    • 하나의 트랜잭션이 완료될 때까지 다른 트랜잭션은 대기해야 함
    • 격리성은 동시성과 관련된 성능 이슈로 인해 트랜잭션 격리 수준을 선택할 수 있음
  • 지속성(Durability) : 트랜잭션을 성공적으로 끝내면 그 결과가 항상 데이터베이스에 영구적으로 기록되어야 함
    • 예를 들어, 계좌이체 로직이 완료된 후 시스템에 장애가 생기더라도 송금 내역은 손실되지 않아야 함

+ Recent posts