logo

[스프링 DB] MySQL의 트랜잭션 격리 수준(Transaction Isolation Level) 파헤치기

language-logoMySQL
language-logoSpring

• 트랜잭션 격리 수준은 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 것으로, READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE의 4가지로 구분된다.
• READ UNCOMMITTED는 커밋 또는 롤백 여부에 관계 없이 다른 트랜잭션에서 데이터를 읽을 수 있으나, DIRTY READ 현상이 발생할 수 있어 사용하지 않는 것이 좋고, READ COMMITTED는 commit이 완료된 데이터만 다른 트랜잭션에서 조회할 수 있어 DIRTY READ가 발생하지 않는다.
• READ COMMITTED 격리 수준에서는 하나의 트랜잭션 내에서 같은 select 쿼리를 실행했을 때 항상 같은 결과를 가져와야 한다는 REPEATABLE READ 정합성에 어긋나는 NON-REPEATABLE READ 부정합 문제가 발생할 수 있다. 이는 데이터의 정합성을 깨뜨리고 애플리케이션에 버그를 발생시킬 수 있다.
• REPEATABLE READ 격리 수준에서는 MVCC 방식을 이용하여 undo 영역에 백업된 이전 데이터를 이용해 동일 트랜잭션 내에서는 동일한 결과를 보여줄 수 있게 보장한다. 이는 READ COMMITTED에서 발생했던 NON-REPEATABLE READ 부정합 문제를 해결한다.

thumbnail
북마크
공유하기
신고하기
15분 분량
조회수 105
profile-image개발하는쿼카
2년 전
Copyright © 2025. Codenary All Rights Reserved.