컴퓨터 과학/시스템 설계

💻 [시스템 설계] 시스템 트래픽 대응 전략 - 실무 기준 계층별 정복

프로그래민구찌 2025. 5. 16. 18:53

🎯 개요

 

서비스가 커지고 사용자 수가 증가하면 예상치 못한 트래픽 폭발에 직면하게 됩니다.
예를 들어 쇼핑몰에서는 "세일 시작 1분 전",
예약 시스템에서는 "오픈 시간 정각"에 집중 트래픽이 몰립니다.

이럴 때 대비하지 않으면?

  • 서버 다운
  • 데이터 유실
  • 사용자 대거 이탈

➡ 따라서 시스템을 설계할 때는 트래픽을 제어하고, 분산하고, 흡수하는 전략이 필수입니다.


1️⃣ 클라이언트 레벨 - 요청 최소화

전략 설명
Debounce / Throttle 버튼 클릭, 검색 입력 등 과도한 요청 제한
Lazy Loading 스크롤 시 필요한 데이터만 로드
Cache-Control JS/CSS/이미지에 캐시 적용하여 재요청 방지
검색창 자동완성 기능에 debounce 적용하면, 300ms 내 중복 요청 방지 가능
→ 백엔드 부하 70% 감소 효과

2️⃣ 네트워크 레벨 - CDN & GZIP

전략 설명
CDN (CloudFront, Cloudflare) 정적 리소스(이미지, JS 등) 전 세계에 분산 배포
GZIP 압축 응답 바이트 수를 줄여 전송 속도 개선
CDN만 적용해도 이미지 트래픽 부하 80% 이상 감소 가능
→ 사용자 체감 속도 대폭 개선

3️⃣ 서버 레벨 - 로드밸런싱 & 확장성

전략 설명
L4/L7 Load Balancer 네트워크 계층/애플리케이션 계층 부하 분산
Auto Scaling 트래픽 급증 시 인스턴스를 자동으로 추가
Health Check 장애 서버 자동 제외로 안정성 확보
AWS EC2 + Auto Scaling Group + ALB로 유입 트래픽 탄력 대응
→ 비용 효율 + 가용성 확보

4️⃣ 애플리케이션 레벨 - 캐시 & Queue

전략 설명
Redis/Memcached 자주 조회되는 데이터 캐실
Kafka, RabbitMQ 비동기 처리로 요청 병목 해소
Circuit Breaker 특정 서비스 실패 시, 빠른 우회처리 (예: Resilience4j)
대시보드 통계 캐싱 적용 → Redis로 캐싱해 20초 걸리던 통계 → 0.2초로 단축
Kafka로 이미지 처리 비동기 분산 → 서버 부하 감소 + 응답 속도 ↑

5️⃣ 데이터베이스 레벨 - 샤딩 & 복제

전략 설명
Read/Write 분리 Master → Write / Slave → Read 분산
DB Replication 데이터 복제본을 만들어 읽기 트래픽 분산
Partitioning/ Sharding 데이터 수평 분할 (ex. 회원 ID 기준)
사용자 수천만 명인 서비스는 MySQL 파티셔닝이나 MongoDB 샤딩 구조로 스케일 아웃
→ DB 한계 극복 필수 전략

6️⃣ API 레벨 - 요청 제어 & 속도 제한

전략 설명
Rate Limiting 특정 사용자/아이피 당 초당 요청 수 제한
API Gateway Throttle 인증/비인증 사용자 차등 제어
Retry/Timeout 정책 무한 요청 방지 및 장애 구간 빠르게 끊기

📈 트래픽 대응 구조 예시

[Client]
   ↓
[CDN/Gateway] - RateLimit, GZIP
   ↓
[LoadBalancer] - L7 분산
   ↓
[Spring App] - Redis 캐시 / Kafka Queue
   ↓
[DB Read Replica] ← Read / Write → [DB Primary]

📝 회고

 

이번 학습을 통해 트래픽 대응 전략이 단순히 서버 스펙을 키우는 것이 아니라,
전 계층에서 요청을 분산하고 병목을 줄이기 위한 설계라는 것을 다시금 체감했습니다.

실무에서는 Redis 하나만 잘 붙여도 체감 성능이 확 달라지고,
Kafka나 RateLimiter를 붙이면 대규모 트래픽에서도 시스템이 견고하게 버틸 수 있습니다.

이제는 트래픽 대응이 "문제 생기면 나중에 고치자"가 아니라
초기 설계 단계에서 꼭 고려되어야 하는 필수 요소라는 인식을 가지게 되었습니다.