먼저 락을 걸고 다른 트랜잭션의 접근을 차단하는 방식이다.
충돌을 완전히 방지할 수 있지만, 대기 시간이 길어지고 동시성이 낮아지는 단점이 있다.
은행 계좌 이체나 좌석 예약과 같은 충돌이 치명적인 경우에 사용한다.
트랜잭션이 끝날 때 데이터가 변경되지 않았는지 검증하는 방식이다.
충돌이 적을 경우 성능이 좋지만, 충돌이 발생하면 재시도가 필요하다.
낙관적 락(Optimistic Lock)을 사용하면 트랜잭션이 데이터에 대한 접근을 차단하지 않고,
최대한 여러 사용자가 동시에 데이터를 읽고 수정할 수 있도록 허용하는 방식이다.
대량 데이터를 처리할 때 낙관적 락을 선택하면, 트랜잭션을 차단하지 않고 동시 접근성을 높일 수 있다.
즉, 여러 사용자가 동시에 데이터를 읽고 수정할 수 있으며, 데이터 충돌이 발생하면 갱신 시점에서 해결하는 방식이다.
관적 락은 데이터 변경을 시도하는 동안 다른 트랜잭션의 접근을 차단하지만,낙관적 락은 차단하지 않고 충돌이 발생했을 경우에만 처리하는 방식이다.
1) RedLock 개념
2) RedLock을 사용하는 방식
SETNX (Set if Not Exists) 명령어를 활용하여 락을 설정
TTL(Time-To-Live, 만료 시간) 설정
락을 해제할 때 동일한 프로세스만 해제 가능하도록 보장
분산 환경에서는 여러 Redis 노드에서 락을 획득하여 신뢰성을 향상