데이터베이스와 한번 이상의 상호작용을 해야 한다고 해보자. 또한, 일련의 작업이 성공하거나 아니면 아예 하나라도 실패 시 모든 변화 내용이 사라지는(all or noting) 방식으로 변경되길 원한다고 해보자.
이런 경우에 우리는 DB 트랜잭션을 활용한다. 트랜잭션은 작업을 성공하거나, 아니면 완전히 실패하거나 방식으로 DB를 조작할 수 있다.
일반적으로 DB는 커넥션 풀을 통해서 커넥션을 관리한다.
TCP 방식의 3way-handshake등을 거쳐야 하기 때문에 이 커넥션을 매번 만드는 것은 상당한 비용이 들어가기 때문에, DB 작업이 끝났다고 해서 커넥션을 종료하지 않는다.
미리 커넥션 풀에 커넥션을 여러개 만들어놓고, 이걸 번갈아가면서 재활용하는 방식으로 오버헤드를 줄인다.
트랜잭션을 길게 가져가면, 이 커넥션을 오래 점유하게 되므로 커넥션이 없을 때 DB에서 작업을 하지 못하게 되는 문제가 발생한다.
참고자료