redisson

    Lock 정리(낙관적 락과 비관적 락, 분산락, 데드락) 및 활용까지

    낙관적 락(optimistic Lock) - 충돌이 발생하지 않는다고 낙관적이라고 가정함. - DB가 제공하는 락 기능이 아니라 어플리케이션에서 제공하는 버전관리 기능을 사용함. - version 등의 구분칼럼을 사용하여 충돌방지 - 트랜잭션을 커밋하는 시점에 충돌을 알 수 잇다. - 최근 업데이트 과정에서만 락을 점유하기 때문에 락 점유시간을 최소화하여 동시성을 높일 수 있다. 예) 1. A가 먼저 접근 후 바로 뒤이어 B가 접근한다. 2. A가 해당 ROW와 version 을 업데이트한다. 3.B가 커밋 시점에 해당 ROW를 업데이트하려고 version을 체크해보니 처음과 다른 경우 어플리케이션은 예외를 발생시키고 첫번째 A의 커밋만 적용하여 정합성을 유지한다. 4. 실패된 커밋을 어플리케이션에서 후..

    동시성문제 -> Redis Redisson

    재시도가 필요하지 않은 Lock은 Lettuce를 활용할 것이고 재시도가 필요한 경우에는 Redisson을 사용할 것 입니다. setnx 메소드는 만약 키가 존재하지 않는다면 설정하게 되는 것이므로 Redis 에 계속해서 LockKeyName 이 존재하는지 확인해야만 합니다. 따라서 순회하는 동안 계속해서 Redis 에 요청을 보내게 되는 것이므로 스레드 혹은 프로세스가 많다면 Redis 에 부하가 가게 될 것이기 때문에 재시도가 필요한 경우에는 Redisson 방식을 사용할 것입니다 Redisson - Pub-Sub 기반으로 Lock 구현 제공 - Pub-Sub 방식이란, 채널을 하나 만들고, 락을 점유중인 스레드가, 락을 해제했음을, 대기중인 스레드 에게 알려주면 대기중인 스레드가 락 점유를 시도하는..