[Spring]Transaction

김피자·2023년 7월 11일
0

Spring

목록 보기
25/30

Transaction

트랜잭션이란 DB의 상태를 변화시키기 위해 수행하는 작업의 단위를 의미한다.

상태를 변화시킨다는 것 = SQL 질의어를 통해 DB에 접근하는 것
ex) SELECT INSERT DELETE UPDATE

에를 들어, 사용자 A가 B에게 만원을 송금하고자 한다면 아래와 같은 과정을 거칠 것이다.

  1. A의 계좌에서 만원을 차감한다 > UPDATE문으로 A의 잔액을 변경
  2. B의 계좌에 만원을 추가한다 > UPDATE문으로 B의 잔액을 변경

위 과정은 모두 하나의 작업으로 관리 되어야한다.
만약 그렇지 않다면 A의 계좌 잔액이 부족해 돈이 안 빠져나갔음에도 B계좌에 돈이 입금되는 상황이 발생할 것이다.

A 계좌에서 만원을 출금하는 UPDATE문과 B에게 만원을 입금하는 UPDATE문이 하나의 작업의 단위로 관리되어야 한다.

결과적으로 위 두 과정이 모두 성공적으로 완료되어야만 "하나의 작업"이 완료된 것으로 볼 수 있, 두 과정 중 하나라도 실패하면 모든 작업을 취소하고 이전 상태로 돌려 놓는 작업이 필요하다.

Commit과 Rollback

Commit

작업이 성공적으로 끝났고, DB가 다시 일관된 상태에 있을 때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산

Rollback

트랜잭션 처리가 비 정상적으로 종료되어 데이터 베이스의 일관성을 깨뜨렸을 때, 일부가 정상 처리 되었더라도 트랜잭션 원자성(모두 실행되던지 모두 실행되지 않던지)을 보장하기 위해 이 트랜잭션이 행한 모든 연산을 취소하는 연산


트랜잭션은 ACID 원자성, 일관성, 격리성, 지속성을 보장해야한다.

원자성, 일관성, 지속성을 보장하는데에는 큰 문제가 없지만 격리성을 완벽히 보장하려면 동시에 처리되는 트랜잭션을 거의 차례대로 실행해야하기 때문에 성능 문제가 발생하게 된다.

이러한 문제로 ANSI 표준에서는 트랜잭션의 격리 수준을 4단계로 나누어 정의한다.


격리 수준은 다음에 알아보자

출처
https://zzang9ha.tistory.com/381
https://bcp0109.tistory.com/322
https://yeonyeon.tistory.com/223

profile
제로부터시작하는코딩생활

0개의 댓글