트랜잭션은 작업의 완전성을 보장해주는 장치이다.
트랜잭션은 사용하면 작업 셋의 일부분은 성공하고 일부분은 실패하여 부분 업데이트(Patial Update) 문제를 해결할 수 있다.
INSERT INTO table (pk) VALUES(3);
INSERT INTO table (pk) VALUES(1),(2),(3)
실제로 MyISAM 은 트랜잭션을 지원하지 않기 때문에 위에 2번째 쿼리의 실행 결과는 3을 제외한 1과 2가 저장된다.
트랜잭션을 지원하는 InnoDB는 실제로 2번째 쿼리를 실행하면 1,2,3 셋 다 저장이 되지 않는다.
트랜잭션을 위와 같이 논리적으로 하나의 단위로 실행되어야 하는 쿼리들(실제로는 별개의 쿼리이지만)이 원자적으로 하나의 실행 단위로써 작동하게 해주는 장치이다.
트랜잭션 단위에 쿼리 중에 하나라도 실패하면 모두 실패하고 100% 의 쿼리가 성공해야 그 트랜잭션은 성공한다.
책 159~160 쪽에서 트랜잭션 범위 최소화에 대해 나옴 외부 통신에 대해서는 트랜잭션을 끊는건 동의하지만 중간 읽기와 쓰기를 트랜잭션 분리에 대해서는 의문점이 남음
출처
[Spring] 트랜잭션(Transaction) 우아하게 분리하기 (tistory.com)
트랜잭션 범위는 작은 단위로 가져가는 것이 좋다.
왜 작게 가져가는 것이 좋지?