
Redis를 활용한 공유 자원 동시성 처리
두줄요약
Redis Key와 Session ID로 공유 파일의 점유 락을 구현했습니다. 만료 이벤트와 WebSocket 종료를 활용해 잔존 락을 해제했습니다.
문제 상황
- 그룹 구성원이 파일을 공유·수정·삭제하는 환경에서 동일한 상태 보장을 위한 동시성 제어 필요
- 점유 사용자의 이탈·비정상 종료 시 락이 남아 다른 사용자의 접근을 막는 서비스 장애 위험
구조와 흐름
- 공유 자원별 Redis Key와 로그인 Session ID Value로 점유자 식별
- 락 획득 시 키 존재 여부 확인, 락 해제 시 해당 자원 키 삭제
- WebSocket 연결 종료를 사용자 이탈 신호로 취급해 Session ID 기반 보유 락 일괄 해제
해결 방법
- expire time을 적용한 shadowKey로 락 만료 감지와 원본 점유 정보 유지
- Redis Pub/Sub 구독으로 키 만료 이벤트를 수신해 프론트엔드에 락 해제 자원 전달
주의할 점
- Redis의 단일 스레드 원자성 활용과 장시간 실행 명령으로 인한 명령 처리 지연 유의
- Pub/Sub 메시지 비보관 특성에 따른 구독 시점 이후 이벤트 처리 고려






