T
TechInsights
목록으로
BackEnd•2023. 05. 18.

풀필먼트 입고 서비스팀에서 분산락을 사용하는 방법 - Spring Redisson

컬리
컬리 Engineering Team
풀필먼트 입고 서비스팀에서 분산락을 사용하는 방법 - Spring Redisson

핵심요약

원문 보기

어노테이션 기반 분산 락 구현 방법을 소개하며, 이를 통해 여러 인스턴스 환경에서 데이터 일관성을 유지하는 기술적 접근 방식을 다룹니다.

어노테이션 기반 분산 락 구현 가이드

분산 락의 필요성 및 기본 개념

  • 분산 환경에서 여러 서비스 인스턴스가 공유 리소스에 동시에 접근할 때 발생하는 **경쟁 조건(Race Condition)**을 방지합니다.
  • 데이터 일관성과 무결성을 보장하기 위해 특정 코드 블록의 실행을 단일 인스턴스로 제한하는 메커니즘이 필수적입니다.
  • 주로 Redis 또는 Zookeeper와 같은 분산 코디네이션 서비스를 활용하여 전역적인 락을 관리합니다.

어노테이션 기반 분산 락 아키텍처

  • Spring AOP를 활용하여 **선언적(Declarative)**으로 락을 적용하는 @DistributedLock 커스텀 어노테이션을 정의합니다.
  • 어노테이션이 적용된 메서드 호출 시, Aspect가 동작하여 메서드 실행 전 락을 획득하고 실행 후 락을 해제합니다.
  • 락 키는 메서드명과 인자값을 조합하여 동적으로 생성하며, 필요에 따라 Spring Expression Language (SpEL)를 사용하여 유연하게 설정할 수 있습니다.

구현 상세 및 고려사항

  • Redisson 라이브러리를 사용하여 Redis 기반의 분산 락을 손쉽게 구현하고, 워치독(Watchdog) 기능을 통해 락 만료 시간을 자동으로 연장합니다.
  • 락 획득 실패 시 재시도(Retry) 로직을 구현하거나, 특정 예외를 발생시켜 클라이언트에 알리는 방식을 고려해야 합니다.
  • 데드락 방지를 위해 락 획득 시간 제한(leaseTime)과 락 대기 시간 제한(waitTime)을 적절히 설정하는 것이 중요합니다.
  • 락 사용 시 발생할 수 있는 네트워크 지연이나 서비스 장애 상황에 대한 강건한(Robust) 오류 처리 로직이 필요합니다.
#BackEnd#Architecture
컬리
컬리

컬리 Engineering Team

기술 인사이트를 전달하는 공식 채널

You might also like

View all
아이지에이웍스 AI 에이전트 클레어: Amazon Bedrock 기반 Text-to-SQL/Chart 에이전트로 이룬 데이터 분석 혁신

아이지에이웍스 AI 에이전트 클레어: Amazon Bedrock 기반 Text-to-SQL/Chart 에이전트로 이룬 데이터 분석 혁신

100년 가는 프론트엔드 코드, SDK

100년 가는 프론트엔드 코드, SDK