2018-8-20 pobi-Transaction
트랜잭션
- 복수의 쿼리를 실행해서, 전체를 다 DB에 반영을 하느냐. 아니면 중간에 문제가 생겼을경우 Rollback을 하느냐.
-
복수의 쿼리를 묶는 범위를 정하는것이 트랜잭션이다.
- Question, Answer관계에서 Question에 List<Answer>를 가지고 있는데, Answer의 갯수를 구할때 List<Answer>의 사이즈를 구하는것은 안좋다. Question에 CountOfAnswer라는 Column을 추가하는것이 DB성능측에서 봤을때 더 좋다.
- 트랜잭션을 사용하면 성능상의 이슈가 생기지만, 은행과 같이 정확성을 요구해야되는 경우 트랜잭션을 사용해야한다.
Transaction을 이해할 개념
- 격리레벨(Isolation Level) : 격리레벨 설정을 통해서 직렬실행, 병렬실행으로 할것이냐를 정할 수 있다.
- Dirty Read : Commit을 하지 않아도 다른 Transaction에 영향을 미친다.
- DB마다 격리레벨이 다 다르다. 주로 Read_commited이 기본적용이다.
- MySQL은 Repeatable_read가 기본설정이다.
-
전달행위
- Checked Exception
runtime Excepction일때 기본적으로 Rollback이 된다. Compile Exception일때 Rollback을 하려면 설정을 해야한다.
Written on August 20, 2018