1.멱등성: 같은 요청을 몇번 보내건 한번 보낸것과 동일해야한다
왜 결제에서 중요한가?
같은 결제 요청이 실수로 2번 서버에 도달하면 멱등성이 없는 시스템은 사용자에게 이중 청구를 할 수 있다.
왜 네트워크가 응답을 유실시키는가?
클라이언트가 요청을 보내고 서버가 처리를 끝내서 응답 만들었는데 그 응답 클라이언트에게 돌아오다가 도중에 회선이 끊기면
서버 입장에서는 결제완료 클라이언트는 응답 못받았으니 실패로 간주하고 재전송이다
멱등성 보장= 요청이 몇번 중복 도달해도 실제 처리는 1번
이 역할= Redis 락
2.setIfAbsent(SETNX)가 원자적 락인 이유
1. 조회 orderId가 db에 있나 확인
없을때 등록
1단계를 A가 실행한 찰나에 Brk 1단계 실행하면 둘다 2단계로 넘어가는게 레이스 컨디션
확인+저장을 한번에 해서 레이스를 없앴음
3. 캐시 히트/미스
데이터가 캐시에 있냐 없냐
캐시 미스: 캐시에 데이터가 없는 경우
캐시 미스가 동시에 많이 발생하는 상황에서는 락을 사용해 한 요청만 DB를 조회하도록 만들어서 db 과부하를 막고 캐시를 효율적으로 채우는데 활용한다.
4. TTL이 왜 붙는지 짧으면 위험한이유
TTL이 없다면: 어떤 이유로든(서버가 크래시 나서 해제 로직을 못 탄 경우 등) PROCESSING 상태로 영원히 남아있는 키가 생길 수 있다. 그러면 그 주문은 영원히 막힌다. TTL은 이런 "영구 잠김"을 막기 위한 최후 안전장치다.
'【Java】' 카테고리의 다른 글
| [Redis]StringRedisTemplate (0) | 2026.07.20 |
|---|---|
| [Redis]원자적 락 (0) | 2026.07.20 |
| Result<V,E extends Throwable> 정리 (0) | 2026.04.25 |
| 함수형 예외처리 (1) | 2026.04.23 |
| Optional (0) | 2026.04.22 |