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..
Spring for Redis[1/3]: Spring Data Redis 그리고 Redisson의 필요성(Spring Data Redis)
·
🍃SpringBoot
들어가며항상 프로젝트에서는 Redis를 두 가지 목적으로 사용하게 되었다. 첫 번째는 JWT Refresh Token 저장이다. Refresh Token은 만료 시간이 존재하고, 빠르게 조회되어야 하며, 로그아웃이나 재발급 시 삭제 또는 갱신될 수 있다. 이런 특성 때문에 Redis와 잘 어울린다. 이 경우에는 사실 Spring Data Redis만으로도 충분하다.implementation 'org.springframework.boot:spring-boot-starter-data-redis'RedisTemplate 또는 StringRedisTemplate을 사용하면 Refresh Token 저장, 조회, 삭제 같은 기본적인 Redis 작업은 충분히 처리할 수 있다. 하지만 두 번째 요구사항에서 고민이 ..