트랜잭션 격리 수준

ramong2·2025년 8월 13일

토비의 스프링 3.1 vol.1 chap 6장 AOP를 읽으면서 궁금한게 생겼다.
PlatformTransactionManager에 DefaultTransactionDefinition를 넣어서 작동시킨다고 이해를 했다.
이떄 DefaultTransactionDefinition에 전파속성과 격리수준, 제한시간 읽기등 다양한 속성값을 넣을 수 있다고 생각하는데
과연 디폴트 전파,격리수준은 무엇일까? 라고 생각을 했다.

전파속성은 TransactionDefinition.PROPAGATION_REQUIRED로 설정되어
이미 트랜잭션이 있으면 새 트랜잭션을 생성하면 부모트랜잭션에 참여시키도록 한다.
트랜잭션이 없으면 새로 만든다.

격리수준은 MySQL에서 테이블을 만들었을 때 별도로 격리 수준을 지정하지 않으면,
사용되는 건 MySQL 서버의 기본 트랜잭션 격리 수준이라고 한다.
mysql의 기본 격리 수준은 REPEATABLE READ이다.

격리수준의 테이블을 다시 한번 보며 외우자.

| 격리 수준            | Dirty Read | Non-Repeatable Read | Phantom Read                     |
| ---------------- | ---------- | ------------------- | -------------------------------- |
| READ UNCOMMITTED | 발생         | 발생                  | 발생                               |
| READ COMMITTED   | 방지         | 발생                  | 발생                               |
| REPEATABLE READ  | 방지         | 방지                  | (일반 SQL 표준에서는 발생 가능, InnoDB는 방지) |
| SERIALIZABLE     | 방지         | 방지                  | 방지                               |

일단 또 까먹어서 적으면 innoDB는 엔진이며, 트랜잭션 지원한다.

마지막으로
전파수준은 spring에서 정하는 것이며, 격리수준은 DB에서 정하는 것이다.

0개의 댓글