16 May 2020
트랜잭션(Transaction)
트랜잭션이란?
트랜잭션은 작업의 완전성을 보장한다.
트랜잭션은 하나의 논리적인 작업 셋에 있는 쿼리의 개수에 관계없이 논리적인 작업 셋 자체가
100%적용되거나 또는 아무것도 적용되지 않아야함을 보장해주는 것이다.
예시) 통장에 10000원이 있었다. 여기서 한 트랜잭션을 날려보자
1. 5000입급(update)
2. 10000원 출금(update)
3. 잔액조회(select)
3개의 쿼리가 한 트랜잭션으로 수행 될때 2번에서 오류가 생긴다면 앞에서 작업했던 1번 쿼리가 롤백되어
실행되기 전으로 돌아간다
트랜잭션과 Lock 차이
Lock은 동시성을 제어하기 위한 기능이고 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다
Lock은 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에 하나의 커넥션만
변경할 수 있게 해준다.
이와달리 트랜잭션은 논리적셋(n개의 쿼리)이 모두 적용되거나 아무것도 적용되지 않아야 함을 보장하는 것이다.
트랜잭션의 특성(ACID)
원자성(Atomicity)
만약 트랜잭션 중간에 어떤 문제가 발생한다면 트랜잭션에 해당하는 어떤 작업 내용도 수행되어서는 안되며 문제가 없을 경우에만 모든작업이 수행되어야한다.
일관성(Consistency)
트랜잭션이 완료된 다음도 트랜잭션이 일어나기전과 동일하게 데이터의 일관성을 보장해야한다.
고립성(Isolation)
각각의 트랜잭션은 서로 간섭없이 독립적으로 수행되어야 한다.
지속성(Durability)
트랜잭션이 정상적으로 종료된 다음에는 영구적으로 데이터베이스에 작업의 결과가 저장되어야 한다.
추가 자료
Statement vs PreparedStatement
PreparedStatement는 쿼리를 수행하기전에 이미 쿼리가 컴파일 되어 있으며 반복 수행에 경우
프리 컴파일 된 쿼리를 통해 수행하기 때문에 Statement보다 속도가 빠르다.
PreparedStatement은 SQL injection공격등의 문제를 보완할 수 있기 때문에 ### PreparedStatement사용이 권장된다.