Spring Microservice

On service discovery

헬로우월드 2025. 3. 14. 11:12

✨ 서비스 디스커버리(Service Discovery)란?

분산 아키텍처에서 중요한 과제 중 하나는 특정 머신이 어디에서 실행되고 있는지를 찾는 것입니다. 이는 분산 컴퓨팅이 등장한 이래로 항상 해결해야 할 문제였으며, 이를 "서비스 디스커버리(Service Discovery)"라고 부릅니다.

서비스 디스커버리는 단순하게 프로퍼티 파일에 모든 원격 서비스의 주소를 기록하는 방법부터, UDDI(Universal Description, Discovery, and Integration) 저장소와 같은 공식적인 방식까지 다양하게 존재합니다. 특히, 마이크로서비스 및 클라우드 기반 애플리케이션에서는 두 가지 핵심 이유로 인해 서비스 디스커버리가 필수적입니다.

 

🛠️ 서비스 디스커버리가 중요한 이유

1. ⬆️ 수평 확장(Scale-out)

클라우드 환경에서는 트래픽 변화에 따라 유연하게 서비스 인스턴스를 추가하거나 제거할 수 있어야 합니다. 서비스 디스커버리는 서비스 소비자가 물리적인 서비스 인스턴스의 위치를 알 필요 없이, 새로운 인스턴스를 자유롭게 추가하거나 제거할 수 있도록 합니다.

수평 확장의 장점

  • 서비스 인스턴스를 동적으로 추가/제거 가능
  • 물리적인 서버 위치에 대한 의존성 제거
  • 클라우드 환경에서 손쉬운 오토스케일링 지원

대부분의 전통적인 개발팀은 성능 향상을 위해 수직 확장(Scale-up)—즉, 더 좋은 하드웨어로 교체하는 방식—에 의존해 왔습니다. 그러나 이 방식은 용량 증가가 점진적으로 이루어지지 않고 급격한 비용 증가를 초래할 수 있습니다. 반면, 마이크로서비스 환경에서는 서비스 인스턴스를 필요할 때마다 추가하는 방식으로 부하를 분산할 수 있습니다.

예를 들어, 연말연시 쇼핑 시즌 동안 e-commerce 사이트의 트래픽이 폭증할 경우, 마이크로서비스 기반 아키텍처에서는 자동으로 새로운 서비스 인스턴스를 생성하여 부하를 분산할 수 있습니다. 그리고 서비스 디스커버리는 이러한 인스턴스 추가/제거를 서비스 소비자에게 투명하게 처리해 줍니다.

 

2. 🔄 애플리케이션 회복력(Resiliency) 향상

서비스 디스커버리는 단순한 로드 밸런싱을 넘어 장애 발생 시 자동으로 비정상 인스턴스를 제거하는 기능을 제공합니다.

회복력 강화를 위한 서비스 디스커버리 역할

  • 비정상 인스턴스 제거: 서비스가 다운되면 즉시 서비스 목록에서 제거
  • 자동 우회: 장애가 발생한 서비스로의 요청을 정상 서비스로 우회
  • 전체 시스템 영향 최소화: 단일 장애로 인해 전체 시스템이 영향을 받는 것을 방지

마이크로서비스 환경에서는 개별 서비스가 독립적으로 실행되며, 특정 서비스가 장애를 일으키더라도 전체 시스템이 정상적으로 동작할 수 있도록 설계되어야 합니다. 서비스 디스커버리는 이러한 회복력을 자동화하는 핵심 요소입니다.

💭 DNS나 로드 밸런서를 사용하면 안 될까?

기존의 DNS나 로드 밸런서를 사용하면 되지 않을까 생각할 수도 있습니다. 하지만 마이크로서비스 아키텍처에서는 다음과 같은 한계가 있습니다.

  • DNS는 변경 전파 속도가 느림: 새로운 서비스 인스턴스가 추가되거나 제거될 때, DNS는 즉시 반영되지 않음
  • 로드 밸런서는 상태를 알지 못함: 일반적인 로드 밸런서는 서비스가 정상인지 여부를 실시간으로 체크하기 어려움
  • 동적 스케일링 한계: 클라우드 환경에서 서비스 인스턴스가 수시로 변경될 경우, DNS나 로드 밸런서는 이를 빠르게 반영할 수 없음

이를 해결하기 위해 우리는 Eureka 같은 서비스 디스커버리 솔루션을 활용할 수 있습니다. 다음 글에서는 Eureka Discovery를 활용한 서비스 디스커버리 구현 방법을 자세히 살펴보겠습니다! 🚀

 

📖 서비스 디스커버리의 핵심 포인트

🔹 마이크로서비스 및 클라우드 환경에서는 동적 서비스 디스커버리가 필수적 🔹 서비스 디스커버리는 수평 확장과 회복력을 지원하여 안정적인 운영을 가능하게 함 🔹 전통적인 DNS나 로드 밸런서 방식은 한계가 있으므로 전용 서비스 디스커버리 솔루션을 활용해야 함

다음 글에서는 ✨ Spring Cloud Eureka를 활용하여 서비스 디스커버리를 구현하는 방법을 살펴보겠습니다! 🚀

  • 기존 서비스 위치 해결 방식과 한계점
  • 클라우드 환경에서의 서비스 디스커버리
  • Spring Eureka service 빌드
  • Spring Boot 마이크로서비스를 Eureka Server에 등록하기
  • Eureka를 활용한 서비스 탐색(Service Discovery)과 마이크로서비스 호출