본문 바로가기

CS/데이터베이스

트랜잭션(Transaction)이란??

트랜잭션(Transaction)??

  • 데이터베이스의 상태를 변화시키기 위한 하나의 논리적인 작업 단위를 구성하는 연산들의 집합
    • 작업단위란 많은 SQL 명령문들을 사람이 정한는 기준에 따라 정하는 것

예를 들어 게시판에서 사용자가 글을 작성하고 올리기 버튼을 누른 후 게시판에 다시 돌아오면 게시판에 업데이트 된 글
을 볼 수 있는 것이며, 이렇게 하나의 트랜잭션 설계를 잘 만드는 것이 데이터를 다룰 때 이점이 많다.

트랜잭션의 필요성

현금 인출기를 작동하는 도중에 기계오류나 정전 등과 같은 예기치 않은 상황이 발생하여 카드가 나오지 않거나 기계가 멈추는 경우 각각 다른 지점의 은행에서 동시에 인출할 때, 하나의 지점이 다른 지점에서 저장한 잔액을 덮어 쓰는 경우
위와 같은 상황이 발생되지 않도록 방지하기 위해, 즉, 트랜잭션의 성질인 ACID를 제공받기위해 트랜잭션을 사용한다.


하나의 트랜잭션은 commit이 되거나 rollback이 된다.

1. commit 연산

한개의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝나 데이터베이스가 다시 일관된 상태에 있을때, 이 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산이다.

2. rollback 연산

하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소(undo)하는 연산이며, rollback 시에는 해당 트랜잭션을 재시작하거나 폐기한다.

  • undo
    • 정상적으로 종료되지 않은 트랜잭션이 변경한 페이지들을 원상복구 해야하는 과정
  • redo
    • 이미 commit한 transaction의 수정을 재 반영하는 복구 작업

트랜잭션의 특징

  • 원자성(Atomicity) All or nothing
    • 트랜잭션이 데이터베이스에 모두 반영되거나 전혀 반영되지 않아야 한다.
  • 일관성(Consistency)
    • 트랜잭션의 작업 처리 결과는 항상 일관성이 있어야 한다.
  • 독립성(Isolation)
    • 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.
  • 지속성(Durability)
    • 트랜잭션이 성공적으로 완료되었으면, 결과는 영구적으로 반영되어야 한다.

트랜잭션의 상태

  • 활동(Active)
    • 트랜잭션이 실행 중에 있는 상태, 연산들이 정상적으로 실행 중인 상태
  • 장애(Failed)
    • 트랜잭션이 실행에 오류가 발생하여 중단된 상태
  • 철회(Aborted)
    • 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
  • 부분 완료(Partially Committed)
    • 트랜잭션이 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태
  • 완료(Committed)
    • 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태

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

정규화(Normalization)  (0) 2022.01.20
트랜잭션(Transaction)의 격리수준(Isolation)에 대해서 알아봅시다  (0) 2022.01.19
인덱스(index)?  (0) 2022.01.17
이상(Anomaly)  (0) 2022.01.15
SQL? No SQL? 둘의 차이?  (0) 2022.01.13