본문 바로가기
Programming/PHP+MySQL(Database)

트랜잭션(transaction)_DBMS

by 어깨 :) 2023. 4. 4.
728x90

트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. 즉, 트랜잭션(transaction)은   DBMS에서  데이터를  다루는  논리적인  작업의  단위다.

 


 데이터베이스에서   트랜잭션을  정의하는  이유
✓ 데이터베이스에서 데이터를 다룰 때 장애가 일어나는 경우가 있다. 트랜잭션은 장애 시 데이터를 복구하는 작업의 단위가 된다.
✓ 데이터베이스에서 여러 작업이 동시에 같은 데이터를 다룰 때가 있다. 트랜잭션은 이 작업을 서로 
분리하는 단위가 된다.


 트랜잭션은  전체가  수행되거나  또는  전혀  수행되지  않아야  한다(all or nothing). 
예) 은행 업무를 보는데 A 계좌(박지성)에서 B 계좌(김연아)로 10,000원을 이체할 경우

 

 

 

1) 트랜잭션 개념
▪  트랜잭션(transaction)
✓    디스크에 저장된 데이터베이스를 검색하거나 갱신하는 일종의 프로그램
✓    트랜잭션 분야 : 은행업무, 비행기예약, 주식구매, 신용카드 등


✓    트랜잭션 처리 시스템 : 여러 개의 트랜잭션들을 실행하는 다수의 동시 사용자들을 관리하는 시스템
-->  이런 시스템에서는 한 컴퓨터가 동시에 여러 개의 프로그래밍을 처리하는 다중 프로그래밍 개념 때문에 여러 사용자가 데이터베이스를 동시에 사용할 수 있음


✓    트랜잭션은 여러 개의 데이터베이스 접근 연산들로 구성
-->   접근 연산에는 검색, 삽입, 삭제, 혹은 갱신들이 포함되며, 읽기(read)와 쓰기 (write) 연산으로 표현

 

 

2) 트랜잭션의 특성
▪  ACID 규칙
✓  원자성(Atomicity) :

-원자성(Atomicity)이란   트랜잭션이  원자처럼  더  이상  쪼개지지  않는  하나의  프로그 램  단위로  동작하는 의미다.

-트랜잭션에 포함된 작업은 전부 수행되거나 아니면 전부 수행되지 않아야(all or nothing) 한다.

 

 

 

 


✓  일관성(Consistency) : 트랜잭션을 수행하기 전이나 수행한 후나 데이터베이스는 항상 일관된 상태를 유지해야 한다.

 

 


✓  고립성(Isolation) : 수행 중인 트랜잭션에 다른 트랜잭션이 끼어들어 변경 중인 데이터 값을 훼손하는 일이 없어야 한다.

 

 

 


✓  지속성(Durability) : 수행을 성공적으로 완료한 트랜잭션은 변경한 데이터를 영구히 저장해야 한다.

 

 

 

 

3) 트랜잭션의 상태 전이도
▪  트랜잭션을 중단(abort) : 트랜잭션은 장애가 발생하지 않은 경우에도 다른 여러 가지 
요인에 의해 정상적으로 완료하지 않을 수 있음
▪   트랜잭션 복귀(rollback) : 원자성을 보장하려면 중단된 트랜잭션이 갱신한 내용을 취소
▪   완료(commit) : 트랜잭션이 정상적으로 수행을 모두 마치면 완료(commit)
▪  트랜잭션이 시작부터 종료될 때까지 거치게 되는 상태들의 전이(states transition) 관계

 

 

 

 

4) 트랜잭션의 과정

트랜잭션은 거래의 안전성을 확보하는 방법이다. A 은행에서 B 은행으로 송금을 하다가 송금 도중 알 수 없는 오류가 발생하여 A 은행 계좌에서 돈이 빠져나갔는데 B 은행 계좌에 입금되지 않았다. 이때, A 은행 계좌의 출금을 취소하거나 출금된 금액만큼 B 은행 계좌로 다시 송금하면 된다. 하지만 이러한 방법은 번거롭고 더 심한 오류를 발생시킬 수 있다. 이때 거래가 성공적으로 모두 끝난 후에야 이를 완전한 거래로 승인하고, 거래 도중 오류가 발생했을 때는 이 거래를 아예 처음부터 없었던 거래로 되돌려 이러한 문제를 예방할 수 있다.

이렇게 거래의 안전성을 확보하는 방법이 바로 트랜잭션이다. 데이터베이스에서는 테이블에서 데이터를 읽어온 후 다른 테이블에 데이터를 입력하거나 갱신, 삭제하는 데 처리 도중 오류가 발생하면 모든 작업을 원상태로 되돌린다. 데이터베이스에서는 처리 과정이 모두 성공했을 때만 최종적으로 데이터베이스에 반영한다. 1, 2번까지 잘 실행되다가 3번 작업 시 소프트웨어가 중단되거나 하드웨어 고장이 발생해 작업에 오류가 생기게 된다면 2번까지의 모든 작업을 취소하고 트랜잭션 작업 전인 데이터베이스 초기 상태로 돌아가게 된다.

트랜잭션에는 사용자가 적은 쿼리문과 데이터를 최종적으로 데이터베이스에 반영하는 커밋과 실패했을 때 시점으로 다시 되돌아가는 롤백이 있다.

 

 

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

 

 

 

5) 트랜젝션 예제와 수행과정

 

   ■  트랜잭션  수행  과정
① A 계좌(박지성)의 값을 하드디스크(데이터베이스)에서 주기억장치 버퍼로 읽어온다
② B 계좌(김연아)의 값을 하드디스크(데이터베이스)에서 주기억장치 버퍼로 읽어온다.
③ A 계좌(박지성)에서 10,000원을 인출한 값을 저장한다.
④ B 계좌(김연아)에 10,000원을 입금한 값을 저장한다.
⑤ A 계좌(박지성)의 값을 주기억장치 버퍼에서 하드디스크(데이터베이스)에 기록한다.
⑥ B 계좌(김연아)의 값을 주기억장치 버퍼에서 하드디스크(데이터베이스)에 기록한다.

 

 

  ■  트랜잭션의  종료(COMMIT)를   알리는  방법
-[방법 1] ①-②-③-④-COMMIT-⑤-⑥
-[방법 2] ①-②-③-④-⑤-⑥-COMMIT
→ DBMS는 사용자에게 빠른 응답성을 보장하기 위해 [방법 1]을 선택한다.

 

 

 

 

6) 트랜잭션의 성질

 

728x90