본문 바로가기
Back-End

분산 환경 Redis 잠금

by 코젼 2025. 6. 24.
728x90
반응형

Redis의 SET 명령어를 사용해서 분산 잠금을 구현할 수 있습니다. 가령, 1대 이상의 서버가 특정 Key에 대해서 SET 명령어에 NX 옵션을 추가하여 Redis에 전달하여 잠금 획득을 시도합니다.

  • NX 옵션을 사용하면 특정 Key에 해당하는 값이 존재하지 않는 경우에만 값 추가 작업이 성공합니다.
  • SET 작업을 성공적으로 수행한 서버는 잠금을 획득합니다. 잠금을 획득한 서버는 작업이 끝난 이후, Key에 해당하는 값을 제거하여 잠금을 해제합니다.

잠금 유실 가능성

만약, 레플리케이션 구성으로 이루어져 있으면 잠금이 유실될 가능성이 존재합니다. 예를 들어, 마스터 노드가 존재하고 레플리카 노드에 주기적으로 데이터를 복제하는 구성이라고 가정하겠습니다. 이때, 특정 서버가 잠금을 획득하고 작업을 수행하는 도중에 마스터 노드에 장애가 발생하는 경우에는 레플리카 노드가 마스터 노드로 승격될 수 있습니다. (failover)

위와 같은 가정에서 기존 마스터 노드가 가지고 있던 잠금용 데이터를 레플리카 노드가 가지고 있지 않은 상태라면, 작업을 처리하고 있는 서버의 잠금이 유실됩니다. 즉, 복제 지연으로 인해 분산 잠금의 상호 배제라는 특성을 잃게 됩니다. 이러한 문제를 해결하기 위해서 RedLock 알고리즘이 등장했습니다.

해결 방안: RedLock 알고리즘

RedLock 알고리즘은 1대 이상의 단일 레디스 노드들을 이용하여 분산 잠금을 구현하는데요. 과반수 이상의 노드에 잠금을 획득한다면 잠금을 획득하는 것으로 간주합니다. 만약, 5개의 단일 레디스 노드가 존재한다고 가정하겠습니다. 작업 서버가 모든 노드에게 잠금 획득을 시도했는데, 3개(과반수) 노드에서 잠금을 획득다면, 분산 잠금을 획득한 것으로 판단합니다.

추가 학습 자료

728x90
반응형

'Back-End' 카테고리의 다른 글

테스트 더블  (0) 2025.06.27
무중단 배포  (0) 2025.06.25
Graceful Shutdown 의 중요성  (0) 2025.06.20
CQRS 패턴  (1) 2025.06.19
CI/CD 파이프라인  (0) 2025.06.18

댓글