inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

2026년! 백엔드 개발자를 위한 Redis 실전 가이드: 기초부터 실무 패턴까지

패턴 06: 분산 락(Distributed Lock) - 동시성 문제 해결

Lock 해제 문의 드립니다.

2

index

작성한 질문수 11

0

Lock 해제 코드에서

다른 사용자가 생성한 락을 삭제하지 않기 위해 본인의 identifier이랑 락의 value를 비교해서 삭제하는 로직 부분에서 궁금한 내용이 있습니다.

 

멀티스레드, 프로세스 환경에서 충분히 일어날 일 이라고 하셨는데

 

내가 락을 얻으면 다른 사용자는 락을 얻지 못해 value는 항상 나의 identifier이 들어있어야 하는게 아닌가? 라는 생각이 드는데

 

rd.set(lock_name, identifier, nx=True, px=lock_timeout_ms)

이 코드 방식으로 락을 만들면 여러 사용자가 특정 환경에 락을 얻을 수 있는건가요?

아키텍처 redis FastAPI

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. index님.

Redis를 이용한 분산 락 해제와 관련하여 중요한 질문을 주셨습니다. 분산 환경에서의 락 처리에 대한 이해는 복잡할 수 있지만, 올바르게 이해하는 것이 시스템 안정성에 매우 중요합니다.

분산 락에서의 문제 상황

Redis에서 SET 명령어를 사용하여 락을 설정할 때, NX 옵션을 통해 락이 이미 존재하지 않을 경우에만 락을 설정하라는 뜻입니다. 이 과정에서 px 옵션은 락의 만료 시간을 지정하는 데 사용됩니다.

문제의 핵심

멀티스레드/프로세스 환경 또는 네트워크 지연 상황에서, 락을 설정하고 일정 시간이 지난 후, 락이 만료되어 삭제될 수 있습니다. 이 경우, 다른 프로세스가 그 락을 다시 획득할 수 있게 됩니다. 이런 상황에서는 락 해제 시 주의가 필요합니다:

  1. Race Condition: 프로세스 A가 락을 점유하고 작업을 처리하는 중 만료 시간이 지나면 락이 해제됩니다. 락이 해제된 직후, 프로세스 B가 해당 락을 획득하게 될 수 있습니다.

  2. Identifier 검증: 락을 해제할 때, 락의 value를 확인하는 이유는 바로 이 때문입니다. 프로세스 B가 다시 락을 획득한 후, 프로세스 A가 기존의 락을 해제하려 할 때(아직 작업이 끝나지 않았다면), B의 identifier와 일치하지 않기 때문에 올바르게 동작할 수 있습니다.

안전한 락 해제

락을 해제하는 코드에서는 반드시 다음 단계를 따라야 합니다:

  • 락의 value가 자신이 설정한 identifier인지 확인
  • 일치할 경우에만 락 해제

이러한 방법은 락의 원자성을 보장하고 다른 프로세스의 데이터 안정성을 확보하는데 도움을 줍니다.

추가 자료

다른 분산 락 구현 및 잠금 관리에 대한 더 깊은 이해를 원하신다면, 다음 자료를 참고해 보시면 도움이 될 것입니다:
- Redis 교습서에서는 Redis 기반의 다양한 동작 원리 및 예제를 확인할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

답을언제쯤받아볼수있나요

0

7

2

프로젝트가 없어요..

0

26

2

강의 일정 및 수업 자료 공유 관련 문의드립니다!

0

17

1

레디스로 대기큐 구현 질문

0

52

2

API LIMIT

0

40

1

캐시 무효화

0

32

2

Redis와 Kafca의 Pub/Sub 차이

0

41

2

27강 슬랙 테스트 부분도 누락된 것 같네요

1

47

2

22강 케글 연동 강의내용 누락된듯해요

1

47

2

한국투자증권 미국 주식 매매 수수료와 환전 수수료가 높은 경우 자동매매 베개투자법을 적용해도 괜찮을까요?

0

59

2

스크립트를 한번에 복사하고 싶습니다.

0

35

2

@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.

0

40

1

너무 흥미진진합니다..

1

47

2

SP를 아직도 사용하나요?

0

51

2

캐시전략 - Write-behind

0

46

2

모델 서빙과 관련된 강좌 출시 예정된 바가 있으신지 여쭤봅니다!

0

48

2

순위가 동률일 때의 처리에 대해 질문드립니다.

0

63

2

Redlock 알고리즘 관해 궁금한게 있습니다!

0

82

2

좋아요/조회수 카운팅 병목현상에 대해서 궁금한점이 있습니다.

0

58

2

백엔드 서버 코드 변경에서 프론트엔드 서버가 값을 파싱하지 못하는 문제

0

104

1

강사님 GETDEL 관련해서 질문 있습니다

0

117

2

비밀번호를 걸고 실행된 레디스 서버에 lua 스크립트를 등록하는 경우

0

99

2

보안 설정을 한 수강생들은 Connection Settings에 비밀번호를 넣어야 추가되네요

0

77

2

Redis Container 해킹

0

130

1