시스템 설계 · 중급
마이크로서비스 아키텍처에서 서비스 디스커버리(Service Discovery)가 필요한 이유를 설명하고, 클라이언트 측 디스커버리(Client-side Discovery)와 서버 측 디스커버리(Server-side Discovery) 방식의 동작 원리와 장단점을 비교해 주세요.
힌트 · 서비스 디스커버리는 동적으로 변화하는 서비스 인스턴스의 위치를 찾아 통신하게 합니다. 클라이언트 측은 클라이언트가 레지스트리에서 직접 조회하고, 서버 측은 로드 밸런서가 대신 조회합니다.
동적 IP서비스 레지스트리로드 밸런싱복잡성 증가유연성
모범답안
마이크로서비스 아키텍처에서는 서비스 인스턴스가 동적으로 생성되고 소멸되기 때문에, 각 서비스의 IP 주소와 포트가 계속 변합니다. 서비스 디스커버리는 이러한 변화에 맞춰 서비스들이 서로를 찾아 통신할 수 있도록 해주는 핵심 메커니즘입니다.
클라이언트 측 디스커버리는 클라이언트가 서비스 레지스트리에서 직접 서비스 인스턴스 목록을 조회하고, 로드 밸런싱을 수행하여 통신합니다. 장점은 유연성이 높고, 클라이언트가 로드 밸런싱 전략을 직접 제어할 수 있다는 점입니다. 단점은 클라이언트에 디스커버리 로직이 추가되어 복잡성이 증가하고, 각 언어별로 구현해야 한다는 점입니다.
서버 측 디스커버리는 로드 밸런서가 서비스 레지스트리에서 서비스 인스턴스 목록을 조회하고, 클라이언트 요청을 적절한 인스턴스로 라우팅합니다. 장점은 클라이언트가 디스커버리 로직을 알 필요가 없어 단순해지고, 중앙 집중적인 관리가 가능하다는 점입니다. 단점은 로드 밸런서에 의존성이 생기고, 클라이언트 측에 비해 유연성이 떨어진다는 점입니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 분산 시스템 면접 질문
- 분산 메시징 시스템에서 메시지 처리의 멱등성(Idempotency)이 중요한 이유를 설명하고, 멱등성을 보장하기 위한 일반적인 구현 방법에는 어떤 것들이 있는지 구체적인 예시와 함께 설명해 주세요.
- 분산 시스템에서 합의(Consensus) 알고리즘이 필요한 이유와 그 중요성을 설명하고, Paxos나 Raft와 같은 합의 알고리즘이 어떤 원리로 분산 환경에서 단일 결정에 도달하는지 간략하게 설명해 주세요.
- 분산 시스템에서 트래픽을 효율적으로 분산하기 위한 로드 밸런싱 알고리즘 중 라운드 로빈(Round Robin)과 최소 연결(Least Connection) 방식의 차이점을 설명하고, 각각 어떤 상황에 더 적합한지 비교해 주세요.
- Raft나 Paxos와 같은 분산 합의 알고리즘을 실제 프로덕션 환경에 적용할 때, 이론적인 이해를 넘어 어떤 실질적인 도전 과제에 직면할 수 있으며, 이를 해결하기 위한 설계 및 운영 전략은 무엇인지 설명해주세요. (예: 네트워크 파티션, 노드 장애 복구 시간, 리더 선출 오버헤드 등)
- 마이크로서비스 아키텍처에서 여러 서비스에 걸친 비즈니스 트랜잭션의 ACID 속성을 보장하기 위해 2PC(Two-Phase Commit)가 아닌 Saga 패턴을 적용하는 경우가 많습니다. Saga 패턴의 종류(Choreography vs Orchestration)와 각각의 장단점을 설명하고, 실제 시스템에서 Saga를 구현할 때 고려해야 할 보상 트랜잭션(Compensation Transaction) 설계 및 실패 처리 전략에 대해 구체적으로 설명해주세요.
- 분산 시스템에서 강한 일관성(Strong Consistency)과 결과적 일관성(Eventual Consistency) 중 하나를 선택해야 할 때, CAP 이론 외에 비즈니스 요구사항, 시스템 성능, 개발 복잡성 측면에서 어떤 트레이드오프를 고려해야 하는지 구체적인 시나리오를 들어 설명하고, 중간 단계의 일관성 모델(예: Causal, Read-Your-Writes)이 실제 시스템에서 어떻게 활용될 수 있는지 설명해주세요.