대용량 처리 - 비관적락, 낙관적락, 분산락 비교

박경희·2025년 3월 19일
0

공부를 해보자

목록 보기
31/40

1️⃣ 비관적 락

  • 먼저 락을 걸고 다른 트랜잭션의 접근을 차단하는 방식이다.

  • 충돌을 완전히 방지할 수 있지만, 대기 시간이 길어지고 동시성이 낮아지는 단점이 있다.

  • 은행 계좌 이체나 좌석 예약과 같은 충돌이 치명적인 경우에 사용한다.

2️⃣ 낙관적 락

  • 트랜잭션이 끝날 때 데이터가 변경되지 않았는지 검증하는 방식이다.

  • 충돌이 적을 경우 성능이 좋지만, 충돌이 발생하면 재시도가 필요하다.

  • 낙관적 락(Optimistic Lock)을 사용하면 트랜잭션이 데이터에 대한 접근을 차단하지 않고,
    최대한 여러 사용자가 동시에 데이터를 읽고 수정할 수 있도록 허용하는 방식이다.

  • 대량 데이터를 처리할 때 낙관적 락을 선택하면, 트랜잭션을 차단하지 않고 동시 접근성을 높일 수 있다.

  • 즉, 여러 사용자가 동시에 데이터를 읽고 수정할 수 있으며, 데이터 충돌이 발생하면 갱신 시점에서 해결하는 방식이다.

비관적락과 낙관적락 한 줄 비교

관적 락은 데이터 변경을 시도하는 동안 다른 트랜잭션의 접근을 차단하지만,낙관적 락은 차단하지 않고 충돌이 발생했을 경우에만 처리하는 방식이다.

3️⃣ 분산 락

  • 여러 서버에서 같은 자원에 접근할 때 충돌을 방지하는 방식이다.
  • 주로 Redis 등을 활용하여 구현하며, 마이크로서비스 환경에서 특정 리소스에 대한 동시 접근을 제어할 때 사용된다.

Redis를 활용한 분산 락 (Distributed Lock)

  • 마이크로서비스 환경에서는 여러 노드(서버)에서 동일한 리소스에 접근할 때 동시성을 제어하는 것이 중요하다.
  • 이때 Redis와 같은 분산 시스템을 활용하여 "분산 락(Distributed Lock)"을 구현할 수 있다.
  • 이렇게 하면 다중 노드 환경에서도 특정 리소스에 대한 동시 접근을 안전하게 제어할 수 있다.

1. 왜 Redis를 사용하는가?

분산 환경에서 발생하는 문제점

  • 여러 서비스 인스턴스(마이크로서비스)가 동시에 동일한 데이터에 접근하면 데이터 충돌이 발생할 수 있다.
  • 하나의 서버에서만 락을 관리하면 다른 서버에서 이를 인식하지 못한다. → 따라서 중앙 집중형 락 시스템이 필요하다.

Redis의 역할

2. Redis를 활용한 분산 락 (RedLock)

1) RedLock 개념

  • Redis는 단일 노드에서 락을 설정할 수 있지만, 여러 노드에서 락을 관리하는 RedLock 알고리즘을 사용하면 고가용성을 보장할 수 있다.

2) RedLock을 사용하는 방식

  1. SETNX (Set if Not Exists) 명령어를 활용하여 락을 설정

    • 한 번에 하나의 서비스만 특정 키를 설정할 수 있도록 보장
  2. TTL(Time-To-Live, 만료 시간) 설정

    • 특정 시간이 지나면 자동으로 락 해제 (예: 10초)
  3. 락을 해제할 때 동일한 프로세스만 해제 가능하도록 보장

  4. 분산 환경에서는 여러 Redis 노드에서 락을 획득하여 신뢰성을 향상

0개의 댓글