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

DB 데이터, 왜 안 보였을까? 트랜잭션, 스냅샷, 그리고 해결책!

by DD
2024-06-13
2년 전
조회수 95

회원 데이터 조회 실패 원인으로 COMMIT 미실행 및 Snapshot 갱신 실패를 지목함

@Transactional(readOnly = true) 설정을 통해 Slave DB에서 데이터 조회하도록 변경

HikariCP의 `auto-commit: false` 설정으로 성능 40% 향상 달성

MVCC와 Snapshot의 이해

MVCC(Multi-Version Concurrency Control)는 데이터베이스에서 동시성을 제어하는 기술이다. 구체적으로 Snapshot을 생성하여 트랜잭션 격리 수준을 보장한다. 따라서 REPEATABLE READ 격리 수준에서 데이터 일관성을 유지한다.

트랜잭션 격리 수준과 문제점

REPEATABLE READ 격리 수준에서 COMMIT이 누락되면 Snapshot이 갱신되지 않아 데이터 불일치가 발생한다. 반면 READ COMMITTED 격리 수준은 Phantom Read 문제를 야기할 수 있다. 따라서 선택 시 를 고려해야 한다.

트랜잭션 격리 수준
트레이드오프

@Transactional 설정과 성능 최적화

@Transactional(readOnly = true) 설정을 통해 Slave DB에서 읽기 작업을 수행하도록 변경했다. 구체적으로 HikariCP의 `auto-commit: false` 설정을 통해 API 응답 시간 1.5ms 단축 및 성능 40% 향상을 달성했다. 결과적으로 데이터베이스 부하 감소 효과를 얻었다.

데이터가 있었는데요, 아니 없어요
중급
아키텍처
MySQL
Spring Data JPA
HikariCP
MariaDB
SQL
Java
Data
Backend
원문 읽기
원문 읽기

댓글 0

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

관련 추천 글

코드 리뷰의 맹점을 파헤치다!

데브투 로고

DB Connection 누수, OOM의 주범을 찾아라!

컬리 로고

Aurora MySQL의 숨겨진 연결 종료 동작, HikariCP 로그 추적기

여기어때 로고

AI 에이전트와 함께 레거시 시스템 성능 개선, SQL Injection, N+1 문제 해결!

데보션 로고

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

더 프라임아젠 로고

MySQL의 몰락? MariaDB로의 전환이 답이다!

레딧 로고
컬리 favicon컬리
중급
아키텍처
MySQL
Spring Data JPA
HikariCP
MariaDB
SQL
Java
Data
Backend

관련 추천 글

코드 리뷰의 맹점을 파헤치다!

데브투 로고

DB Connection 누수, OOM의 주범을 찾아라!

컬리 로고

Aurora MySQL의 숨겨진 연결 종료 동작, HikariCP 로그 추적기

여기어때 로고