안녕세계

커머스 서비스를 이용하다보면 "주문 후 10분 이내 미결제시 자동 취소됩니다." 와 같은 안내를 볼 수 있습니다. 이처럼 이미 발생한 작업을 후 일정 시간 뒤에 후 처리하는 방법으로 지연 큐(DelayQueue)를 활용할 수 있으며, 대표적인 구현 방식으로 Java 표준 DelayQueue, Amazon SQS DelayQueue, Redis 기반 DelayQueue가 있습니다. 이 글에서는 각 구현 방식에 대해 간략히 살펴보고, 이 중 Redis 기반 DelayQueue의 구체적인 사용 예시를 공유하겠습니다.Java 표준 Delay QueueJava 표준 java.util.concurrent.DelayQueue는 JDK에 내장된 블로킹 지연 큐입니다. DelayQueue는 Delayed 인터페이스를 구..

이전 포스팅에서 Redisson을 사용하여 Redis 분산 락을 손 쉽게 구현할 수 있는 방법에 대해서 알아보았습니다. 이번 포스팅에서는 분산 분산 락을 거는 위치에 따라 발생할 수 있는 문제에 대해 알아보고 권장하는 분산 락 위치에 대해 알아봅니다.트랜잭션 이후 분산 락분산 락을 건다는 의미는 결국 동일 자원에 대해 동시 작업하는 것을 제어하기 위함입니다. 그렇다면 우리는 분산 락을 건 상태에서 데이터베이스 트랜잭션과 관련된 작업을 시작해야합니다. 그런데 만약 데이터베이스 트랜잭션을 먼저 시작하고 분산 락을 걸게되면 어떻게 될까요? 데이터베이스 트랜잭션이 먼저 시작된 이후 분산 락을 걸어도 별 다른 문제가 발생하지 않는다고 생각할 수도 있습니다. 다음 그림을 살펴보겠습니다.위 그림에서 처럼 트랜잭션 시..

이전 포스팅에서는 Redisson을 사용하여 Redis 분산 락을 손 쉽게 구현할 수 있는 방법에 대해서 알아보았습니다. 이번 포스팅에서는 특정 요구 사항을 분산 락과 상태 키를 사용하여 동시성 이슈를 제어하며 동시에 작업을 처리할 수 있는 방법에 대해 알아보겠습니다.일반적인 분산 락 사용분산 락을 활용하는 일반적인 방식은 먼저 락을 획득한 다음, 특정 작업(여기서는 compute 메서드)을 실행하고 나서 락을 해제하는 순서로 진행됩니다. 동시성 문제가 발생할 수 있는 작업에 분산 락을 적용하면, 동시 작업시 발생할 수 있는 문제들을 안정적으로 작업을 처리할 수 있습니다. 아래 코드는 lockKey에 대해 락을 확득하고, 로직을 실행한 뒤 락을 해제하는 분산 락 사용의 일반적인 예시입니다.class Re..

분산 락이란?분산 락(Distributed Lock)은 다수의 서버(또는 프로세스)가 동시에 같은 자원에 접근할 때 발생할 수 있는 동시성 문제를 해결하기 위해 사용되는 동기화 메커니즘입니다. 분산 락의 핵심은 "하나의 자원에 대해 한 번에 하나의 서버만 작업을 수행할 수 있다"는 것입니다. 이를 통해 데이터의 동시 변경을 막고, 시스템 전체의 데이터 일관성을 보장합니다. 분산 락에 대해 이해하기 위해서 먼저 락(Lock)의 기본 개념과 분산 시스템(Distributed System)의 특성을 알아보겠습니다.락이란?락은 한 번에 하나의 프로세스만 특정 자원을 사용할 수 있도록 보장하는 메커니즘입니다. 대표적인 예로 데이터베이스 레코드 락이 있습니다. 데이터베이스 레코드 락은 프로세스1이 데이터A를 변경하..