시스템 설계 · 심화
마이크로서비스 아키텍처 환경에서 특정 서비스의 과부하를 방지하고 전체 시스템의 안정성을 유지하기 위한 Rate Limiting과 Circuit Breaking 패턴을 설명하고, 각각의 구현 방식과 적용 시 고려해야 할 사항들(예: 분산 환경에서의 동기화, 임계치 설정)에 대해 논해주세요.
힌트 · 토큰 버킷, 리키 버킷 알고리즘과 폴리(Polly), Hystrix 같은 라이브러리를 예시로 들 수 있으며, 분산 환경에서의 중앙 집중식 제어와 적절한 임계치 설정이 중요합니다.
Rate LimitingCircuit Breaker분산 환경 동기화임계치 설정Fallback 처리
모범답안
마이크로서비스 환경에서 안정성을 확보하기 위해 Rate Limiting과 Circuit Breaking은 필수적인 패턴입니다.
Rate Limiting은 특정 서비스에 대한 요청 수를 제한하여 과부하를 방지합니다. 구현 방식으로는 토큰 버킷, 리키 버킷 알고리즘 등이 있습니다. 분산 환경에서는 Redis와 같은 중앙 집중식 저장소를 사용하여 요청 수를 동기화해야 합니다. 중요한 것은 적절한 임계치를 설정하는 것입니다. 너무 낮으면 정상적인 사용자를 제한하고, 너무 높으면 과부하를 막을 수 없습니다.
Circuit Breaking은 서비스 장애 시 연쇄적인 장애를 막기 위한 패턴입니다. 폴리(Polly)나 Hystrix 같은 라이브러리를 사용하여 구현할 수 있습니다. Circuit Breaker는 서비스 호출 실패 횟수가 임계치를 넘으면 회로를 차단하고, Fallback 처리를 통해 사용자에게 오류를 숨기거나 대체 응답을 제공합니다. 회로 차단 후에는 주기적으로 서비스 상태를 확인하여 복구되면 회로를 다시 연결합니다. 임계치 설정은 서비스의 특성과 예상되는 장애율을 고려하여 신중하게 결정해야 합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 대용량 트래픽 설계 면접 질문
- 초당 수십만 건 이상의 이벤트를 처리해야 하는 대용량 트래픽 환경에서, 동기식 API 호출 대신 이벤트 기반 아키텍처(Event-driven Architecture)를 도입할 경우 얻을 수 있는 확장성 이점과 발생할 수 있는 데이터 일관성 및 디버깅의 어려움에 대해 구체적인 해결 방안과 함께 설명해 주세요.
- 수백만 명의 동시 사용자가 접근하는 서비스에서 캐시 미스(cache miss)율을 최소화하고 캐시 일관성을 유지하기 위한 다계층 캐싱 전략(Multi-layered Caching)과 캐시 무효화(Cache Invalidation) 기법에 대해 설명하고, 특히 Stale Data 문제 해결 방안을 포함하여 설명해 주세요.
- TB 단위 이상의 데이터와 초당 수만 건의 쓰기 요청이 발생하는 관계형 데이터베이스 환경에서, 수직/수평 샤딩(Sharding) 전략을 설계하고 구현할 때 고려해야 할 핵심 요소들을 설명해 주세요. 특히, 샤드 키 선정 기준, 데이터 재분배(Rebalancing) 전략, 그리고 조인(Join) 및 트랜잭션 처리의 복잡성 해결 방안에 대해 심층적으로 다뤄주세요.
- 특정 이벤트 발생 시(예: 서비스 오픈, 인기 상품 출시) 수많은 사용자가 동시에 시스템에 접근하여 발생하는 "Thundering Herd" 문제에 대해 설명하고, 이를 효과적으로 방지하거나 완화하기 위한 아키텍처적 접근 방식과 구체적인 기술적 해결책들을 제시해 주세요.
- 대규모 분산 시스템에서 확장성 문제를 진단하고 성능 병목 지점을 식별하기 위한 Observability(관측 가능성) 전략을 설계해야 합니다. Logging, Metrics, Tracing 이 세 가지 요소를 어떻게 통합하고 활용하여 시스템의 상태를 깊이 있게 파악하고 예측할 수 있는지 구체적인 방안을 제시해 주세요.