본문 바로가기

데이터베이스

Transaction

Transaction이란

트랜잭션은 질의어를 통해 데이터베이스에 접근하여 일을 수행하는 작업의 단위이다. 이 작업의 단위라는 것은 서비스에 맞게 설계된대로 개발자가 정한 기준에 따라 정해진다. 즉 질의어 한문장이아니라 상황에 따라 여러문장으로 이루어질  수 있다.

 

 

트랜잭션의 특징

  • 원자성(가장 중요)

하나의 트랜잭션은 결국 성공하여 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되어서는 안된다. 여러 SQL문으로 이루어진 작업의 단위 트랜잭션을 중간단계 까지만 반영하면, 개발한 사람의 의도대로 실행되지 않아 오작동할 수 있다.

 

  • 일관성

트랜잭션의 작업 처리 결과는 항상 일관성 있어야한다.

 

  • 독립성

현재 수행중인 트랜잭션이 완료될 떄까지 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션들이 접근할 수 없다. 

 

  • 지속성

트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영한 수행 결과는 어떠한 경우에도 손실되지 않고 영구적이어야 함

 

 

이러한 트랜잭션이 연산을 수행할 때 크게 5가지 상태가 존재한다. 

 

https://beginnersbook.com/2018/12/dbms-transaction-states/

  • 활동 상태: 트랜잭션이 수행을 시작하여 현재 수행 중인 상태
  • 부분 완료 상태: 마지막 연산이 실행된 직후의 상태로, 연산은 모두 처리한 상태이지만 최종 결과를 데이터베이스에 아직 반영하지 않은 상태
  • 완료 상태: 트랜잭션이 성공적으로 완료되어 COMMIT 연산을 실행한 상태
  • 실패 상태: 장애가 발생하여 트랜잭션의 수행이 중단된 상태
  • 철회 상태: 실패 상태의 트랜잭션에서 ROLLBACK 연산을 실행된 상태

 

 

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

동시에 여러 트랜잭션이 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하느 데이터를 볼 수 있도록 허용할지 말지를 결정하는 수준 단계를 말한다. 아래의 네가지 격리 수준이 존재한다.

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE

 

READ UNCOMMITTED

각 트랜잭션에서의 변경 내용이 COMMIT이나 ROLLBACK 여부에 상관 없이 다른 트랜잭션에서 값을 읽을 수 있는 레벨이다. 정합성에 문제가 많은 격리 수준이기 때문에 사용하지 않는 것을 권장한다. 트랜잭션이 완료되 않았는데도 다른 트랜잭션에서 볼수 있게 되는 현상인 DIRTY READ가 발생할 수 있다.

 

READ COMMITTED

RDB에서 대부분 기본적으로 사용되고 있는 격리 수준으로 DIRTY READ가 발생하지 않는다. 실제 테이블 값을 가져오는 것이 아니라 UNDO 영역에 백업된 레코드에서 값을 가져온다. 하나의 트랜잭션이 실행되는 동안 다른 트랜잭션이 시작되고 종료되면, SELECT를 통해 조회하는 데이터의 결과가 달라질수 있다.(정합성에 어긋남)

 

REPEATABLE READ

MYSQL에서 사용하는 방식으로 트랜잭션마다 트랜잭션 ID를 부여하여 현재 트랜잭션 보다 작은 트랜잭션 번호에서 변경한 것만 읽는다. 백업된 데이터는 불필요하다고 판단하는 시점에 주기적으로 삭제한다. Undo에 백업된 레코드가 많아지면 MySQL 서버의 처리 성능이 떨어질 수 있다.

 

SERIALIZABLE

가장 단순한 격리 수준이지만 가장 엄격한 격리 수준으로 성능 측면에서는 동시 처리 성능이 가장 낮아 잘 쓰이지 않는다.

 

 

 

 

 

 

https://brunch.co.kr/@skeks463/27

 

[DataBase] DB를 지탱하는 트랜잭션

데이터 베이스는 우리가 흔히 사용하는 파일 시스템과는 달리 기본적으로 4가지 특징이 존재한다.   1) 실시간 접근성 2) 계속적인 변화 3) 동시 공유 4) 내용에 따른 참조  이외에도 디비의 장

brunch.co.kr

https://mommoo.tistory.com/62

 

트랜잭션(Transaction)이란?

트랜잭션이란? 트랜잭션(Transaction 이하 트랜잭션)이란, 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다. 데이터베이스의 상태를 변화시킨다는 것은 무얼 의미하는 것일

mommoo.tistory.com

https://nesoy.github.io/articles/2019-05/Database-Transaction-isolation

 

트랜잭션의 격리 수준(isolation Level)이란?

 

nesoy.github.io

 

'데이터베이스' 카테고리의 다른 글

정규화와 반정규화  (0) 2022.03.18
SQL vs NO SQL  (0) 2022.03.18
SQL Injection  (0) 2022.03.17
SQL JOIN에 대해(작성 중)  (0) 2022.03.16
관계형 데이터베이스의 키(Key)  (0) 2022.03.12