트랜잭션(Transaction)이란?

데이터베이스의 상태를 변화시키기위해 수행하는 최소 작업의 단위.(CRUD)

데이터를 조작하는 작업의 단위.

트랜잭션의 특징

⇒ 하지만 완벽히 지킬수 없음. 동시성이 매우 떨어지기 때문!

트랜잭션의 격리수준(isolation)

  1. READ UNCOMMITTED - 커밋되지 않는 읽기

    트랜잭션 A가 특정 컬럼 데이터를 변경하고 있는중에 (커밋 전) 트랜잭션 B가 read하면 A가 변경한 데이터를 읽어온다.

  2. READ COMMITTED - 커밋된 읽기

    oracle의 기본 격리수준. 트랜잭션 A가 특정 컬럼 데이터를 변경하고 있는중에 트랜잭션 B가 read하면 트랜잭션 A가 변경하기 전 데이터를 읽어온다(undo영역에서). A가 변경후 커밋하게 되면 변경된 데이터를 읽어온다.

  3. REPEATABLE READ - 반복 가능한 읽기

    mysql 기본 격리수준. 항상 일관성 있는 데이터 읽기를 보장. 다른 트랜잭션에서 데이터를 조작해도 영향을 받지 않음. 하나의 트랜잭션이 읽은 로우를 다른 트랜잭션이 수정하는 것을 막아주지만, 새로운 로우를 추가하는 것은 제한하지 않는다.

  4. SERIALIZABLE - 직렬화 기능

    가장 높은 격리수준. 트랜잭션이 완료될 때 까지 selecte문장이 사용되는 모든 데이터에 공유락이 걸리므로 그 영역에 대한 수정/입력 불가.

Lock으로 이해하는 Transaction의 Isolation Level

[Spring] @Transactional 속성 정리

트랜잭션 전파속성(propagation)