# distributed lock
Spring에서 Redis 분산 락 적용하기 (Redisson 사용)
분산 락(Distributed Lock)이란? 다중 스레드 환경에서, 어떤 자원에 대해 동시에 접근 가능한 스레드가 단 한 개만 되도록 강제하는 것을 Lock (혹은 Mutex, 상호 배제)이라고 한다. Java 기반 웹 애플리케이션에서 Lock을 구현하는데 가장 쉬운 방법은 synchronized 키워드 (Kotlin의 경우 @Synchronized 어노테이션)을 사용하는 것이다. 그러나, 부하 분산 등을 위해 서버가 다중화된 환경에서는 synchronized가 지정된 코드에 대해 다른 서버 간의 배제성이 보장되지 않는다. 따라서, 다중화된 서버 사이에 배제성을 확보하기 위한 공유된 자원을 사용해야 한다. 이는 분산된 자원에 대한 잠금(Lock)이며, "분산 락(Distributed Lock)"이라고 한다. 외부 자원을 통한 Lock 구현은 여러 가지 방법이 있지만, DB의 부하를 줄이고 메모리 기반으로 빠

Redisson 분산락을 이용한 동시성 제어
동시성 문제를 해결하는 여러 방법이 있지만, 여기선 Redis 클라이언트인 Redisson 분산락을 이용해서 예제를 통한 동시성을 제어하는 포스팅을 진행하겠습니다. 1. 분산 서버 동시성(Concurrency) 제어 ❓ 왜 필요한가 여러 요청들이 한 자원에 대해서 공유할 때, 각 분산 DB의 동기화가 여러 요청의 동기화 속도를 못 따라 가는 상황이 발생합니다. 이에 대해 데이터 정합성은 깨지게 되고, 데이터 동시성 문제가 발생하게 됩니다. 예를 들어, 위와 같이 한 번에 여러 구매 요청이 들어왔을 경우 수량이라는 자원을 동시에 사용할 경우 여러 수량의 커밋되거나 롤백되는 수량의 동기화가 다른 서

redis의 분산락을 이용한 공유 자원 관리
github 바로가기 distributed lock 여러 독립된 프로세스에서 하나의 자원을 공유해야 할 때, 데이터에 결함이 발생하지 않도록 하기 위해서 분산 락을 활용할 수 있다. 분산 락을 구현하기 위해서는 데이터베이스 등 여러 프로세스가 공통으로 사용하는 저장소를 활용해야 하는데, 이번 실습에서는 레디스를 이용해 분산 락을 활용하는 방법을 학습해보았다. Redlock https://redis.io/topics/distlock redis에서는 분산 락을 구현한 알고리즘으로 redlock이라는 것을 제공하고 있다. 이 redlock은 다양한 플랫폼에서 구현되어 있는데, 자바에서의 redlock 구현체는 redisson이라고 한다. 이 redisson을 이용해 분산 락을 활용할 것이며, 정보의 결함 없이 공유 자원 관리가 잘 되는지 확인해 볼 것이다. Code `Ma