본문 바로가기

Lock5

[Spring + JPA] jpa에서 Repository를 이용한 비관적락을 구현해봅시다. With MariaDB 안녕하세요. 오늘은 이전 시간에 이어서 비관적락을 JPA를 통해 이론적인 부분과 이를이용하여 구현하는 방법, 그리고 도출되는 쿼리를 알아보도록 하는 시간을 가져보도록 하겠습니다. 비관적 락 비관적락은 내가 접근하고 하는 Database 리소스에 다른사람이 접근조차 하지못하도록 락을 걸고 작업을 진행하는 것을 말합니다. 물론 여기서 접근이라는 것은 READ 작업과 WRITE 작업이 분할되어 있습니다. 경우에 맞춰 둘다 불가능할지 아니면 하나만 가능할지를 정하는것이 가능합니다. 비관적락을 사용할 때 2가지 옵션을 선택할 수 있습니다. 배타락(exclusive lock)과 공유락(shared lock)입니다. 공유락을 걸면 다른 트랜잭션에서는 읽기는 가능하지만 쓰기는 불가능힙니다. 베타락에서는 다른 트랜잭션에.. 2021. 8. 16.
[JPA] jpa에서 Repository를 이용한 낙관적락을 구현해봅시다. 안녕하세요. 이전 시간에 저희는 [database] 낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock) 포스팅에서 낙관적락과 비관적락의 이론에 대해서 알아보았었습니다. 오늘은 이어서 Spring의 JPA에서 낙관적락을 구현하는 방법과 결과에 대해서 알아보는 시간을 가져보도록 하겠습니다. 환경설정 오늘의 테스트를 진행하기 위해서는 Spring과 JPA의 설정이 필요합니다. 해당 설정에 대한 부분은 생략하도록 하겠습니다. 만약 빌드도구로 gradle kotlin dsl 을 이용하신다면 [kotlin + Spring] 코틀린, Spring Boot 환경에서 JPA 사용하기, plugin과 함께를 참고해주시면 좋을것 같습니다. 테스트 Entity 오늘 테스트를 도와줄 Entit.. 2021. 8. 14.
[database] 낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock) 안녕하세요. 오늘은 낙관적 락과 비관적 락의 개념에 대해서 알아보는 시간을 가져보도록 하겠습니다. DB 충돌 상황을 개선할 수 있는 방법 database에 접근해서 데이터를 수정할 때 동시에 수정이 일어나 충돌이 일어날 수 있습니다. 우리는 이런 상황을 해결할 수 있도록 코딩을 진행해야합니다. 어떻게 해결할 수 있을까요 ? 첫번째, 테이블의 row에 접근시 Lock을 걸고 다른 Lock이 걸려 있지 않을 경우에만 수정을 가능하게 할 수 있습니다. 두번째, 수정할 때 내가 먼저 이 값을 수정했다고 명시하여 다른 사람이 동일한 조건으로 값을 수정할 수 없게 하는 것입니다. 비관적 락(pessimistic lock) 비관적 락은 Reeatable Read 또는 Serializable 정도의 격리성 수준에서 가.. 2021. 7. 9.
[데이터베이스] MySQL의 Lock과 트랜잭션 모델 안녕하세요. 이전 포스팅, [DataBase] Lock에 대해서 알아보자 - 기본편에서 우리는 Lock이란 어떤 것이고 DBMS에서는 Lock을 어떤 경위로 사용는지에 대해서 자세하게 알아보았습니다. 도움이 되셨을까요? 포스팅에서도 말했다시피 Lock은 DBMS마다 조금씩 구현하는 요소들이 다릅니다. 대표적인 예로 MySQL은 읽는것에 대해서도 Lock(공유 락)을 잡는 반면 Oracle에서는 Lock을 전혀 잡지 않습니다. 오늘은 Mysql의 Lock과 트랜잭션에 대해서 공식문서를 보며 한번 파헤쳐보도록 하겠습니다. 이번 포스팅은 Lock에 대해서 기본적인 지식이 있다라는 것을 전제로 만들어 졌습니다. 혹시 개념이 없으시거나 미흡하다고 생각되시는 분들은 Lock에 대한 포스팅및 트랜잭션 및 격리성에 대.. 2020. 11. 4.
[데이터베이스] Lock에 대해서 알아보자 - 기본편 안녕하세요. 오늘은 DataBase의 Lock에 대해서 알아보고 정리해보는 시간을 가져보도록 하겠습니다. DataBase는 데이터를 영속적으로 저장하고 있는 시스템입니다. 이런 시스템은 같은 자원(데이터)에 대해서 동시에 접근하는 경우가 생길 수 밖에 없습니다. 이럴 경우 데이터가 오염 될 수 있는데 그렇게 되지 않도록 데이터의 일관성과 무결성을 유지해야할 필요가 있습니다. 예를 들어 수강신청 시스템에서 1명만이 정원으로 남게되었습니다. 여기서 2사람이 거의 동시에 버튼을 눌렀습니다. 성공은 1명만 되야합니다. 이런 상황에서 DBMS(DataBase Management System)가 사용하는 공통적인 방법이 Lock이라는 것입니다. Lock Lock이란 트랜잭션 처리의 순차성을 보장하기 위한 방법입니다.. 2020. 10. 29.