분산 락 구현을 위한 다양한 방법 비교

1. Redis (SETNX) - 메모리 기반

Redis는 기본적으로 SETNX 명령을 통해 분산 락을 제공하며, 락 획득과 TTL 을 설정하는 방식으로 간단하게 락 관리를 구현할 수 있습니다. 그러나 Redis의 기본 락 기능은 단일 노드에 의존하기 때문에 Redis 서버가 장애가 발생하거나 락이 제대로 해제되지 않을 경우, 데드락(deadlock) 상황이 발생할 수 있습니다.

redis.jpg

2. 데이터베이스 - 디스크 기반

데이터베이스 락은 행 레벨 락이나 트랜잭션 락을 통해 분산 락을 구현할 수 있습니다. 별도의 기술 도입 없이 데이터베이스의 기본 기능을 활용할 수 있다는 장점이 있습니다.

낙관적락.jpg

3. Redisson - 메모리 기반

Redisson은 데이터를 메모리(RAM)에 저장하여, 디스크 I/O에 비해 훨씬 빠르게 락을 획득하고 해제할 수 있습니다. 분산 환경에서 인스턴스가 증가해도 Redis 클러스터를 통해 쉽게 확장할 수 있습니다.

redisson.jpg


3. 최종 결론

저희 프로젝트는 MSA 를 사용하고 있어, 대용량 트래픽을 처리할 수 있어야 했습니다. 단일 노드 환경이지만, 효율적인 락 관리성능을 유지하기 위해 안정적인 분산 락 관리 기술이 필요했습니다.

또한, 데이터베이스 락성능 저하확장성 부족 문제로 인해, Redis 기반의 Redisson을 선택하게 되었습니다.