트랜잭션

    [Database] 트랜잭션 격리 수준

    [Database] 트랜잭션 격리 수준

    트랜잭션 격리 수준 동시에 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타낸 것이다. → 즉, 특정 트랜잭션이 다른 트랜잭션에서 변경한 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것이다. level이 아래로 내려갈수록 트랜잭션간 고립 정도가 높아지며, 성능이 떨어지는 것이 일반적이다. 동시성 문제 Dirty Read 트랜잭션1에서 A테이블을 SELECT 한 후 트랜잭션2에서 A테이블 내용을 변경하는 상황. 트랜잭션2가 해당 변경사항을 commit 하지도 않았는데, 트랜잭션1에서 다시 A테이블을 SELECT하면 해당 변경사항을 읽어들일 수 있음. Non-repeatable Read (Inconsistent Read) 트랜잭션1에서 A테이블을 SELECT 한 후 트랜잭션2에서 A..

    [Spring] @TransactionalEventListener에서 예외가 발생하지 않는 이슈

    문제 @TransactionalEventListener에서 예외가 발생하지 않는 이슈 이게 무슨말인가 하면, @TransactionalEventListener에서 예외 발생 시, 예외를 찍어주지 않는다. 처음엔 예외 자체가 발생하지 않았다고 생각했는데, 로그를 debug로 찍어보면 잘 나온다. 즉, 예외는 발생했지만 해당 예외가 error가 아닌 debug로 찍힌다는 것. 원인 콜스택을 분석해봤다. @Transactional이 붙은 메서드를 본 메서드, @TransactionalEventListener를 이벤트 메서드라고 했을 때, 이벤트 메서드는 본 메서드의 트랜잭션이 커밋된 이후, 실행하는 메서드다. 이 때 이벤트 메서드는 실행 후 종료 직전 TransactionSynchronization.after..