MSA(Microservices Architecture)로 전환하면 시스템은 자연스럽게 이런 문제를 맞닥뜨린다.

  • 서비스 간 호출 증가 → 지연(latency)
  • 데이터 분산 → 일관성 문제
  • 트래픽 증가 → DB 부하
  • 비동기 처리 증가 → 상태 관리 어려움

이때 Redis는 단순 캐시가 아니라
👉 “성능 + 상태 + 제어”를 담당하는 인프라 계층으로 동작한다.


📌 왜 MSA에서 Redis가 필요한가

모놀리식에서는 DB 하나로도 버틴다.
하지만 MSA에서는:

Service A → Service B → Service C → DB
 

👉 네트워크 홉이 늘어나고
👉 DB 부하가 폭발한다

이때 Redis가 개입하면:

Service → Redis → (Hit) → 응답

(Miss)

DB
 

👉 대부분 요청을 DB까지 가지 않게 막는다


📌 Redis가 빛을 발하는 6가지 핵심 영역


1. 캐싱 (Cache) — 가장 기본이지만 가장 강력

대표적인 패턴:

Cache Aside Pattern
 

흐름:

  1. Redis 조회
  2. 없으면 DB 조회
  3. Redis 저장
GET /products/1

→ Redis 조회 (miss)
→ DB 조회
→ Redis 저장
→ 응답
 

👉 효과

  • DB 부하 감소
  • 응답 속도 향상
  • read-heavy 시스템에서 필수

2. 세션 공유 (Stateless 보완)

MSA는 기본적으로 Stateless지만
현실에서는 세션이 필요하다.

문제:

  • 서버 여러 대
  • 세션 메모리 공유 안됨

해결:

Session Store = Redis
 

👉 효과

  • 모든 인스턴스에서 동일 세션 접근
  • 로그인 상태 유지
  • SSO 구조 지원

3. 분산 락 (Distributed Lock)

MSA에서 가장 위험한 문제 중 하나:

👉 동시성 문제

예:

  • 재고 감소
  • 결제 처리
  • 예약 시스템
동시에 2명이 결제 → 재고 -2 → 장애
 

Redis로 해결:

SETNX lock:order:123
 

👉 효과

  • 단일 처리 보장
  • race condition 방지

👉 실무에서는

  • Redisson
  • Lua Script
  • TTL 필수

4. Rate Limiting (트래픽 제어)

API Gateway 또는 서비스에서 필수 기능

예:

유저당 초당 10 요청 제한
 

Redis로 구현:

INCR user:123:count
EXPIRE 1초
 

👉 효과

  • DDOS 방어
  • API 남용 방지
  • 과금 정책 구현

5. Pub/Sub & Event 기반 처리

MSA는 이벤트 기반으로 간다.

Redis 활용:

Service A → Redis Pub → Service B
 

또는:

  • Redis Stream
  • 이벤트 브로커 대체 (소규모)

👉 효과

  • 서비스 간 결합도 감소
  • 비동기 처리 가능
  • 실시간 처리

6. Idempotency (멱등성 처리)

결제/정산 시스템에서 핵심

문제:

네트워크 재요청 → 중복 결제
 

Redis로 해결:

SET idempotency:KEY → 이미 있으면 reject
 

👉 효과

  • 중복 요청 방지
  • 안전한 API 설계

📌 Redis 없을 때 vs 있을 때


Redis 없음

Client → Service → DB
 

문제:

  • DB 부하 집중
  • 응답 지연
  • 확장 어려움

Redis 있음

Client → Service → Redis → DB
 

효과:

  • DB 보호
  • 응답 속도 개선
  • 확장성 확보

📌 실무 아키텍처 예시

┌───────────────┐
│ API Gateway │
└──────┬────────┘

┌──────────┼──────────┐
↓ ↓ ↓
User Service Order Payment
│ │ │
└──────┬───┴───┬──────┘
↓ ↓
Redis DB
 

📌 실무 적용 포인트


1. TTL 전략 반드시 설계

  • 캐시 무효화 정책
  • stale 데이터 허용 범위

2. 키 설계 중요

user:123
order:202403:1
rate:limit:user:123
 

👉 키 네이밍 = 유지보수성


3. Redis 장애 대비

  • 캐시 미스 시 DB fallback
  • circuit breaker
  • Redis는 “보조 계층”으로 설계

4. 과도한 캐싱 금지

  • write-heavy 시스템 → 캐시 역효과
  • 일관성 깨질 수 있음

📌 언제 Redis를 써야 하는가

✔ 추천

  • 트래픽 많은 서비스
  • 읽기 비중 높은 시스템
  • 결제/정산 시스템
  • 실시간 시스템

❌ 비추천

  • 단순 CRUD
  • 트래픽 적은 내부 시스템

📌 결론

Redis는 단순 캐시가 아니다.

👉 MSA에서 “성능 + 동시성 + 상태 관리”를 담당하는 핵심 인프라다.

잘 쓰면:

  • DB 부하 감소
  • 응답 속도 개선
  • 안정성 증가

못 쓰면:

  • 데이터 불일치
  • 장애 전파
  • 디버깅 지옥

📌 한 줄 정리

👉 “MSA에서 Redis는 선택이 아니라, 설계의 일부다”

LIST

+ Recent posts