Lock
-
기존 서비스에 api 중에서 getOOO 수행 시, OOO가 없는 경우에는 insert를 하는 케이스가 존재하고 있다. 이 API의 로직을 확인해 보면 Mybatis를 이용해서 insert문에 아래와 같이 중복 처리를 해주었다.INSERT INTO TABLE_NAME VALUES () ON DUPLICATE KEY UPDATE 해당 부분을 포함하는 API를 JPA로 전환하는 과정에서 위의 SQL은 사용할 수 없다는 것을 알게 되었고우선 해당 부분은 고려하지 않고 전환을 하고 테스트를 진행해 보았다. 특정한 이유로 client 측에서 해당 api를 동시에 호출하게 되면중복 insert가 발생하게 되었다. ConstraintViolationExceptiono.h.engine.jdbc.spi.SqlExce..
비관적 락 데드락 발생 내역 (Pessimistic Lock and DeadLock)기존 서비스에 api 중에서 getOOO 수행 시, OOO가 없는 경우에는 insert를 하는 케이스가 존재하고 있다. 이 API의 로직을 확인해 보면 Mybatis를 이용해서 insert문에 아래와 같이 중복 처리를 해주었다.INSERT INTO TABLE_NAME VALUES () ON DUPLICATE KEY UPDATE 해당 부분을 포함하는 API를 JPA로 전환하는 과정에서 위의 SQL은 사용할 수 없다는 것을 알게 되었고우선 해당 부분은 고려하지 않고 전환을 하고 테스트를 진행해 보았다. 특정한 이유로 client 측에서 해당 api를 동시에 호출하게 되면중복 insert가 발생하게 되었다. ConstraintViolationExceptiono.h.engine.jdbc.spi.SqlExce..
2025.01.08 -
잠금과 트랜잭션은 서로 비슷한 개념 같지만 다르다.잠금동시성을 제어하기 위한 기능여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할 트랜잭션데이터의 정합성을 보장하기 위한 기능 격리 수준은 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨범위를 최소화해야 한다. 네트워크 작업이 있는 경우 반드시 트랜잭션에서 배제해야 한다. MySQL에서 사용되는 잠금은 크게 스토리지 엔진 레벨, MySQL 엔진 레벨로 나눌 수 있다. (https://kkang-joo.tistory.com/163)MySQL 엔진은 스토리지 엔진을 제외한 나머지 부분MySQL 엔진 레벨의 잠금은 스토리지 엔진에 영향을 ..
[MySQL] 5장 트랜잭션과 잠금잠금과 트랜잭션은 서로 비슷한 개념 같지만 다르다.잠금동시성을 제어하기 위한 기능여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할 트랜잭션데이터의 정합성을 보장하기 위한 기능 격리 수준은 하나의 트랜잭션 내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨범위를 최소화해야 한다. 네트워크 작업이 있는 경우 반드시 트랜잭션에서 배제해야 한다. MySQL에서 사용되는 잠금은 크게 스토리지 엔진 레벨, MySQL 엔진 레벨로 나눌 수 있다. (https://kkang-joo.tistory.com/163)MySQL 엔진은 스토리지 엔진을 제외한 나머지 부분MySQL 엔진 레벨의 잠금은 스토리지 엔진에 영향을 ..
2025.01.04 -
데이터의 일관성 유지 - 동시에 여러 사용자가 데이터를 수정하려고 할 때 발생할 수 있는 충돌을 방지 낙관적 락(Optimistic Lock)(비선점 락)이름 그대로 트랜잭션 대부분은 충돌이 발생하지 않는다고 낙관적으로 가정하는 방법DB의 락 기능을 사용하는 것이 아닌, 애플리케이션 계층에서 제공하는 락트랜잭션을 커밋하기 전까지는 충돌유무를 알 수 없다장점-성능이 좋고, 데드락 발생 가능성이 낮다단점-충돌이 발생한 경우 이를 해결하기 위한 추가 작업 필요(재시도, 롤백..) 비관적 락(Pessimistic Lock)(선점 락)이름 그대로 트랜잭션의 충돌이 발생한다고 가정하고 우선 락을 걸고 보는 방법DB의 락 기능을 사용 - 대표적으로 select for update 구문장점-데이터의 일관성을 유지하기..
[Lock] 낙관적 락 & 비관적 락데이터의 일관성 유지 - 동시에 여러 사용자가 데이터를 수정하려고 할 때 발생할 수 있는 충돌을 방지 낙관적 락(Optimistic Lock)(비선점 락)이름 그대로 트랜잭션 대부분은 충돌이 발생하지 않는다고 낙관적으로 가정하는 방법DB의 락 기능을 사용하는 것이 아닌, 애플리케이션 계층에서 제공하는 락트랜잭션을 커밋하기 전까지는 충돌유무를 알 수 없다장점-성능이 좋고, 데드락 발생 가능성이 낮다단점-충돌이 발생한 경우 이를 해결하기 위한 추가 작업 필요(재시도, 롤백..) 비관적 락(Pessimistic Lock)(선점 락)이름 그대로 트랜잭션의 충돌이 발생한다고 가정하고 우선 락을 걸고 보는 방법DB의 락 기능을 사용 - 대표적으로 select for update 구문장점-데이터의 일관성을 유지하기..
2024.12.18