트랜잭션

아따맘마·2020년 11월 29일
0

DB

목록 보기
2/2

정의

트랜잭션(Transaction)은 DB의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 or 한번에 모두 수행되어야 하는 일련의 연산.
데이터베이스의 상태는 SQL문(SELECT, INSERT, DELETE, UPDATE)을 이용하여 DB에 접근하는 것이다.

특징

  • 트랜잭션은 DB 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위
  • 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업 단위
  • 하나의 트랜잭션은 Commit되거나 Rollback 된다.

병행제어

동시에 여러개의 트랜잭션을 병행 수행할 때, 트랜잭션들이 DB의 일관성을 파괴하지 않도록 트랜잭션 간의 상호작용을 제어하는 것. 병행은 트랜잭션을 동시에 인터리빙하게 실행하는 것이다. 인터리빙은 트랜잭션이 번갈아가며 조금씩 처리를 수행하는 것.

  • 목적
  1. DB의 공유도 최대화
  2. 시스템 활용도 최대화
  3. 응답 시간 최소화
  4. 단위 시간당 트랜잭션 처리 건수 최대화
  5. DB의 일관성 유지
  • 필요성
    병행제어 없이 트랜잭션이 DB에 동시에 접근하면 여러 문제 발생.
  1. 갱신 분실 : 같은 데이터를 공유하여 갱신할 때 갱신 결과의 일부가 사라진다.
  2. 모순성 : 동시에 같은 데이터를 갱신할 때, 데이터의 상호 불일치가 발생하는 현상.
  3. 연쇄 복귀 : 트랜잭션 중 하나에 문제가 생겨 Rollback 되는 경우, 다른 트랜잭션들도 같이 Rollback되는 현상.

Commit & Rollback

DML문장에 속하는 SQL문

  • Commit : 변경사항을 저장 (Git에서 commit와 같은 기능). 한개의 트랜잭션에 대한 작업이 성공적으로 끝나고 DB가 다시 일관된 상태에 있을 때 이 트랜잭션이 행한 연산이 완료된 것을 관리자에게 알려주는 연산.
  • ROllback : 변경사항을 취소. 하나의 트랜잭션 연산이 비정상적으로 종료되어 DB의 일관성이 깨지면, 이 트랜잭션의 일부가 정상적으로 처리되도 트랜잭션의 Atomicity 성질로 인해 이 트랜잭션이 행한 모든 연산이 취소. Rollback 시에는 해당 트랜잭션을 재시작하거나 폐기.
  • 장점
  1. 데이터의 일관성 제공
  2. 데이터를 영구적으로 변경하기 전에 데이터 변경을 확인하게 한다.
  3. 관련된 작업을 논리적으로 그룹화할 수 있다.

성질 (ACID)

ACID(원자성, 일관성, 고립성, 지속성) : 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어

Atomicity (원자성)

  • 트랜잭션의 연산은 DB에 모두 반영되거나 전혀 반영되지 않아야 한다.
  • 트랜잭션 내의 모든 명령은 반드시 완벽하게 수행되어야 한다. 어느 하나라도 오류가 발생하면 트랜잭션 전부 취소가 되야 한다.

Consistency (일관성)

  • 트랜잭션이 그 실행을 완료하면 언제나 일관성 있는 DB 상태로 변환.
  • 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 완료 후의 상태가 같아야 한다.

Isolation (고립성)

  • 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에는 다른 트랜잭션이 끼어들 수 없다.
  • 수행중인 트랜잭션은 완료 전까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.

Durability (지속성)

  • 성공적으로 완료된 트랜잭션 결과는 시스템이 고장나더라도 영구적으로 반영되야 한다.

트랜잭션 흐름

  • Active (활동) : 트랜잭션이 실행중
  • Partially Commited (부분 커밋) : 트랜잭션의 마지막 연산까지 실행되었지만, Commit 연산이 실행되기 직전의 상태
  • Commited (커밋) : 트랜잭션이 성공적으로 종료되어 Commit 연산까지 마친 상태
  • Failed (실패) : 트랜잭션이 오류가 발생하여 중지된 상태
  • Aborted (철회) : 트랜잭션 실패되어 Rollback이 마친 상태
profile
늦게 출발했지만 꾸준히 달려서 도착지점에 무사히 도달하자

0개의 댓글