본문 바로가기

SSAFY TechTalk Study

Day11 : Transaction과 Isolation Level

 

목차

  1. Transaction
  2. Transaction Isolation Level

 

 

1. Transaction

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


사용자는 트랜잭션을 통해 데이터베이스에 안정성과 신뢰성을 얻을 수 있다.

명령을(연산) 끝 마칠 때까지 수행 내역을 로그에 저장 (redo, udno log)

 

 

❗ ACID

Atomicity(원자성**)** : 트랜잭션의 연산은 데이터 베이스에 모두 반영되던지 둘 중 하나이다.

Rollback : 1~4번까지 작업이 있는데 수행 중에3번이 실패했다면 1,2번을 없던 일로 되돌려야 한다.

Commit : 1~4번까지 작업이 있을 때 모두 성공적으로 완료되면 수정된 내용을 DB에 반영

Consistency(일관성) : 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 DB상태로 변환된다. 트리거를 통해 일괄 적으로 모든 DB에 적용

Trigger : 데이터 조작 언어(DML)의 데이터 상태의 관리를 자동화하는 데 사용된다.

Isolation(격리성) : 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른트랜잭션의 연산이 끼어들 수 없다.

Durability(지속성) : 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장 나더라도**.** Redo, undo 연산을 통해 데이터베이스를 복구 시킴

Redo(재실행) log: 가장 최근에 저장한 DB 복사본을 가져온 후 로그를 DB에 재반영

Undo(취소) log : 수행을 실패해 이전의 상태로 되돌린다.

 

 

 

 

 

2. Transaction Isolation Level

한 트랜잭션이 다른 트랜잭션에서 변경한 데이터를 볼 수 있도록 해줄지 말지를 결정하는 것.



격리 수준은 왜 생겼을까?

1. Dirty Read ((오손 데이터 읽기)

한 트랜잭션(T1)이 데이터 A에 접근해서 B로 변경했는데 커밋을 하지 않았다. T2가 A에 접근하면 B라는 결과를 받는다 T1이 커밋을 하지 않고 종료하게 된다면 T2가 가진 데이터가 꼬이는 문제가 발생한다.

2. Non-Repeatable Read (반복 불가능 데이터 읽기)

T1이 데이터를 ReadRead 하고 있다 이때 T2가 데이터에 접근해서 삭제(변경)하고 커밋을 진행할 경우 T1은 다시 데이터를 Read할 때 사라진 데이터를 찾게 된다.

3. Phantom Read (유령 데이터)

T1이 조건을 걸어 데이터를 검색해서 결과를 얻었는데 T2가 접근해 해당 조건의 데이터 일부를 삭제 추가 연산을 했을 때 ,, 아직 끝나지 않은 T1이 다시 한번 해당 조건으로 데이터를 조회하면 변경된 데이터가 누락된다. 없던 일처럼 rollback을 진행하면 데이터가 꼬이는 문제가 생김.


- Level 별 정리  

 

LEVEL 1 Read Uncommitted

한 트랜잭션에서 커밋하지 않은 데이터에 다른 트랜잭션이 접근 가능하다.

즉, 커밋하지 않은 데이터를 읽을 수 있다.

모든 문제점이 발생할 수 있지만 동시 처리 성능이 가장 높다.

발생 문제점 : Dirty Read, Non-Repeatable Read, Phantom Read

 

 

LEVEL 2 Read Committed

커밋이 완료된 데이터만 읽을 수 있다.

Read Uncommitted 수준보다 동시 처리 성능은 떨어진다. 데이베이스들은 보통 Read Committed를 디폴트 수준으로 지정한다.

발생 문제점 : Non-Repeatable Read, Phantom Read

 

 

LEVEL 3 Repeatable Read

트랜잭션 내에서 한번 조회한 데이터를 반복해서 조회해도 같은 데이터가 조회

발생 문제점 : Phantom Read

 

LEVEL 4 Serializable 

 

가장 엄격한 격리 수준

모든 문제점을 해결 가능하지만 그 대신 동시 처리 성능은 급격히 떨어질 수 있다.

'SSAFY TechTalk Study' 카테고리의 다른 글

Day13 : HTTP Keep Alive  (0) 2021.09.10
Day 12 : UI와 UX  (0) 2021.09.05
Day10 : OSI 7 layer  (0) 2021.08.26
Day9 : 리액트를 왜 사용하는 것인가?  (0) 2021.08.24
Day8 : 의존성 주입(Dependency Injection)  (0) 2021.08.20