본문 바로가기

transaction

(2)
JPA 낙관적 잠금 (Optimistic locking)을 알아보자 0. 목차 * 이 글은 MySQL을 기본으로 예제 및 시나리오를 작성합니다. 목차 1. 낙관적 잠금이란? 1.1 MySQL 엔진 level과 스토리지 엔진 level MySQL에서 사용되는 잠금은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눠볼 수 있다. MySQL 엔진 레벨의 잠금은 모든 스토리지 엔진에 영향을 미치게 되지만 스토리지 엔진 레벨의 잠금은 스토리지 엔진 간 상호 영향을 미치지는 않는다. 낙관적 잠금은 InnoDB 스토리지 엔진 잠금의 한 종류이다. 1.2 비관적 잠금과 낙관적 잠금 1.2.1 비관적 잠금 현재 트랜잭션에서 변경하고자 하는 레코드에 대해 잠금을 획득하고 변경 작업을 처리하는 방식 '변경하고자 하는 레코드를 다른 트랜잭션에서도 변경할 수 있다'라는 비관적인 가정을 하..
트랜잭션과 동시성 제어 트랜잭션과 동시성 제어 트랜잭션이란? 갱신은 단일 쿼리가 아닌 복수 쿼리를 연속적으로 수행하는 경우가 대부분 또한 갱신 전에 조회를 포함해서 사용하는일이 많음 이러한 쿼리들을 한 덩어리로 포함하여 다뤄야 함 → 이런 복수 쿼리를 한 단위로 묶은 것 원자성 데이터의 변경을 수반하는 일련의 데이터 조작이 전부 성공할지, 전부 실패할지를 보증하는 구조 예를 들어 A, B, C 작업이 순차적으로 있을 경우 A → B → C 가 하일련의 데이터 조작으로 묶임 그리고 A, B, C 중 하나라도 실패할 경우 전부 롤백 A, B, C 를 하나의 원자 단위로 보는 관점 일관성 기존의 데이터 베이스가 데이터 조작 전후에 그 상태를 유지하는 것을 보증 이를 위해 데이터베이스에서는 오브젝트에 대해 각종 정합성 제약을 추가할 ..