어제는 분산락이 왜 필요한지 정리했다.
오늘은 Redis를 사용해서 분산락을 어떻게 거는지 간단히 정리해보려고 한다.
락의 기준 정하기
분산락을 걸 때는 먼저 무엇을 기준으로 잠글지 정해야 한다.
주식 매수 기능에서는 같은 계좌의 잔액이 동시에 변경되면 문제가 생길 수 있다.
그래서 계좌 ID 기준으로 락을 걸 수 있다.
lock:account:{accountId}
예를 들어 계좌 ID가 1이면 다음 key를 사용한다.
lock:account:1
Redis로 락 걸기
Redis에서는 보통 SET NX EX 방식을 사용한다.
SET lock:account:1 random-value NX EX 3
NX는 key가 없을 때만 저장한다는 의미이다.
이미 같은 key가 있으면 락 획득에 실패한다.
EX 3은 3초 뒤에 락이 자동으로 사라지게 하는 설정이다.
서버가 작업 중 죽어도 락이 계속 남는 것을 막기 위해 만료 시간이 필요하다.
처리 흐름
- 요청이 들어온다.
- Redis에 lock key 생성을 시도한다.
- 성공하면 로직을 실행한다.
- 끝나면 락을 해제한다.
- 실패하면 이미 처리 중인 요청으로 본다.
'Study' 카테고리의 다른 글
| 로그 레벨 (0) | 2026.05.10 |
|---|---|
| 로그 찍기의 중요성 (0) | 2026.05.09 |
| 분산락 (0) | 2026.05.06 |
| N+1문제 (0) | 2026.05.05 |
| Redis Sorted Set (0) | 2026.05.02 |