핵심 인사이트 (3줄 요약)
- 본질: 서비스 디스커버리(Service Discovery)는 MSA 환경에서 수시로 변하는 서비스 인스턴스의 네트워크 위치(IP, Port)를 자동으로 감지하고 관리하는 메커니즘이다.
- 가치: 클라우드 환경의 유동적인 인스턴스 생명 주기에 대응하여, 서비스 간 호출 시 하드코딩된 주소 대신 논리적인 서비스 이름을 사용하여 연결성을 보장한다.
- 판단 포인트: Auto-scaling이 빈번하거나 컨테이너 기반 환경(Kubernetes)을 구축할 때, 서비스 레지스트리(Service Registry)를 통한 자동 등록 및 탐색 체계는 필수다.
Ⅰ. 개요 및 필요성
전통적인 서버 환경에서는 서버의 IP가 고정되어 있어 설정 파일에 상대방 주소를 적어두면 그만이었다. 하지만 클라우드와 MSA 환경에서는 서버(인스턴스)가 장애로 죽거나 부하 증가로 새로 생겨날 때마다 IP가 계속 바뀐다. 사람이 일일이 설정을 고치는 것은 불가능하다. 서비스 디스커버리는 이러한 문제를 해결하기 위해 '자동화된 주소록' 역할을 수행한다. 서비스가 태어나면 자신의 주소를 신고하고, 호출하는 쪽은 주소록에서 이름을 찾아 전화를 거는 방식이다.
📢 섹션 요약 비유: 서비스 디스커버리는 '114 전화번호 안내 서비스'다. 가게(서비스) 주소가 바뀌어도 114(디스커버리)에 물어보면 현재 번호를 알려준다.
Ⅱ. 아키텍처 및 핵심 원리
서비스 디스커버리의 두 가지 방식
- Client-Side Discovery:
- 호출자(Client)가 직접 서비스 레지스트리에서 주소를 조회하여 어떤 인스턴스에 요청을 보낼지 결정한다.
- 예: Netflix Eureka(레지스트리) + Ribbon(로드밸런서).
- 장점: 로드밸런싱 알고리즘을 클라이언트에서 세밀하게 조절 가능.
- Server-Side Discovery:
- 호출자는 대표 주소(Load Balancer)로 요청을 보내고, LB가 레지스트리를 조회하여 트래픽을 전달한다.
- 예: Kubernetes Service, AWS ELB.
- 장점: 클라이언트 코드에 디스커버리 로직이 없어 언어 중립적이고 단순함.
동작 프로세스
[Service Instance] ──(1. Register)──▶ [Service Registry]
▲
│ (2. Query)
[Client / Gateway] ──(3. Invoke)──────▶ [Load Balancer]
📢 섹션 요약 비유: 서비스 레지스트리는 동네의 '부동산 게시판'이다. 새로 이사 온 집(인스턴스)은 게시판에 주소를 적고, 찾아오는 손님은 게시판을 보고 찾아간다.
Ⅲ. 비교 및 연결
Client-Side vs Server-Side 비교
| 비교 항목 | Client-Side (예: Eureka) | Server-Side (예: K8s Service) |
|---|---|---|
| 로드밸런싱 위치 | 클라이언트 내부 라이브러리 | 전용 로드밸런서 (네트워크 계층) |
| 네트워크 홉(Hop) | 적음 (직접 호출) | 많음 (LB를 거침) |
| 클라이언트 복잡도 | 높음 (라이브러리 포함 필수) | 낮음 (표준 HTTP/DNS 사용) |
| 언어 의존성 | 높음 (전용 라이브러리 필요) | 없음 (언어와 무관) |
📢 섹션 요약 비유: Client-Side는 손님이 맛집 지도를 직접 들고 찾아가는 것이고, Server-Side는 손님이 안내데스크에 물어보면 직원이 식당까지 데려다주는 것이다.
Ⅳ. 실무 적용 및 기술사 판단
기술사 핵심 포인트:
- Health Check 연동: 단순히 주소만 저장하는 것이 아니라, 인스턴스가 살아있는지 주기적으로 확인하여 죽은 서버는 목록에서 즉시 제거해야 한다.
- 데이터 일관성: 레지스트리 자체도 장애에 대비해 클러스터링되어야 하며, 데이터 정합성(CP vs AP) 전략이 중요하다.
- DNS 활용: Kubernetes 환경에서는
Kube-DNS를 통해 서비스 이름을 IP로 변환하는 방식이 표준으로 사용된다.
📢 섹션 요약 비유: 서비스 디스커버리는 동적으로 변하는 클라우드의 '내비게이션'이다. 도로 상황(인스턴스 상태)에 맞춰 실시간으로 최적의 경로를 업데이트해준다.
Ⅴ. 기대효과 및 결론
서비스 디스커버리는 MSA의 유연성과 확장성을 뒷받침하는 핵심 인프라다. 이를 통해 개발자는 상대방의 IP를 몰라도 서비스 이름만으로 통신할 수 있으며, 시스템은 부하에 따라 자유롭게 인스턴스를 늘리고 줄일 수 있다. 현대적인 인프라 환경에서는 Kubernetes의 내장 기능을 사용하는 것이 대세이며, 더 정교한 제어가 필요한 경우 Consul이나 Istio와 결합하여 사용한다.
📢 섹션 요약 비유: 서비스 디스커버리는 IT 세상의 '스마트폰 자동 업데이트 주소록'이다. 친구 주소가 바뀌어도 폰이 알아서 바꿔주니 우리는 그냥 이름만 눌러 전화하면 된다.
📌 관련 개념 맵
| 개념 | 연관 키워드 | 관계 |
|---|---|---|
| Service Registry | Eureka, Consul, ZooKeeper | 서비스 주소가 저장되는 중앙 DB |
| Health Check | Heartbeat, 생존 신고 | 비정상 인스턴스 자동 제거 메커니즘 |
| Load Balancer | Ribbon, Nginx, ELB | 디스커버리 정보를 바탕으로 트래픽 분산 |
| Kube-DNS | 서비스 이름 해석 | Kubernetes의 표준 디스커버리 구현체 |
👶 어린이를 위한 3줄 비유 설명
- 인터넷 서비스들이 이사를 자주 다녀도 주소를 잃어버리지 않게 도와주는 자동 주소록이에요.
- 새로운 서비스가 태어나면 '나 여기 있어!'라고 주소록에 이름을 적어요.
- 다른 서비스가 그 친구를 찾을 때 주소록을 보고 바로 찾아갈 수 있어요.