트랜잭션(Transaction)

트랜잭션은 은행 ATM이나 데이터베이스 등의 시스템에서 사용되는 더 이상 쪼갤 수 없는 업무 처리의 최소 단위이다. 즉, 데이터베이스가 사용자의 요구에 응답하기 위한 상태 변환 과정의 작업 단위이다.
데이터베이스의 상태 변환 과정에는 SELECT, UPDATE, INSERT, DELETE (CRUD; Create, Read, Update, Delete) 등이 있다.
트랜잭션은 데이터베이스 서버에 여러 개의 클라이언트가 동시에 접근하는 등의 상황에 따라 여러개가 생성될 수 있다. 그리고 생성된 트랜잭션은 데이터베이스의 설정에 따라 하나, 혹은 전체가 Commit(저장)되거나 Rollback(철회)될 수 있다. 그 이유는 이렇다.
어떤 인터넷 강의는 강의별로 수강을 완료하면 약간의 포인트를 지급하고, 그 포인트를 활용해 다른 강의를 들을 수 있다.총 4명의 학생이 A라는 강의를 수강 완료하여 각각 300 point씩 얻었고, 강의 제공자는 이 내용을 DB에 저장하려고 한다. 이 때 3명의 학생이 얻은 point는 저장이 완료되었고 1명은 저장에 실패하였다. 이럴 경우 저장 프로세스를 다시 시작해야 하는데, 저장이 완료된 학생은 다시 저장이 시작되므로 총 600 point가 저장된다. 이런 오류를 방지하기 위해 트랜잭션은 Commit(저장)과 Rollback(철회)을 이용한다.
트랜잭션의 조건
데이터베이스에서 트랜잭션이 안전하게 수행되기 위해서는 ACID 조건을 충족해야 한다.
- Atomicity (원자성)
- Consistency (일관성)
- Isolation (고립성)
- Durability (지속성)
- 원자성
- 원자성은 하나의 트랜잭션이 더 이상 작게 쪼갤 수 없는 최소한의 업무 단위이다.
- 트랜잭션이 데이터베이스에 모두 반영되거나, 전혀 반영되지 않아야 하며 작업이 부분적으로 실행/중단되지 않는 것을 보장한다.
- All or Nothing의 개념으로 작업의 일부만 실행하지 않는다는 것을 의미한다.
- 일관성
- 일관성은 트랙잭션 수행 결과가 항상 일관적인 DB 상태를 유지해야 한다는 것을 의미한다.
- 고립성
- 하나의 트랜잭션 수행시 다른 트랜잭션의 작업이 끼어들지 못한다는 것을 의미힌다.
- 트랜잭션이 실행하는 도중에 변경한 데이터는 이 트랜잭션이 완료될 때까지 다른 트랜잭션이 참조할 수 없다.
- 여러 트랜잭션이 동시에 수행되더라도 각각의 트랜잭션은 독립적으로 수행되어야 한다.
- 지속성
- 트랜잭션이 성공적으로 완료되면 영구적으로 결과에 반영되어야 한다는 것을 의미한다.
- 일반적으로 Commit(저장)이 된다면 지속성을 만족할 수 있다.
트랜잭션의 Commit과 Rollback
- Commit

Commit은 하나의 트랜잭션을 성공적으로 마치고, 처리과정을 영구적으로 저장하여 데이터베이스가 일관성있는 상태에 있다는 것을 의미한다.
- Rollback

Rollback은 트랜잭션의 원자성을 구현하는 것이 불가능할 때, 즉 하나의 트랜잭션 과정이 비정상적으로 종료된 상태를 의미한다. Rollback 이후에는 트랜잭션을 다시 실행하거나 일부 변경된 결과를 취소할 수 있다.
트랜잭션의 상태

- 활동(Active)
트랜잭션이 실행 중인 상태 - 실패(Failed)
트랜잭션 실행에 오류가 발생하여 중단한 상태 - 철회(Aborted)
트랜잭션이 비정상적으로 종료되어 롤백 연산을 수행한 상태 - 부분 완료(Partially Committed)
트랜잭션의 마지막 연산까지 실행하고, 커밋 연산이 실행 되기 직전의 상태 - 완료(Committed)
트랜잭션이 성공적으로 종료되어 커밋 연산을 실행한 후의 상태
Reference
트랜잭션 - 해시넷
트랜잭션(transaction)이란 "쪼갤 수 없는 업무 처리의 최소 단위"를 말한다. 거래내역이라고도 한다. '트렌젝션'이 아니라 '트랜잭션'이 올바른 표기법이다. 영어로 간략히 Tx라고 표기하기도 한다.
wiki.hash.kr
댓글