OptimisticLock (2) 썸네일형 리스트형 JPA 동시성 제어 완벽 정리: 낙관적 잠금(Optimistic Lock) vs 비관적 잠금(Pessimistic Lock) 서비스가 잘 굴러갈 때는 평화롭습니다. 문제는 트래픽이 몰리는 순간이죠. 똑같은 데이터에 여러 요청이 동시에 달려들기 시작하면, 분명히 처리했다고 생각한 업데이트가 흔적도 없이 사라지는 무서운 일이 벌어집니다. "분명 저장했는데요?" 하는 CS가 들어오기 시작하면 그때부터 진짜 디버깅 지옥이 열립니다. 이 글에서는 JPA에서 이런 동시성 문제를 막아주는 두 가지 무기, 낙관적 잠금(Optimistic Lock)과 비관적 잠금(Pessimistic Lock)을 정리해 봅니다. 개념부터 LockModeType 종류, 예외 처리, 그리고 "그래서 실무에서 뭘 써야 하냐"까지 한 번에 훑어보겠습니다.도대체 왜 잠금이 필요할까: 갱신 손실(Lost Update) 문제먼저 적이 누군지부터 알아야겠죠. 가장 흔한 동.. JPA에서 동시성 제어 방법(낙관적 락,비관적 락) 동시에 같은 데이터를 수정하는 순간, 서비스는 별도의 처리를 안해두었다면 “마지막에 저장한 사람이 이기는” 게임이 됩니다. 주문 수량, 재고, 쿠폰 발급, 포인트 차감 같은 중요한 곳에서 이러한 로직을 방치하면 곧바로 장애 티켓이 날아옵니다.JPA는 이런 동시성 충돌을 다루기 위해 낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock)을 제공합니다. 이 글에서는 두 락의 원리, JPA/Spring Data JPA에서의 구현 예시, 그리고 언제 무엇을 선택하는 게 적절한지 실전 기준으로 정리해 보도록 하겠습니다. 우선 낙관적 락과 비관적 락의 장단점을 도표로 간단하게 정리하고 시작하겠습니다. 락이 없으면 생기는 대표적인 문제 : 잃어버린 업데이트가장 흔한 사고는 잃어버린 업.. 이전 1 다음