항해+

항해+ 백엔드 코드 6주차 회고 : 분산락 + 캐시

seuthootdev 2025. 8. 18. 20:14

항해 20만원 할인 추천인코드: NYFKU8 


🚀 분산락 & 캐시 정리

1. 왜 필요한가?

  • 대용량 트래픽 환경에서는 **한정된 자원(쿠폰, 좌석, 재고 등)**에 동시에 접근하는 문제가 자주 발생합니다.
  • 단순히 DB 트랜잭션만으로는 성능 한계가 있어 Redis 기반 분산락 + 캐시 전략이 효과적입니다.

2. Redis 기반 분산락

Redis는 Key-Value 저장소이자 원자적 연산을 지원하기 때문에, 락 관리에 적합합니다.

동작 방식

  1. 락 획득: SETNX key value 로 키가 없을 때만 등록
  2. 비즈니스 로직 수행
  3. 락 해제: DEL key 로 해제
  4. TTL 설정: 장애 시 자동 해제 보장

구현 방식

  • Simple Lock
    • 실패 즉시 예외 발생 → 빠른 실패 처리
    • 단점: 재시도 로직 별도 구현 필요
  • Spin Lock
    • 실패 시 일정 횟수/시간 동안 재시도
    • 장점: 결국 락 획득 확률↑
    • 단점: 네트워크 비용 & 스레드 점유 문제
  • Pub/Sub Lock
    • Redis Pub/Sub 활용 → 락 해제 이벤트 구독 후 대기
    • 장점: Spin Lock 대비 효율적
    • 단점: 구현 난이도↑

올바른 순서

 
락 획득 → 트랜잭션 시작 → 로직 실행 → 트랜잭션 종료 → 락 해제

잘못된 순서(트랜잭션 먼저 시작 / 락 먼저 해제)는 데이터 정합성 깨뜨림.


3. 캐시(Cache) 활용

  • Redis는 단순 캐시뿐만 아니라 분산락 인프라 역할도 수행.
  • 캐시 장점
    • DB 부하 감소 → 성능(Throughput) 향상
    • TTL 활용 → 데이터 최신성 보장
    • 락과 함께 → 정합성 + 성능 동시 달성

4. 정리

  • 분산락: 데이터 정합성을 지키기 위한 핵심 기술
  • 캐시: 성능 최적화 및 부하 분산
  • Redis는 두 역할을 모두 수행할 수 있음
  • 결국, 대규모 트래픽 환경에서는
    👉 Redis 분산락 + 캐시 전략이 안정적인 서비스 운영의 핵심

📌 과제 링크

 

Step12 by seuthootDev · Pull Request #12 · seuthootDev/hanghae-plus-backend

📌 PR 제목 규칙 [STEP12] 정승훈 - e-commerce 핵심 체크리스트 ✅ 1️⃣ 분산락 적용 (3개) [✔️] 적절한 곳에 분산락이 사용되었는가? 79a61a7 0f4c3c0 [✔️] 트랜젝션 순서와 락순서가 보장되었는가? ae2

github.com

 

Step11 by seuthootDev · Pull Request #11 · seuthootDev/hanghae-plus-backend

📌 PR 제목 규칙 [STEP11] 정승훈 - e-commerce 핵심 체크리스트 ✅ 1️⃣ 분산락 적용 (3개) [✔️] 적절한 곳에 분산락이 사용되었는가? 79a61a7 0f4c3c0 [✔️] 트랜젝션 순서와 락순서가 보장되었는가? ae2

github.com