ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 레디스(Redis)를 이용해서 락(lock)을 거는 이유?
    Server 2025. 5. 9. 16:42
    728x90
    반응형

    많은 트래픽 환경에서 Redis를 이용한 중복 처리 방지 방법

    대규모 트래픽 환경에서 하나의 요청이 중복 실행되는 것을 방지하기 위해 분산 락(distributed lock)을 사용하는 것이 일반적입니다. 그 중 Redis를 활용한 락 처리 방식이 많이 사용됩니다.

    🔒 왜 Redis를 사용하는가?

    • 빠른 속도: Redis는 인메모리 기반으로 작동하기 때문에 락 처리가 매우 빠릅니다.
    • 분산 시스템에서의 활용성: 여러 서버에서 동시에 Redis에 접근하여 락을 확인할 수 있습니다.
    • SETNX 명령어: Redis의 SETNX (SET if Not eXists)는 락을 구현하는 데 유용한 명령어입니다.
    • TTL 설정 가능: 락에 만료 시간을 설정하여 데드락(deadlock)을 방지할 수 있습니다.

    ✅ Redis로 중복을 100% 방지할 수 있을까?

    이론적으로는 Redis 락을 올바르게 사용하면 중복을 방지할 수 있습니다. 하지만 다음 조건을 충족해야만 실질적으로 100%에 가까운 중복 방지가 가능합니다:

    1. 락 획득은 SET key value NX PX (Redlock 패턴) 방식으로 해야 함
    2. 락 해제는 락을 획득한 주체만 해제할 수 있어야 함
    3. 멀티 노드 환경에서는 Redlock 알고리즘처럼 다중 Redis 인스턴스를 이용한 방식이 권장됨

    하지만 Redis 단일 노드 장애나 네트워크 이슈 등의 외부 요인으로 인해 락이 실패하거나, 두 요청이 락을 거의 동시에 획득하는 edge case도 존재할 수 있습니다. 그래서 100% 보장은 어렵고, 거의 완벽에 가까운 수준이라고 보는 것이 정확합니다.

    💡 Redis 말고도 사용할 수 있는 락 방법들

    • DB 기반 락: DB의 row-level lock이나 unique 제약 조건을 이용
    • ZooKeeper: 분산 락 관리에 특화된 시스템으로 강력한 일관성과 안정성을 보장
    • Etcd: Kubernetes 등에서 많이 사용하는 분산 키-값 저장소로 락 기능을 제공
    • Java 동기화 키워드: 단일 인스턴스 환경에서는 synchronizedReentrantLock도 유용

    📝 정리

    Redis는 빠르고 확장성이 좋아 분산 환경에서 락 처리에 매우 적합합니다. 하지만 정확한 락 구현 방식과 장애 대비 설계가 필요하며, 시스템의 특성에 따라 다른 방식도 고려할 수 있습니다.

    728x90
    반응형

    댓글

Designed by Tistory.