아카이브사이트맵
© 2026 Rayon. All rights reserved.
DevDay
아티클랭킹스페이스채용
네이버 페이 favicon네이버 페이

MySQL DB 격리 수준, 함정에 빠지다!

by DD
2025-05-23
1년 전
조회수 8

MySQL로 DB 변경 후, Repeatable Read 격리 수준으로 인해 동시성 문제 발생

DB Lock 적용 후, `readUserMethod` 호출로 인해 데이터 불일치 발생

Read Committed로 격리 수준 변경 또는 DB Lock 내부에서 잔액 조회로 문제 해결

Repeatable Read의 함정

MySQL의 Repeatable Read는 트랜잭션 내에서 최초 읽은 데이터를 유지하여 데이터 일관성을 보장한다. 구체적으로, `readUserMethod` 호출 시점에 잔액을 읽어온 후, DB Lock 획득 후에도 기존 잔액을 사용하게 되어 결제 실패가 발생했다. 따라서, DB 격리 수준에 대한 깊이 있는 이해가 필요하다.

Oracle vs MySQL 격리 수준 비교

Oracle은 기본적으로 Read Committed 격리 수준을 사용하며, 커밋된 데이터만 읽어온다. 반면, MySQL은 Repeatable Read가 기본 설정이므로, 동일한 트랜잭션 내에서 데이터가 변경되어도 최초 읽은 값을 유지한다. 따라서, DB 종류에 따라 격리 수준 설정을 신중하게 결정해야 한다.

DB 격리 수준 선택 가이드

DB 격리 수준 선택은 데이터 일관성과 동시성 사이의 트레이드오프를 고려해야 한다. 구체적으로, Read Committed는 가용성을 높이지만, Dirty Read를 허용할 수 있다. 따라서, 비즈니스 요구사항에 따라 적절한 격리 수준을 선택하고, 프레임워크 설정을 확인하여 예상치 못한 문제를 방지해야 한다.

실무에서 만나는 DB isolation level
중급
아키텍처
MySQL
Oracle
Kotlin
SQL
Data
Backend
원문 읽기
원문 읽기

댓글 0

첫 번째 댓글을 남겨보세요!

관련 추천 글

SQL 기초부터 실전까지 마스터!

더 프라임아젠 로고

스마트스토어, Oracle 탈출! MySQL 전환으로 성능과 비용 두 마리 토끼를 잡다

네이버 D2 로고

여기어때, AI로 Oracle DB를 6주 만에 Aurora MySQL로 마이그레이션 성공!

AWS 로고

꿀템 서비스 개발기: React, Spring, Oracle DB를 활용한 기술 스택과 개발 문화 소개

지마켓 로고

무신사, 10초 타임아웃을 20ms로 줄인 비결 공개!

무신사 로고

MySQL Paging 시, MySqlPagingQueryProvider의 함정 조심!

컬리 로고
네이버 페이 favicon네이버 페이
중급
아키텍처
MySQL
Oracle
Kotlin
SQL
Data
Backend

관련 추천 글

SQL 기초부터 실전까지 마스터!

더 프라임아젠 로고

스마트스토어, Oracle 탈출! MySQL 전환으로 성능과 비용 두 마리 토끼를 잡다

네이버 D2 로고

여기어때, AI로 Oracle DB를 6주 만에 Aurora MySQL로 마이그레이션 성공!

AWS 로고