🔊ACID of Transaction

원자성(Atomicity)

: 한 트랜잭션 내에서 실행한 작업들은 하나의 작업으로 간주한다. 모두 성공 아니면 실패

일관성(Consistency)

: 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지한다.(==무결성 조건 항상 만족)

격리성(Isolation)

: 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리 해야한다.

지속성(Durability)

: 트랜잭션을 성공적으로 마치면 그 결과가 항상 저장되어야 한다.

🛎️ 격리성(Isolation) 이슈

격리성을 완전히 보장하기 위해 모든 트랜잭션을 순차적으로 실행한다면 동시성 처리 이슈가 발생합니다. 반대로 동시성을 높이기 위해 여러 트랜잭션을 병렬처리하게 되면 데이터의 무결성이 깨질 수 있습니다.

문제점

  1. Dirty Read

    ⇒ 한 트랜잭션(Transacion_1)이 데이터에 접근하여 특정 값을 수정후 커밋을 하지않아 적용이 안 된 상태에서 다른 트랜잭션(Transacion_2)이 같은 데이터를 읽는다면 어떻게 될 것인가? Transacion_2 은 변경된 값으로 읽게 될 것이지만 최초의 트랜잭션(Transacion_1)이 커밋을 하지않고 종료되면 문제가 생기게 됩니다.

  2. Non-Repeatable Read

    ⇒ 한 트랜잭션(Transacion_1)이 특정 데이터를 조회하여 로직을 수행하는 와중에 다른 트랜잭션(Transacion_2)이 해당 데이터를 삭제&변경하게 되면 기존의 트랜잭션(Transacion_1)이 로직 수행중 다시 특정 데이터를 조회하게 되면 변경되었거나 삭제된 데이터를 찾게 됩니다.

  3. Phantom Read

    ⇒ 위 2번 Non-Repeatable Read 상태에서 특정 데이터를 변경&삭제한 트랜잭션(Transacion_2)에서 롤백을 해버리면 기존 트랜잭션(Transacion_1)의 데이터는 꼬여버린다.

트랜잭션 격리 수준

: 트랜잭션의 격리성 이슈들로 인해 ANSI표준에서는 트랜잭션의 격리성과 동시 처리 성능 사이의 Trade-off를 두고 4단계 격리수준을 나눴습니다.