출처: https://www.youtube.com/watch?v=LDi5muN2kgI&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=186
Lock은 무엇일까?
데이터 수정을 위한 커넥션이 여러 개 존재할 때 데이터 일관성의 문제가 발생 -> 이를 해결하기 위한 메커니즘

Lock과 Transaction?
- Lock: 일관성 보장, 동시성 제어 메커니즘
- 트랜잭션: 원자성 보장 (All or Nothing)
- 트랜잭션 격리 수준: 여러 트랜잭션에 대하여 각 트랜잭션 처리 전략
- 구현 방법 중 하나가 락
Lock 전략
- 낙관적 Lock(=애플리케이션 Lock): 트랜잭션 충돌이 발생한 후 조치
- 비관적 Lock(=데이터베이스 트랜잭션 Lock): 트랜잭션 충돌을 가정하고 사용하는 전략
JPA 에서의 낙관적 & 비관적 락
쿠폰 5장을 20명의 사용자가 동시에 발급 -> 20개 쿠폰이 발급됨
- 낙관적 락 사용
- @Version: 엔티티에 접근할 때 값이 1씩 오름
- 3개 쿠폰이 발급됨 -> 최초의 요청만 성립


- 비관적 락 사용
- @Lock(LockModeType.PESSIMISTIC_WRITE)
- 5개 쿠폰이 발급됨 -> 나머지 트랜잭션이 대기

적절한 Lock 사용 상황?
성능: 비관적 락 < 낙관적 락
하지만 충돌 발생 시 낙관적 락에서 롤백을 해야 하므로 비용이 더 많이 들게 됨
- 낙관적 락 -> 조회 작업이 많고 동시성 중요, 충돌이 잘 일어나지 않는 경우: 게시글 좋아요, 백오피스 데이터 수정 등
- 비관적 락 -> 데이터 무결성이 중요, 충돌이 자주 일어나는 상황: 은행 계좌 이체, 공동 편집 문서 저장, 티켓 예매 등
'Spring & JPA' 카테고리의 다른 글
스프링 부트 특징과 Spring Bean, Spring MVC (0) | 2025.04.13 |
---|---|
[테코톡] SOLID + 추가 정리 (0) | 2025.04.10 |
[테코톡] JPA 연관관계 최적화 (0) | 2025.04.03 |
[테코톡] API 중복 호출 해결기 (0) | 2025.04.02 |
고급 매핑 - 3. 복합 키와 식별 관계 매핑 (0) | 2025.03.19 |