Redis 분산 락이란?
- 분산 환경에서 여러 서버/인스턴스가 동일한 자원에 접근할 때 발생하는 동시성 문제를 해결하기 위한 기술입니다.
- Spring Boot와 Redis를 활용하여 구현할 수 있는 세 가지 주요 방식이 있습니다.
세 가지 주요 분산 락 방식
1. Simple Lock (SET NX EX)
- 동작 원리: Redis의 SET key value NX EX seconds 명령을 사용하여 락 획득, 없을 때만 설정(NX)하고 만료 시간(EX)을 지정
- 장점: 구현이 단순하고 가벼움
- 단점: 클라이언트 장애 시 락 만료 전까지 대기 필요
- 활용 사례: 짧은 작업, 간단한 중복 요청 방지
2. Spin Lock (Busy-Waiting)
- 동작 원리: Simple Lock 방식에 락 획득 실패 시 일정 시간 대기 후 재시도하는 로직 추가
- 장점: 락 획득 확률 증가, 실패 시 자동 재시도
- 단점: Redis 서버에 반복 요청으로 부하 증가
- 활용 사례: 재고 관리, 결제/주문 처리와 같이 락 획득이 중요한 작업
3. Pub/Sub Lock (Event-based)
- 동작 원리: 락 획득 실패 시 Redis 채널을 구독하고, 락 해제 시 채널에 메시지를 발행하여 대기 중인 클라이언트에게 알림
- 장점: 불필요한 폴링 감소, 이벤트 기반 효율적 처리
- 단점: 구현 복잡도 높음, 메시지 전달 보장 문제
- 활용 사례: 분산 스케줄러, 대기 시간이 긴 작업
분산 락 선택 가이드