Lock3 존재하지 않은 데이터에 대한 잠금의 영향 들어가며이전 글에서 삽입 연산에 대해서 발생하는 동시성 문제를 해결하기 위해서 Rediss의 분산락 또는 MySQL의 네임드락을 통해 순서를 제어한다는 글을 작성하였습니다. 하지만 이후에 비관적락에 대해 학습하다 보니, 존재하지 않은 데이터에 대해서도 잠금을 걸 수 있다는 것을 알 수 있었습니다. 그렇다면 다시 한번 삽입 과정에서 락을 통해 추가적인 구현을 할 필요성에 대해 생각해봐야 할 것 같아 글을 작성하게 되었습니다. [DB] MySQL NamedLock vs Redisson 락 관리.들어가며이전 글(https://kongdevlog.tistory.com/20)에서 Named Lock을 통해 삽입 작업에서의 동시성을 제어하였습니다.다만 이 과정에서, Redisson을 사용하는 방법이 더 좋은 방법.. 2025. 6. 15. [DB] 인덱스와 잠금 들어가며인덱스를 통해 효율적인 탐색을 하도록 하여 DB의 성능을 높이는데 기여하는 것은 매우 중요한 사실이지만, 그 외에도 인덱스를 통해 탐색을 하며 잠금을 건다는 사실 역시 생성(Insert)/수정(Delete)에도 큰 영향을 미친다는 사실을 확인하고자 글을 작성하게 되었습니다.사전 테이블과 데이터다음과 같이 약 1만개의 데이터를 삽입하였습니다. 이제 인덱스가 걸리지 않은 데이터를 잠그는 경우, 어떤 현상이 발생하는지 직접 확인해보겠습니다.실험현재 name 컬럼에는 인덱스가 존재하지 않기 때문에select * from test_table where name = 'User_7000' for update;쿼리를 실행하고, 어떤 행들에 잠금이 걸리는지 확인해보겠습니다.이와 함께 실제 PK를 확인해보니 1만개.. 2025. 6. 2. [DB] 행 단위 잠금에 대한 생각 정리. 들어가며최근 Real MySQL 8.0 1권을 읽으면서, 행단위 잠금에 대해 한번 더 생각하게 되었습니다.이전 인턴 업무를 진행할 때에 상품 재고를 업데이트하는 트랜잭션을 작성할 때에도, Update 할 때 발생하는 행 잠금을 활용하여 이슈를 해결하였습니다.이때 특정 행에 대한 잠금을 획득하는 경쟁 상태가 발생할 수 있다는 것을 간과하였습니다.데드락 발생 가능 상황위의 그림을 보시면 아시겠지만, 이를 예방할 수 있는 방법이 존재하였습니다. 바로 잠금 발생의 순서를 오름차순 또는 내림차순으로 강제하는 것입니다. 그렇게 되면, 교착 상태에 빠지는 경우는 사라지게 됩니다.그렇다면 행 단위 잠금만으로 동시성 문제를 해결할 수 있을 것 같은데, 왜 분산락과 같은 기법을 사용할까..?vs 분산락.이전 프로젝트에서 .. 2025. 2. 14. 이전 1 다음