Skip to content

Latest commit

 

History

History
54 lines (45 loc) · 2.97 KB

Transaction.md

File metadata and controls

54 lines (45 loc) · 2.97 KB

트랜잭션

💡 트랜잭션

데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위

  • 하나의 트랜잭션은 Commit 되거나 Rollback 된다.
    • Commit :
      • 트랜잭션에 대한 모든 작업이 성공적으로 끝났을 때, 트랜잭션이 행한 모든 연산을 DB에 반영한다.
    • Rollback :
      • 하나의 트랜잭션 처리가 비정상적으로 종료되었을 때, 이 트랜잭션이 행한 모든 연산을 취소(Undo)한다.

💡 트랜잭션 ACID

데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어

  • Atomicity(원자성)
    : All or Noting
    : 트랜잭션 내 모든 연산은 모두 수행되거나, 아니면 모두 수행되지 않아야 한다.
  • Consistency(일관성)
    : 어떤 트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태를 가졌다면, 수행된 후에도 일관된 상태를 가진다
  • Isolation(고립성)
    : 각각의 트랜잭션은 서로 간섭없이 독립적으로 수행되어야 한다.
  • Durability(내구성)
    : 트랜잭션이 정상적으로 종료된 다음에는 데이터베이스에 작업의 결과가 영구적으로 저장되어야 한다.

💡 트랜잭션 격리 수준

트랜잭션 격리수준은 Isolation(고립도)와 성능의 트레이드 오프를 조절합니다.

  • READ UNCOMMITTED
    : 다른 트랜잭션에서 커밋되지 않은 데이터도 참조할 수 있다.

  • READ COMMITTED
    : 다른 트랜잭션에서 커밋된 데이터만 참조할 수 있다.

  • REPEATABLE READ
    : 트랜잭션에 진입하기 이전에 커밋된 데이터만 참조할 수 있다.
    : 트랜잭션 진입 전에 스냅샷을 떠놓고 그 스냅샷만을 참조한다.

  • SERIALIZABLE
    : 트랜잭션에 진입하면 락을 걸어 다른 트랜잭션이 접근하지 못하게 한다.

  • DEFAULT
    : 사용하는 DB 기본 설정을 따른다.
    : (Oracle 은 READ_COMMITED, Mysql InnoDB 는 REPEATABLE_READ 가 Default)

  • 낮은 단계의 Isolation Level 이용시 발생하는 현상

    • Dirty Read
      • 어떤 트랜잭션에서 아직 실행이 끝난지 않은 다른 트랜잭션의 변경 사항을 보게 되는 되는 현상
    • Non-Repeatable Read
      • 한 트랜잭션에서 같은 쿼리를 두 번 수행할 때
      • 그 사이에 다른 트랜잭션이 기존 레코드를 수정 또는 삭제되어, 두 쿼리의 결과가 상이하게 나타나는 비 일관성 현상
    • Phantom Read
      • 한 트랜잭션에서 같은 쿼리를 두 번 수행할 때
      • 그 사이에 다른 트랜잭션이 새로운 레코드를 삽입하여, 첫 번째 쿼리에서 없던 레코드가 두 번째 쿼리에서 나타나는 현상