NAVER Pay Dev Blog - Medium · 2025. 05. 23.
실무에서 만나는 DB isolation level
AI 엔지니어링 브리핑
결제 요청이 동시에 들어올 때 사용자 잔액이 꼬이지 않도록 DB 격리 수준과 잠금이 실제 서비스에서 어떻게 작동하는지 설명한 글입니다.
문제 & 배경
문제 & 배경: Oracle에서 MySQL로 DB를 바꾼 뒤 결제 요청이 동시에 처리되면서 잔액을 안전하게 갱신해야 했고, 단순히 격리 수준을 외운 것만으로는 실무 이슈의 원인을 알아채기 어려웠습니다.
기술 & 해결책
기술 & 해결책: 결제 트랜잭션 시작 시 해당 사용자의 잔액 행을 먼저 수정해 DB 잠금을 확보하고, 다른 요청은 첫 번째 결제가 끝날 때까지 기다리게 한 뒤 원래 잔액이 맞을 때만 최종 잔액을 갱신하도록 했습니다.
교훈 & 주의점
교훈 & 주의점: 동시 요청을 처리하는 결제 시스템에서는 애플리케이션 로직만이 아니라 DB의 잠금과 트랜잭션 격리 동작까지 함께 이해하고 검증해야 합니다.
함께 읽을 글
내용이 비슷해요내용이 비슷한 글을 먼저 보여드려요. 같은 문제나 해결책을 다룬다는 뜻은 아니에요.