취미겸생업

[Spring boot] Spring Cloud 서비스 디스커버리 (Eureka) 본문

IT/Spring Boot

[Spring boot] Spring Cloud 서비스 디스커버리 (Eureka)

nohumb 2026. 6. 25. 16:05

서비스 디스커버리 (Eureka)

마이크로서비스 아키텍처에서 각 서비스의 위치를 동적으로 관리하고 찾아주는 기능으로, 각 서비스는 등록 서버에 자신의 위치를 등록하고, 다른 서비스는 이를 조회하여 통신한다

Eureka란

  • 넷플릭스가 개발한 서비스 디스커버리 서버로, 마이크로서비스 아키텍처에서 각 서비스의 위치를 동적으로 관리
  • 모든 서비스 인스턴스의 위치를 저장하는 중앙 저장소 역할을 하며, 서비스 인스턴스의 상태를 주기적으로 확인하여 가용성을 보장
  • 여러 인스턴스를 지원하여 고가용성을 유지할 수 있음

Eureka 서버 설정

  • build.gradle

    dependencies {
      implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
      ...
    }
  • application.yml

    server:
      port: 8761
    eureka:
      client:
          register-with-eureka: false  # 다른 Eureka 서버에 이 서버를 등록하지 않음
          fetch-registry: false  # 다른 Eureka 서버의 레지스트리를 가져오지 않음
      server:
          enable-self-preservation: false  # 자기 보호 모드 비활성화
  • EurekaConfig.java

    @Configuration
    @EnableEurekaServer
    public class EurekaConfig {}

Eureka 클라이언트 설정

의존성 추가와 application.yml 설정만으로 Eureka 서버에 서비스가 등록된다

  • build.gradle

    dependencies {
      implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
      ...
    }
  • application.yml

    spring:
      application:
          name: my-service
    eureka:
      client:
          service-url:
              defaultZone: http://localhost:8761/eureka/  # Eureka 서버 URL
          register-with-eureka: true  # Eureka 서버에 등록
          fetch-registry: true  # Eureka 서버로부터 레지스트리 정보 가져오기
      instance:
          hostname: localhost  # 클라이언트 호스트 이름
          prefer-ip-address: true  # IP 주소 사용 선호
          lease-renewal-interval-in-seconds: 30  # 리스 갱신 간격
          lease-expiration-duration-in-seconds: 90  # 리스 만료 기간

헬스 체크 및 장애 처리

  • Eureka 서버는 주기적으로 서비스 인스턴스의 상태를 확인
    • 기본 엔드포인트 : “/actuator/health”
  • 서비스 장애 시 Eureka 서버는 해당 인스턴스를 레지스트리에서 제외하여 다른 서비스의 접근을 차단

고가용성(HA) 구성

Eureka 서버는 다중 인스턴스를 사용해 HA 클러스터를 구성할 수 있다. Eureka 서버는 장애 발생 시 모든 서비스에 문제가 발생하기 때문에 서비스 환경에서 다중화는 필수이다.

  • application.yml

    eureka:
      client:
          service-url:
              defaultZone: http://eureka-peer1:8761/eureka/,http://eureka-peer2:8761/eureka/

'IT > Spring Boot' 카테고리의 다른 글

[Spring boot] Resilience4j 서킷 브레이커  (0) 2026.07.01
[Spring boot] Spring Cloud 로드밸런싱  (0) 2026.06.30
[Spring boot] MSA, Spring Cloud 개요  (0) 2026.06.24
[Spring boot] @Scheduled  (0) 2026.06.23
[Spring boot] JPA Projection  (0) 2026.04.17