Spring for Redis[3/3]: Redisson Distributed Lock 구현(SETNX)
·
🍃SpringBoot
1. Redis Distributed Lock 구현 전략1) Redis를 사용한다고 모두 같은 분산 락은 아니다Redis 기반의 분산 락을 도입하기로 결정한 후, 곧바로 두 번째 설계적 갈림길에 마주쳤다. "이 분산 락을 어떤 방식으로 구현할 것인가?"에 대한 문제였다. 가장 먼저 떠오르는 직관적인 방법은 이미 프로젝트에 내장되어 있는 Spring Data Redis의 RedisTemplate을 이용해 직접 락 메커니즘을 빌드하는 것이다. 흔히 알려진 SETNX (Set if Not Exists) 명령어 구조다.// Spring Data Redis를 활용한 원시적인 락 획득 시도 (SET NX EX)Boolean acquired = redisTemplate.opsForValue() .setI..
Spring for Redis[2/3]: Redisson 의사결정(Optimistic Lock에서Distributed Lock)
·
🍃SpringBoot
1. Redisson으로 분산 락 구현하기앞에서 Spring Data Redis만으로 분산 락을 직접 구현할 때 마주치는 수많은 예외 상황(락 소유자 검증, TTL 관리, 원자적 락 해제 등)을 살펴보았다. 결론은 하나다. "직접 완벽하게 짜는 것은 생각보다 매우 어렵고 위험하다." Redisson은 바로 이러한 번거롭고 복잡한 분산 시스템의 동시성 문제들을 단 몇 줄의 코드로 우아하게 해결하기 위해 등장한 라이브러리다.1.1 Redisson의 핵심 객체: `RLock`Redisson에서 분산 락은 RLock이라는 객체로 추상화되어 제공된다.RLock lock = redissonClient.getLock("lock:product:1");개발자는 이 코드 한 줄만으로 Redis에 `lock:product..