특정 이벤트 발생 시(예: 서비스 오픈, 인기 상품 출시) 수많은 사용자가 동시에 시스템에 접근하여 발생하는 "Thundering Herd" 문제에 대해 설명하고, 이를 효과적으로 방지하거나 완화하기 위한 아키텍처적 접근 방식과 구체적인 기술적 해결책들을 제시해 주세요.
힌트 · 캐싱 계층 강화, 메시지 큐를 통한 요청 분산, 분산 락을 이용한 동시성 제어, 그리고 백프레셔(Backpressure) 적용을 고려할 수 있습니다.
모범답안
"Thundering Herd" 문제는 특정 이벤트 발생 시 다수의 클라이언트가 동시에 동일한 리소스에 접근하여 시스템 과부하를 일으키는 현상입니다. 이를 해결하기 위해 몇 가지 아키텍처적 접근 방식과 기술적 해결책을 고려할 수 있습니다.
첫째, 캐싱 계층을 강화하여 원본 서버에 대한 요청을 줄입니다. Redis나 Memcached와 같은 인메모리 캐시를 활용하여 자주 요청되는 데이터를 캐싱하고, 캐시 만료 시간을 적절하게 설정하여 원본 서버의 부담을 최소화합니다.
둘째, 메시지 큐를 사용하여 요청을 비동기적으로 처리합니다. Kafka나 RabbitMQ와 같은 메시지 큐를 도입하여 요청을 큐에 쌓아두고, 백엔드 서버가 순차적으로 처리하도록 하여 시스템 부하를 분산합니다.
셋째, Rate Limiting과 Circuit Breaker 패턴을 적용하여 시스템을 보호합니다. Rate Limiting을 통해 특정 시간 동안 허용되는 요청 수를 제한하고, Circuit Breaker를 통해 장애가 발생한 서비스에 대한 요청을 차단하여 시스템 전체의 안정성을 유지합니다.
넷째, 로드 밸런싱을 통해 트래픽을 여러 서버에 분산합니다. L4 또는 L7 로드 밸런서를 사용하여 트래픽을 여러 백엔드 서버에 균등하게 분배하고, 서버의 가용성을 높입니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 대용량 트래픽 설계 면접 질문
- 수백만 명의 동시 사용자가 접근하는 서비스에서 캐시 미스(cache miss)율을 최소화하고 캐시 일관성을 유지하기 위한 다계층 캐싱 전략(Multi-layered Caching)과 캐시 무효화(Cache Invalidation) 기법에 대해 설명하고, 특히 Stale Data 문제 해결 방안을 포함하여 설명해 주세요.
- TB 단위 이상의 데이터와 초당 수만 건의 쓰기 요청이 발생하는 관계형 데이터베이스 환경에서, 수직/수평 샤딩(Sharding) 전략을 설계하고 구현할 때 고려해야 할 핵심 요소들을 설명해 주세요. 특히, 샤드 키 선정 기준, 데이터 재분배(Rebalancing) 전략, 그리고 조인(Join) 및 트랜잭션 처리의 복잡성 해결 방안에 대해 심층적으로 다뤄주세요.
- 마이크로서비스 아키텍처 환경에서 특정 서비스의 과부하를 방지하고 전체 시스템의 안정성을 유지하기 위한 Rate Limiting과 Circuit Breaking 패턴을 설명하고, 각각의 구현 방식과 적용 시 고려해야 할 사항들(예: 분산 환경에서의 동기화, 임계치 설정)에 대해 논해주세요.
- 대규모 분산 시스템에서 확장성 문제를 진단하고 성능 병목 지점을 식별하기 위한 Observability(관측 가능성) 전략을 설계해야 합니다. Logging, Metrics, Tracing 이 세 가지 요소를 어떻게 통합하고 활용하여 시스템의 상태를 깊이 있게 파악하고 예측할 수 있는지 구체적인 방안을 제시해 주세요.