핵심 정리
- Lettuce : setnx(set if not exist) 명령어로 분산락을 구현한다. key value 저장할 때 key가 없는 경우에만 저장하는 점을 활용해 락을 키로 저장한다. spin lock 방식의 락을 사용하므로 레디스에 부하가 갈 수 있어 지연 시간을 주어야하고, 재시도 시 동작 개발자가 구현해야한다. Spring Redis가 기본으로 사용한다. 락 재획득이 필요하지 않을 때 사용한다.
- Redisson : pub sub 기반으로 lock 구현 제공하므로 부하가 적고 락 획득 재시도를 기본으로 제공한다. 구현이 복잡하고 외부 라이브러리에 의존한다.
작업 환경 세팅
레디스 컨테이너 실행
docker pull redis
docker run --name myredis -d -p 6379:6379 redis
의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.redisson:redisson:3.23.2'
Lettuce

- setnx(set if not exist) 명령어로 분산락 구현 : key value 저장할 때 key가 없는 경우에만 저장하는 방식. 락이 저장되어있는 동안은 다른 스레드가 접근할 수 없다.
- spin lock 방식 : 재시도 시 동작 개발자가 구현