트랜잭션(transaction)은 뭘까?
- 트랜잭션은 데이터베이스 상태를 변화시키기 위해서 수행하는 작업의 단위를 말한다.
- 데이터베스 상태를 변화시킨다는 것은 뭘까?
- SELECT, INSERT, DELETE, UPDATE 와 같은 쿼리문 실행
예를들어
- SELECT, INSERT, DELETE, UPDATE 와 같은 쿼리문 실행
사용자 A가 사용자 B에게 만원을 송금한다.
- 사용자 A의 계좌에서 만원을 차감한다: UPDATE를 통해 사용자 A의 잔고 변경
- 사용자 B의 계좌에 만원을 추가한다: UPDATE를 통해 사용자 B의 잔고 변경
작업단위는 출금 UPDATE+입금 UPATE
-> 요거를 통틀어 하나의 트랜잭션이라고 하고, 두 쿼리문이 모두 성공적으로 완료되어야만 하나의 작업완료라고 함
만약에 첫번째 쿼리만 수행되고 두번째 쿼리는 수행되지 않으면, A의 통장잔고에서 만원만 차감된거고, B의 통장잔고에는 만원이 들어오지 않게 됨!
따라서, DB가 제공하는 트랜잭션 기능을 사용하여 commit, rollback으로 정상적인 작업이 가능하도록 제어 할 수 있음.
트랜잭션의 특징
- 원자성 (Atomicity)
- 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야한다는 것
- 트랜잭션은 사람이 설계한 논리적인 작업단위로서, 일처리는 작업단위별로 이루어져야 사람이 다루는데 무리가 없다.
- 만약 트랜잭션 단위로 데이터가 처리되지 않으면 설계자는 데이터처리시스템을 이해하기 어렵고, 오작동했을 때 원인을 찾기 어려움.
- 일관성 (Consistency)
- 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야한다는 것
- 트랜잭션이 진행되는 동안 데이터베이스가 변경되더라도, 업데이트된 데이터베이스로 트랜잭션이 진행되는 것이 아니라, 처음에 트랜잭션을 진행하기 위해 참조한 데이터베이스로 진행된다. 이렇게 하여 사용자는 일관성 있는 데이터르 볼 수 있음.
- 독립성 (Isolation)
- 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우, 어떤 하나의 트랜잭션이라도 다른 트랜잭션의 연산에 끼어들 수 없다는 점
- 하나의 트랜잭션이 완료될 때 까지, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없다.
- 지속성 (Durability)
- 트랜잭션이 성공적으로 완료됐을 경우, 결과는 영구적으로 반영된다는 것
트랜잭션 Commit & Rollback 연산
- Commit
- 하나의 트랜잭션이 성공적으로 끝났고, 데이터베이스가 일관성 있는 상태에 있을 때 하나의 트랜잭션이 끝났다라는 것을 알려주기 위해 하는 연산
- 이 연산을 사용하면 수행한 트랜잭션이 로그에 저장되어 후에 롤백 연산을 수행했었던 트랜잭션 단위로 하는 것을 도와줌
- Rollback
- 하나의 트랜잭션 처리가 비정상적으로 종료되어 트랜잭션의 원자성이 깨진 경우, 트랜잭션을 처음부터 다시 시작하거나, 트랜잭션의 부분적으로만 연산된 결과를 다시 취소 시킨다.
DB 세션
- 사용자가 DB 서버에 접근하면 사용자는 DB 서버에 연결을 요청하고 커넥션을 맺음
- DB 서버는 내부에 세션이라는 것을 만들고, 앞으로 해당 커넥션을 통한 모든 요청은 이 세션을 통해 실행하게 된다.
- 세션은 트랜잭션을 시작하고, 커밋 또는 롤백을 통해 트랜잭션을 종료한다.