0. 들어가며


분산 시스템을 운영하다 보면 여러 서버가 동시에 동일한 자원(데이터베이스, 캐시, 파일 등)에 접근해야 하는 상황이 자주 발생합니다. 이때 동시성 문제를 해결하지 않으면 데이터 불일치나 충돌이 발생할 수 있습니다.

이를 방지하기 위해 우리는 **락(Lock)**을 사용합니다. 분산 환경에서는 Redis를 이용한 분산락을 사용할 수 있는데요. 이때 주의할 점들이 있습니다. 예를 들어, 하나의 Redis 인스턴스를 이용해 락을 관리한다고 가정해 봅시다. 만약 이 Redis 서버가 다운되면 어떻게 될까요? 현재 락이 유지되고 있는지 확인할 수 없게 되고, 여러 개의 클라이언트가 동시에 동일한 자원에 접근하거나 모두가 접근하지 못할 위험이 생깁니다.

이 문제를 해결하기 위해 Redis 기반의 Redlock 알고리즘이 등장했습니다. Redlock은 다수의 독립적인 Redis 인스턴스를 활용하여 보다 안전한 분산 락을 제공하는 알고리즘입니다. 하지만, Redlock도 완벽한 해결책은 아닙니다. 클럭 드리프트(Clock Drift), 네트워크 지연 등의 문제를 어떻게 해결할 것인지 고민해야하죠.

📌 이 글에서는

  1. Redis 기반의 락 구현 방식과 그 한계를 살펴보고
  2. Redlock 알고리즘의 원리를 이해해보며
  3. 실무에서 발생할 수 있는 문제와 해결책을 알아봅니다.

1. Redis 기반 락의 기본 개념과 단일 인스턴스 방식의 한계


1.1 단일 Redis 인스턴스 기반 락 구현 방식

Redis는 빠른 성능과 단순한 사용법 덕분에 **분산락(Distributed Lock)**을 구현하는 데 널리 사용됩니다. 기본적인 락을 단일 Redis 인스턴스를 활용해 구현하는 방법은 다음과 같습니다.

SET my_lock <random_value> NX PX 3000

각 옵션의 의미