Skip to content

redis 분산 lock으로 동시성 제어

ez edited this page Aug 2, 2025 · 1 revision

프로젝트 변경 사항 갱신 플로우

저희 프로젝트에서는 웹 소켓을 통해 변경 사항을 받아서 이를 redis에 임시로 저장한 뒤 스케줄러를 통해 주기적으로 postgres에 반영하고 있습니다.

image

그리고 변경 사항을 반영할 때 redis의 값을 꺼내서 postgres에 반영한 뒤 메모리 절약을 위해 redis의 값을 삭제하고 있습니다.

이 과정 동안 redis에 대한 변경 사항을 막기 위해 redis 분산 lock을 통해 lock을 적용했습니다.

변경 사항 갱신 흐름

앞에서 말씀드렸던 것처럼 변경 사항 갱신 흐름은 다음과 같습니다.

  1. redis에 저장된 변경 사항 조회
  2. 변경 사항 postgres에 반영
  3. 메모리 절약을 위해 redis 변경 사항 삭제

그런데 2번과 3번 연산을 수행 도중 변경 사항이 발생할 경우 아래 그림처럼 변경 사항이 postgres에 반영되지 않을 수 있습니다.

즉 1, 2, 3번 연산을 수행하는 동안 redis에 대한 접근을 막아야 합니다.

이를 위해 lock을 적용했습니다.

변경 사항을 갱신하는 3개의 연산을 수행하기 전에 lock을 획득하고 수행이 끝난 뒤 lock을 해제합니다.

그리고 lock을 획득해야만 redis에 값을 갱신하는 작업을 수행할 수 있도록 합니다.

저희 OctoDocs 팀은 이렇게 redis 분산 lock을 적용하여 동시성 문제를 해결했습니다.

개발 문서

⚓️ 사용자 피드백과 버그 기록
👷🏻 기술적 도전
📖 위키와 학습정리
🚧 트러블슈팅

팀 문화

🧸 팀원 소개
⛺️ 그라운드 룰
🍞 커밋 컨벤션
🧈 이슈, PR 컨벤션
🥞 브랜치 전략

그룹 기록

📢 발표 자료
🌤️ 데일리 스크럼
📑 회의록
🏖️ 그룹 회고
🚸 멘토링 일지

Clone this wiki locally