2018-8-20 pobi-Transaction

트랜잭션

  • 복수의 쿼리를 실행해서, 전체를 다 DB에 반영을 하느냐. 아니면 중간에 문제가 생겼을경우 Rollback을 하느냐.
  • 복수의 쿼리를 묶는 범위를 정하는것이 트랜잭션이다.

  • Question, Answer관계에서 Question에 List<Answer>를 가지고 있는데, Answer의 갯수를 구할때 List<Answer>의 사이즈를 구하는것은 안좋다. Question에 CountOfAnswer라는 Column을 추가하는것이 DB성능측에서 봤을때 더 좋다.
  • 트랜잭션을 사용하면 성능상의 이슈가 생기지만, 은행과 같이 정확성을 요구해야되는 경우 트랜잭션을 사용해야한다.

Transaction을 이해할 개념

  • 격리레벨(Isolation Level) : 격리레벨 설정을 통해서 직렬실행, 병렬실행으로 할것이냐를 정할 수 있다.
    1. Dirty Read : Commit을 하지 않아도 다른 Transaction에 영향을 미친다.
    2. DB마다 격리레벨이 다 다르다. 주로 Read_commited이 기본적용이다.
    3. MySQL은 Repeatable_read가 기본설정이다.
  • 전달행위

  • Checked Exception

runtime Excepction일때 기본적으로 Rollback이 된다. Compile Exception일때 Rollback을 하려면 설정을 해야한다.

Written on August 20, 2018