<aside> 👨‍💻 Redis를 이용한 분산락을 적용하는 것이 서버에 효과가 있을까? 이전에 사용했던 synchronized 블록과 현재 Redis를 이용한 분산락의 차이점과 각각의 장단점을 비교해보자.

</aside>

1. 기존 synchronized 블록


기존 코드에서는 synchronized 블록을 사용하여 스레드 간의 동시성을 제어하고 있었다. synchronized 블록은 한 JVM 내에서만 작동하며, 같은 인스턴스를 사용하는 여러 스레드가 동시에 접근하는 것을 막는다. 하지만 이 방법에는 몇 가지 한계가 있다:

public void issueRequestV1(CouponIssueRequestDto requestDto) {
		// 동시성 제어를 위한 lock
    synchronized (this) {
        couponIssueService.issue(requestDto.couponId(), requestDto.userId());
    }
    log.info("쿠폰 발급 완료. couponId: %s, userId: %s".formatted(requestDto.couponId(), requestDto.userId()));
}

2. Redis를 이용한 분산락


Redis를 이용한 분산락을 사용하면 여러 대의 서버(분산 환경)에서도 락을 획득하고 해제하는 것을 관리할 수 있다. RedissonClient를 사용한 예제는 다음과 같은 장점을 제공한다: