반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 알고리즘
- 소프트웨어공학
- 클라우드컴퓨팅
- 디자인패턴
- 데이터분석
- 데이터베이스
- 네트워크
- 웹개발
- 데이터과학
- springboot
- 자료구조
- 인공지능
- 자바스크립트
- 딥러닝
- 보안
- 컴퓨터비전
- 소프트웨어
- 네트워크보안
- 프로그래밍언어
- I'm Sorry
- 데이터구조
- Yes
- 버전관리
- 파이썬
- 프로그래밍
- 사이버보안
- 머신러닝
- 빅데이터
- 컴퓨터과학
- 컴퓨터공학
Archives
- Today
- Total
스택큐힙리스트
백프레셔 한 방에 끝! 대기 큐 설계·구현 실습 가이드 본문
반응형
⚡ 왜 지금 ‘대기 큐 + 백프레셔’인가?
트래픽은 순간 폭발하고, 다운타임은 곧 매출 손실로 이어집니다. 대기 큐(Waiting Queue)는 급류처럼 밀려오는 요청을 임시 보관해 시스템을 보호하고, 백프레셔(Back-Pressure)는 “잠깐! 지금은 못 받아”를 선언해 과부하를 미리 차단합니다. 쿠팡, 토스, 네이버 같은 톱 트래픽 서비스가 공통으로 채택한 이유이죠.
1. 대기 큐 설계 핵심 체크리스트
- 큐 타입
- 브로커 기반: Kafka·RabbitMQ — 높은 내구성, 멀티 컨슈머
- 인메모리 기반: Redis Streams — 초저지연, 간단한 셋업
- 메시지 보존 정책
- At-Least-Once vs Exactly-Once 요구사항 명확화
- 우선순위 & TTL
- VIP 트래픽 먼저? 지연 허용치가 낮은 메시지엔 TTL 설정
- 컨슈머 풀 사이징
- 처리량(QPS) = 컨슈머 수 × 작업 속도. 모니터링으로 실시간 조절
2. 백프레셔 디자인 패턴 3종
a. 토큰 버킷(Leaky Bucket 변형)
rate: 500 req/sec # 초당 500 토큰
burst: 100 # 최대 버스트
b. Slow-Consumer Detection
- Kafka의 fetch.max.bytes, max.poll.interval.ms로 느린 컨슈머 격리
- Redis Streams는 XCLAIM으로 지연 메시지를 다른 워커에게 이관
c. Circuit Breaker
CircuitBreaker cb = CircuitBreaker.ofDefaults("queueWriter");
3. 실습: Spring Boot + Kafka로 “안전한 주문 큐” 만들기
1. Kafka 토픽 생성
kafka-topics --create \
--topic order-events \
--replication-factor 3 \
--partitions 12 \
--config retention.ms=604800000
2. 프로듀서 백프레셔 적용
props.put(ProducerConfig.LINGER_MS_CONFIG, "10"); // 배치 전송
props.put(ProducerConfig.BUFFER_MEMORY_CONFIG, "67108864"); // 64 MB 버퍼
props.put(ProducerConfig.MAX_BLOCK_MS_CONFIG, "3000"); // 큐 꽉 차면 3 초 대기
3. 컨슈머 그룹 오토스케일링
hpa:
minPods: 2
maxPods: 20
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 60
4. Slow 컨슈머 모니터링
kafka-consumer-groups --describe --group order-service
LAG 지표가 급등하면 알림 → 컨슈머 증설 or 장애 조치.
4. 운영 팁 💡
- Observability: Prometheus + Grafana로 lag, processing time, queue depth 한눈에.
- Fail-Safe 메시지: DLQ(Dead Letter Queue)로 비정상 메시지 격리, 데이터 손실 0 건 달성.
- 리플레이 전략: 이벤트 소싱 구조라면 오프셋 초기화로 재처리 플랜 필수.
결론 ✍️
대기 큐로 ‘버퍼’를 만들고 백프레셔로 ‘제동’을 거는 순간, 시스템은 스파이크 트래픽에도 흔들리지 않습니다. 실무에서는 “측정 → 한도 설정 → 자동화” 세 단계를 반복하며 지표를 꾸준히 조정하세요. 시나리오별로 미리 부하 테스트를 돌려 두면, 장애 발생 시 복구 시간(MTTR)도 자연스레 줄어듭니다.
반응형
'개발' 카테고리의 다른 글
실전 포스트모템, 이렇게 쓰면 끝! (2) | 2025.07.10 |
---|---|
자바 스프링 개발 시작하기 - 4일차 예외 처리와 CSV 통계 실습 (2) | 2025.07.10 |
MTTD·MTTR 완전정복: 장애 대응 속도를 2배 끌어올리는 법 (0) | 2025.07.09 |
수평 확장 vs DB 확장, 어디에 투자할까? (0) | 2025.07.09 |
Redis 캐시 3대장: LRU·LFU·TTL, 언제 써야 진가를 발휘할까? (2) | 2025.07.09 |
Comments