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

by DD
1년 전
조회수 91

회원 데이터 조회 실패 원인으로 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% 향상을 달성했다. 결과적으로 데이터베이스 부하 감소 효과를 얻었다.

데이터가 있었는데요, 아니 없어요

댓글 0

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