caffeine-library / pro-spring-5

🌱 전문가를 위한 스프링5를 읽는 스터디
5 stars 0 forks source link

[question] 트랜잭션 격리 원리 / 데드락 / 트랜잭션 격리 수준 #71

Closed JasonYoo1995 closed 2 years ago

JasonYoo1995 commented 2 years ago

질문

트랜잭션 격리 원리 / 데드락 / 트랜잭션 격리 수준

연관 챕터

66

JasonYoo1995 commented 2 years ago

트랜잭션 격리(Transaction Isolation)

데드락의 예시

트랜잭션 격리 수준

  1. 트랜잭션 1을 시작한다.
  2. 트랜잭션 2를 시작한다.
  3. 트랜잭션 1이 ID = 1, VAL = 'MIN'인 데이터의 VAL을 KIM으로 변경했다.
  4. 트랜잭션 2가 ID = 1을 조회한다. VAL = 'KIM'이 조회되었다.
  5. 트랜잭션 1, 2가 종료된다.

2. READ_COMMITED (Level 1)

  1. 트랜잭션 1을 시작한다.
  2. 트랜잭션 1이 ID = 1인 데이터의 VALUE를 KIM으로 변경했다.
  3. 트랜잭션 2가 시작되었다.
  4. 트랜잭션 2가 ID = 1인 데이터를 조회한다. MIN이 검색된다.
  5. 트랜잭션 1이 커밋을 하고 종료한다.
  6. 트랜잭션 2가 ID = 1인 데이터를 조회한다. KIM이 검색된다.
  7. 트랜잭션 2가 커밋을 하고 종료한다.

3. REPEATABLE_READ (Level 2)

  1. 트랜잭션 1을 시작한다.
  2. 트랜잭션 1이 ID = 1인 데이터를 조회한다.
  3. 트랜잭션 2가 시작되었다.
  4. 트랜잭션 2가 ID = 1인 데이터를 KIM으로 변경한다.
  5. 트랜잭션 1이 ID = 1인 데이터를 조회한다. 트랜잭션 2의 변경 내역이 보이지 않는다.
  6. 트랜잭션 2가 ID = 2인 데이터를 삽입 후 commit하여 트랜잭션을 종료한다.
  7. 트랜잭션 1이 ID = 2인 데이터를 조회한다. 데이터가 정상적으로 확인된다.
  8. 트랜잭션 1이 종료된다.

4. SERIALIZABLE (Level 3)