본문 바로가기
개발

Transaction

by just다해 2024. 9. 8.

Transaction 이란?

트랜잭션이란 논리적 작업 단위로서 하나의 단위로 처리되어야 하는 분리될 수 없는 연산 그룹을 말합니다. 쉽게 말해 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위입니다.
상태를 변화시킨다는 것은 아래의 SQL(질의어)을 이용해 데이터베이스에 접근하는 것을 의미합니다.

  1. SELECT
  2. INSERT
  3. DELETE
  4. UPDATE

특징

ACID

  1. Atomicity 원자성 : 트랜잭션이 데이터베이스에 모두 반영되거나, 모두 반영되지 않아야 한다.
  2. Consistency 일관성 : 트랜잭션의 작업처리 결과가 항상 일관성이 있어야 한다.
  3. Isolation 독립성 : 두 개 이상의 트랜잭션이 동시에 실행되고 있을 경우에는 어느 하나의 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.
  4. Durability 지속성 : 트랜잭션이 성공적으로 완료되었을 경우, 결과는 영구적으로 반영되어야 한다.

Transaction Commit & Rollback

  • Commit : 하나의 트랜잭션이 성공적으로 끝났음을 알리는 연산으로, 데이터베이스가 일관적인 상태에 있어야 한다.
  • Rollback : 하나의 트랜잭션 처리가 비정상적으로 종료된 경우(트랜잭션의 원자성이 깨진 경우), 트랜잭션을 다시 시작하거나 부분적으로만 연산된 결과를 다시 취소한 후, 트랜잭션 처리 단위로 롤백 처리를 할 수 있다.

Transaction Isolation Level 트랜잭션 격리 수준

level 옵션 설명 예시
level 0 READ_UNCOMMITTED 트랜잭션에 처리 중이거나 아직 commit(확정) 되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용 한 사용자가 A라는 데이터를 B라는 데이터로 변경하는 동안 다른 사용자는 아직 완료되지 않은(Uncommitted or Dirty) 데이터 B'를 읽을 수 있다.
level 1 READ_COMMITTED 트랜잭션이 commit 되어 확정된 데이터만을 읽는 것을 허용한다. (Dirty Read를 방지) 한 사용자가 A라는 데이터를 B라는 데이터로 변경하는 동안 다른 사용자는 해당 데이터에 접근할 수 없다.
level 2 REPEATABLE_READ 트랜잭션이 완료될 때까지 SELECT 문이 사용하는 모든 데이터에 락(shared lock)이 걸린다. 다른 사용자는 그 영역에 해당 하는 데이터에 대한 수정이 불가능하다. 선행 트랜잭션이 읽은 데이터는 트랜잭션이 종료될 때까지 후행 트랜잭션이 갱신하거나 삭제하는 것을 불허함으로써 같은 데이터를 두 번 쿼리했을 때 일관성 있는 결과를 반환한다.
level 3 SERIALIZABLE 데이터의 일관성 및 동시성을 위해 MVCC를 사용하지 않는다.
트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 shared lock이 걸리므로 다른 사용자는 그 영역에 해당되는 데이터에 대한 수정 및 입력이 불가능하다. 즉, 완벽한 읽기 일관성 상태를 제공한다.
 
  • Dirty Read : 현재 트랜잭션에서 처리하는 작업이 완료되지 않았는데도 다른 트랜잭션에서 볼 수 있는 현상을 dirty read 라고 하며, READ UNCOMMITTED 격리 수준에서만 일어나는 현상이다.
  • MVVC(Multi Version Concurrency Control) : 다중 사용자 데이터베이스 성능을 위한 기술로 데이터 조회시 락을 사용하지 않고 데이터의 버전을 관리해 데이터의 일관성 및 동시성을 높이는 기술을 말한다.

'개발' 카테고리의 다른 글

GIT (1)  (0) 2024.09.09
JedisExhaustedPoolException 이슈  (4) 2024.09.08
Kafka 설정 값  (1) 2024.09.08
NoSQL  (0) 2024.08.25
추천 시스템  (0) 2024.08.25