티스토리 뷰

트랜잭션(Transaction)


트랜잭션(Transaction; TX) 란 ?

트랜잭션(Transaction)은 데이터 베이스 상태를 변환시키는 하나의 논리적 기능 수행 단위이다. 즉 한번에 수행되어야 할 일련의 연산을 의미한다(Unit Of Work in Database Language).

 

 

 

 

* 데이터베이스의 상태를 변화시킨다는 의미 ?

질의어(SQL: SELECT, INSERT, DELETE, UPDATE)를 통해 데이터베이스에 접근하는 것을 의미한다.

 

 

* 작업의 단위?

 많은 SQL 명령문들을 사람이 정하는 기준에 따라 정하는 것을 의미한다.

예시) 사용자 A가 사용자 B에게 만원을 송금한다.

[DB 작업]
1. 사용자 A의 계좌에서 만원을 차감한다: UPDATE 문을 사용해 사용자 A의 잔고를 변경한다.
2. 사용자 B의 계좌에 만원을 추가한다: UPDATE 문을 사용해 사용자 B의 잔고를 변경한다.

[작업의 단위]
출금 UPDATE 문 + 입금 UPDATE 문 이를 통틀어 하나의 트랜잭션(Transaction) 이라고 한다.
✔ 위 의 두 쿼리 문 모두 성공적으로 완료되어야 만 "하나의 작업(트랜잭션)" 이 완료되는 것이다: Commit
✔ 작업 단위에 속하는 쿼리 중 하나라도 실패하면 모든 쿼리문을 취소하고 이전 상태로 돌려놓아야 한다: Rollback

 

 

* 정리

트랜잭션이란 DBMS 에서 데이터를 다루는 논리적인 작업의 단위이다.

DB 에서 데이터를 다룰 때 장애가 일어난 경우 데이터를 복구하는 작업의 단위가 된다.

DB 에서 여러 작업이 동시에 같은 데이터를 다룰 때가 이 작업을 서로 분리하는 단위가 된다. 

트랜잭션은 전체가 수행되거나 또는 전혀 수행되지 않아야 한다. → All or Nothing

 


트랜잭션(Transaction)의 ACID 성질

 

원자성(Atomicity)

트랜잭션의 연산은 데이터베이스에 모두 반영되거나 모두 반영되지 않아야 한다.

일관성(Consistency)

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

독립성(Isolation)

- 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션 연산이 끼어들 수 없다.

- 수행 중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.

지속성(Durability)

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

 

 

데이터베이스는 ACID 성질을 갖는다.

 

원자성(Atomicity)은 All or Nothing 의 성질로 트랜잭션이 원자처럼 더 이상 쪼개지지 않는 하나의 프로그램 단위로 동작해야 한다는 것을 의미한다. 트랜잭션이 중간에 끊기면 이 후에 해당 트랜잭션이 어디서부터 수행되어야 하는지 모르기 때문에 원자성이라는 성질을 지니게 되었다.

 

일관성(Consistency)트랜잭션의 수행 전과 후에 일관된 상태를 유지해야 한다는 것을 의미한다. 예를 들어, 어떤 테이블의 기본 키와 같은 속성은 유지되어야 한다는 것 또는 A계좌에서 B계좌로 돈 이체를 할 때 A와 B계좌의 돈의 총 합은 같아야 한다는 것이 있다. 

 

독립성(Isolation) 또는 고립성트랜잭션은 상호간의 존재를 모르고 독립적으로 수행되어야 한다는 것을 의미한다. 고립성을 격리 성이라고도 부르는데 이를 유지하기 위해서는 여러 트랜잭션이 동시에 접근하는 데이터에 대한 제어가 필요하다.

 

지속성(Durability)트랜잭션의 성공 결과 값은 장애 발생 후에도 변함없이 보관되어야 한다는 것을 의미한다. 즉 트랜잭션이 정상적으로 완료(Commit)된 경우에는 버퍼의 내용을 하드디스크(데이터베이스)에 확실히 기록해야 한다. 정상적으로 완료 혹은 부분 완료된 데이터는 DBMS가 책임지고 데이터베이스에 기록하는 성질이 지속성이며 영속성이라고 표현하기도 한다. 

 

 


 트랜잭션(Transaction) 연산

 

Commit 연산

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

Rollback 연산

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

Savepoint 연산

Rollback 연산 수행 시 일반적으로는 전체 연산이 삭제되지만, 이 연산을 사용하면 특정 부분의 트랜잭션만을 취소하는 것이 가능해진다. Savepoint를 명시한 다음 Rollback 연산을 수행하면 해당 Savepoint 이후의 작업들만 취소되게 된다.

 

즉 트랜잭션의 특정 지점에 이름을 지정하고, 그 지점이전에 수행한 작업에 영향을 주지 않고 그 지점 이후에 수행한 작업을 Rollback할 수 있으며 단일 트랜잭션에서 여러 Savepoint를 만드는 것도 가능하다.

 

 


트랜잭션(Transaction)의 상태

 

 

1. 활성(Active): 트랜잭션이 실행 중인 상태

2. 실패(Failed): 트랜잭션 실행에 오류가 발생하여 중단된 상태

3. 철회(Aborted): 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태

4. 부분완료(Partially Committed): 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태

5. 완료(Committed): 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함