서비스 디스커버리

MSA / Spring Cloud

서비스 디스커버리와 Netflix Eureka 이해하기

동적인 환경에서 길을 잃지 않는 마이크로서비스 구축 전략

💡 핵심 요약: 수많은 마이크로서비스가 생성되고 소멸하는 동적인 환경에서는 서비스의 위치(IP, Port)를 수동으로 관리할 수 없습니다. 이를 자동으로 해결해주는 서비스 디스커버리와 그 중심에 있는 Eureka의 동작 원리를 알아봅니다.

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

서비스 디스커버리는 마이크로서비스 아키텍처에서 각 서비스의 위치를 동적으로 관리하고 찾아주는 핵심 기능입니다.

  • 서비스 등록: 새로운 인스턴스가 실행될 때 자신의 위치를 중앙 서버에 알립니다.
  • 서비스 조회: 특정 서비스가 필요할 때 중앙 서버를 통해 현재 가용 가능한 인스턴스 위치를 받아옵니다.
  • 헬스 체크: 주기적으로 인스턴스의 상태를 확인하여 장애가 발생한 인스턴스를 리스트에서 제거합니다.

2. Netflix Eureka: MSA의 전화번호부

Eureka는 넷플릭스가 개발한 서비스 디스커버리 서버로, 모든 서비스 인스턴스의 위치를 저장하는 중앙 저장소 역할을 수행합니다.

Eureka 서버 설정의 핵심

# application.yml 예시
eureka:
  client:
    register-with-eureka: false # 자신을 등록 서버에 등록하지 않음 (서버니까!)
    fetch-registry: false       # 레지스트리 정보를 가져오지 않음
  server:
    enable-self-preservation: false # 자기 보호 모드 비활성화 (테스트 시 권장)

* 자기 보호 모드(Self-Preservation)를 비활성화하면 네트워크 일시적 장애가 아닌 실제 장애 인스턴스를 더 빠르게 제거할 수 있습니다.

3. 유레카 클라이언트 구성하기

각 마이크로서비스(Client)는 유레카 서버에 자신을 등록해야 합니다. 설정 파일에 서버의 주소를 명시하는 것이 중요합니다.

# first-service application.properties
spring.application.name=first-service
server.port=19091
eureka.client.service-url.defaultZone=http://localhost:19090/eureka/

💡 실행 순서 주의: 반드시 유레카 서버를 먼저 구동한 후, 각 서비스 인스턴스(first, second)를 실행해야 정상적으로 등록됩니다.

 

4. 면접 대비 필수 개념

  • 고가용성(High Availability): Eureka 서버 자체가 죽으면 전체 시스템이 마비됩니다. 실제 운영 환경에서는 여러 대의 Eureka 서버를 띄워 서로 정보를 복제하게 구성한다.
  • Client-Side Discovery: 클라이언트가 Eureka로부터 리스트를 받아 직접 로드 밸런싱(예: Ribbon/Spring Cloud Load Balancer)하여 요청을 보내는 방식이 일반적이다. 

Q1. 서비스 디스커버리가 왜 필요한가요?

  • 답변: 클라우드 환경에서는 서비스의 IP 주소가 동적으로 변하고 인스턴스 수가 늘어났다 줄어들기를 반복합니다. 모든 위치를 수동으로 관리하는 것은 불가능하기 때문에, 각 서비스의 위치를 자동으로 등록하고 조회하며 관리해주는 서비스 디스커버리가 필수적입니다.

Q2. Eureka Server의 enable-self-preservation 속성은 무엇인가요?

  • 답변: '자기 보호 모드' 설정입니다. 네트워크 일시적 장애로 인해 다수의 클라이언트 응답이 끊겼을 때, Eureka가 이들을 장애로 판단하여 레지스트리에서 한꺼번에 삭제하는 것을 방지하는 기능입니다. 테스트 환경에서는 빠른 인스턴스 갱신을 위해 false로 설정하기도 하지만, 운영 환경에서는 가용성을 위해 신중히 고려해야 합니다.

Q3. Eureka 클라이언트가 서버에 자신을 등록할 때 사용하는 정보는 무엇인가요?

  • 답변: 주로 spring.application.name에 정의된 서비스 이름과, 실제 구동 중인 IP 및 포트 정보를 전달합니다. 유레카 대시보드(http://localhost:8761)를 통해 이 정보들이 정상적으로 등록되었는지 시각적으로 확인할 수 있습니다.

'MSA' 카테고리의 다른 글

API 게이트웨이  (0) 2026.04.15
서킷브레이커  (1) 2026.04.14
로드밸런싱  (0) 2026.04.14
Spring Cloud  (0) 2026.04.13
MSA란?  (0) 2026.04.13