Service discovery in the cloud

2026. 1. 4. 20:43Spring Microservice/Service Discovery

☁️ Cloud 환경에서의 Service Discovery

Spring Cloud & Netflix Eureka 기반 실전 아키텍처

마이크로서비스 아키텍처(MSA)에서 Service Discovery는 선택이 아니라 필수 인프라입니다.
서비스가 동적으로 생성·종료되는 클라우드 환경에서는 IP와 포트를 하드코딩하는 방식은 더 이상 유효하지 않습니다.

이번 글에서는 다음 질문에 답해봅니다 👇

  • ❓ 클라우드 환경에서 서비스는 서로를 어떻게 찾는가?
  • ❓ 왜 DNS + Load Balancer 방식은 한계가 있는가?
  • ❓ Service Discovery는 어떤 조건을 만족해야 하는가?
  • ❓ Spring Cloud + Eureka는 이를 어떻게 해결하는가?

 

🚨 기존 방식의 한계: DNS + Load Balancer

과거의 시스템은 다음과 같은 구조를 사용했습니다.

ImageImageImage

📌 문제점

  • 정적인 라우팅 테이블
  • 수동 설정 필요
  • 인스턴스 증감에 취약
  • 장애 감지 및 제거가 느림

👉 클라우드 & 컨테이너 환경에는 부적합

 

✅ 클라우드 시대의 해법: Service Discovery

Service Discovery는 서비스 스스로 자신의 위치를 등록하고,
클라이언트는 이름(Service ID)만으로 서비스 호출이 가능하게 합니다.

 

🎯 클라우드 Service Discovery가 갖춰야 할 조건

요구사항 설명
🔥 High Availability 다중 노드 클러스터 구성
🔄 Peer-to-Peer 노드 간 상태 공유
⚖️ Load Balanced 요청을 인스턴스에 균등 분산
🧠 Resilient 클라이언트 로컬 캐시
🛡 Fault Tolerant 비정상 인스턴스 자동 제거

 

🧠 핵심 개념 4가지

Service Discovery는 아래 4가지 핵심 메커니즘으로 구성됩니다.

ImageImage

1️⃣ Service Registration (서비스 등록)

  • 서비스 시작 시 Discovery 서버에 자신의 IP, Port, Path 등록
  • 동일한 서비스는 같은 Service ID로 묶임

2️⃣ Client Lookup (서비스 조회)

  • 클라이언트는 Service ID로 서비스 검색
  • 실제 IP/Port는 Discovery 서버가 제공

3️⃣ Information Sharing (정보 전파)

  • Discovery 서버는 P2P 구조
  • Gossip / Infection Protocol 기반 동기화

4️⃣ Health Monitoring (헬스 체크)

  • 서비스 상태 주기적 확인
  • ❌ 비정상 → 자동 제거

 

🔁 Client-side Load Balancing의 진짜 가치

❌ Discovery 서버에 매번 의존하는 구조

  • Discovery 서버 장애 시 전체 장애

✅ Client-side Load Balancing 구조

  • 클라이언트가 서비스 목록을 로컬 캐시
  • Round-robin, Zone-aware 알고리즘 사용

ImageImage

📌 동작 흐름

  1. 📥 서비스 목록 조회 → 로컬 캐시 저장
  2. ⚖️ 캐시 기반 로드 밸런싱 호출
  3. 🔄 주기적 캐시 갱신 (Eventually Consistent)
  4. ❌ 호출 실패 시 → 캐시 무효화 후 재조회

👉 Discovery 서버 장애에도 서비스 지속 가능

 

🚀 Spring Cloud + Netflix Eureka 실전 적용

Spring Cloud는 Service Discovery 구현을 극도로 단순화합니다.

🧩 사용 기술 스택

  • 🧭 Service Discovery: Netflix Eureka
  • ⚖️ Client-side LB: Spring Cloud LoadBalancer
  • ❌ Ribbon: Deprecated (유지보수 모드)

🏗 O-stock 마이크로서비스 예제 구조

ImageImage

구성 서비스

  • 🧾 Licensing Service
  • 🏢 Organization Service (2 instances)
  • 🧭 Eureka Server

🔄 서비스 호출 흐름

1️⃣ 서비스 기동

  • 모든 서비스가 Eureka에 자동 등록
  • Service ID + IP + Port 저장

2️⃣ 서비스 호출

  • Licensing Service → Organization Service 호출
  • Spring Cloud LoadBalancer 사용
  • Eureka 조회 후 로컬 캐시

3️⃣ 캐시 동기화

  • 주기적 Eureka Ping
  • 신규 인스턴스 추가 / 장애 인스턴스 제거

👉 무중단 · 자동 확장 · 자동 장애 복구

 

🎯 정리하며

Service Discovery는 단순한 기술이 아니라
MSA 생존을 좌우하는 핵심 인프라입니다.

✔ 핵심 요약

  • IP 기반 호출 ❌ → Service ID 기반 호출 ✅
  • 중앙 LB ❌ → Client-side LB ✅
  • 수동 설정 ❌ → 자동 등록 & 헬스체크 ✅

Spring Cloud + Eureka는
“클라우드 네이티브 MSA의 기본 문법”입니다.