목록 보기
Redis를 활용한 공유 자원 동시성 처리
백엔드

Redis를 활용한 공유 자원 동시성 처리

뷰노
뷰노
2021년 2월 15일

두줄요약

Redis Key와 Session ID로 공유 파일의 점유 락을 구현했습니다. 만료 이벤트와 WebSocket 종료를 활용해 잔존 락을 해제했습니다.

문제 상황

  • 그룹 구성원이 파일을 공유·수정·삭제하는 환경에서 동일한 상태 보장을 위한 동시성 제어 필요
  • 점유 사용자의 이탈·비정상 종료 시 락이 남아 다른 사용자의 접근을 막는 서비스 장애 위험

구조와 흐름

  • 공유 자원별 Redis Key와 로그인 Session ID Value로 점유자 식별
  • 락 획득 시 키 존재 여부 확인, 락 해제 시 해당 자원 키 삭제
  • WebSocket 연결 종료를 사용자 이탈 신호로 취급해 Session ID 기반 보유 락 일괄 해제

해결 방법

  • expire time을 적용한 shadowKey로 락 만료 감지와 원본 점유 정보 유지
  • Redis Pub/Sub 구독으로 키 만료 이벤트를 수신해 프론트엔드에 락 해제 자원 전달

주의할 점

  • Redis의 단일 스레드 원자성 활용과 장시간 실행 명령으로 인한 명령 처리 지연 유의
  • Pub/Sub 메시지 비보관 특성에 따른 구독 시점 이후 이벤트 처리 고려

다음 읽기

#Redis 주제를 다룬 다른 회사 글

분산 시스템에서 로컬 캐시 활용하기

분산 환경에서 로컬 캐시와 Redis Pub/Sub을 함께 사용해 조회 성능을 높이고 데이터 정합성을 맞추는 방법을 설명했습니다. 서버별 캐시 불일치와 오래된 데이터 문제를 줄이기 위한 설계와 구현 경험을 공유했습니다.

카카오페이
카카오페이
백엔드
전체 보기

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...