Building our Spring Eureka service

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

ImageImageImageImage

🚀 Spring Cloud Eureka Server 구축하기

Config Server 기반 서비스 디스커버리의 시작

마이크로서비스 아키텍처(MSA)에서 서비스 디스커버리(Service Discovery) 는 더 이상 선택이 아닌 필수 인프라입니다.
이번 챕터에서는 Spring Cloud + Eureka Server 를 활용하여 서비스 등록·탐색의 중심 노드를 구축하는 과정을 실무 관점에서 정리해보겠습니다.

 

🧭 왜 Eureka Server가 필요한가?

기존 모놀리식 환경에서는 다음과 같은 방식으로 서비스 위치를 찾았습니다.

  • DNS + Load Balancer (F5, HAProxy 등)
  • 고정 IP + 포트 기반 접근

❌ 하지만 클라우드 환경에서는 문제가 됩니다.

  • 컨테이너는 수시로 생성/삭제
  • IP는 동적
  • 오토스케일링으로 인스턴스 수가 계속 변함

✅ 해결책이 바로 Eureka Server입니다.

Eureka는 서비스 인스턴스들의 메타데이터를 중앙에서 관리하고
클라이언트가 동적으로 서비스 위치를 조회하도록 해줍니다.

 

🏗️ 1. Eureka Server 프로젝트 생성 (Spring Initializr)

📍 https://start.spring.io 에서 다음과 같이 설정합니다.

📌 기본 설정

  • Project: Maven
  • Language: Java
  • Spring Boot: 3.5.9 (Stable)
  • Group: com.optimagrowth
  • Artifact: eurekaserver
  • Name: Eureka Server
  • Description: Eureka server
  • Package name: com.optimagrowth.eureka
  • Packaging: JAR
  • Java: 17

📦 의존성 추가

  • ✅ Eureka Server
  • ✅ Config Client
  • ✅ Spring Boot Actuator

 

📦 2. pom.xml 핵심 구성 분석 🔍

<properties>
    <java.version>11</java.version>
    <spring-cloud.version>2025.0.1</spring-cloud.version>
</properties>

🔥 핵심 포인트

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>

    <!-- Ribbon 제거 -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.netflix.ribbon</groupId>
            <artifactId>ribbon-eureka</artifactId>
        </exclusion>
    </exclusions>
</dependency>

💡 왜 Ribbon을 제거할까?

  • Ribbon은 Netflix OSS에서 유지 중단
  • Spring Cloud에서는 Spring Cloud LoadBalancer 사용 권장
  • 불필요한 자동 구성 충돌 방지 🧯
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

 

⚙️ 3. application.yml 설정 (Config Server 연동)

Eureka Server 역시 Config Server에서 설정을 가져오는 클라이언트입니다.
따라서 application.yml 이 반드시 필요합니다.

spring:
  application:
    name: eureka-server

  cloud:
    config:
      uri: http://localhost:8071

    loadbalancer:
      ribbon:
        enabled: false

 

✅ 핵심 포인트 정리

설정 의미
spring.application.name Config Server에서 참조할 설정 파일 이름
config.uri Config Server 주소
ribbon.enabled=false Ribbon 완전 비활성화

 

🗂️ 4. Eureka 전용 설정 파일 (Config Server 저장소)

Config Server 저장소에 Eureka 전용 구성 파일을 생성합니다.

📁 경로 예시

classpath:/config/eureka-server.yml

 

📄 eureka-server.yml

server:
  port: 8070

eureka:
  instance:
    hostname: localhost

  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

  server:
    waitTimeInMsWhenSyncEmpty: 5

🔍 설정 항목별 실무 해설

🟢 registerWithEureka: false

  • Eureka 자기 자신을 등록하지 않음
  • 단일 노드 서버에서는 필수 설정

🟢 fetchRegistry: false

  • 다른 Eureka 노드의 레지스트리를 가져오지 않음
  • Standalone 모드

🟢 defaultZone

  • 클라이언트들이 접속할 Eureka 엔드포인트

🟢 waitTimeInMsWhenSyncEmpty

  • 기본값: 5분
  • 로컬 테스트 시 5ms로 단축
  • 서비스 등록 확인 시간 단축 🚀

⚠️ 참고

Eureka는 10초 간격 heartbeat 3회를 받아야
서비스가 정상 등록됨 (최대 30초)

 

🧩 5. Eureka Server 활성화 (@EnableEurekaServer)

이제 Eureka를 서버 모드로 활성화합니다.

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

✨ 이 한 줄의 애노테이션이 의미하는 것

  • 서비스 레지스트리 활성화
  • REST 기반 등록/조회 API 자동 구성
  • 대시보드 UI 제공 (/)

 

▶️ 6. 실행 순서 & 주의사항 🚨

✅ 올바른 실행 순서

1️⃣ Spring Config Server 먼저 실행
2️⃣ Eureka Server 실행
3️⃣ Client 서비스 실행 (licensing, organization 등)

 

❌ Config Server 미실행 시 발생 오류

Connect Timeout Exception on Url - http://localhost:8071
Connection refused

📌 해결책

  • Docker Compose로 의존 서비스 묶어서 실행
  • Config → Eureka → Client 순서 유지

 

🎯 마무리 정리

✅ 이 단계까지 완료하면 다음이 보장됩니다.

  • ✔ 중앙 집중식 서비스 등록소 구축
  • ✔ 동적 서비스 디스커버리 가능
  • ✔ Config Server 기반 설정 일원화
  • ✔ Ribbon 제거 → 최신 LoadBalancer 사용

'Spring Microservice > Service Discovery' 카테고리의 다른 글

Using service discovery to look up a service  (0) 2026.01.04
Registering services with Spring Eureka  (0) 2026.01.04
Service discovery in the cloud  (0) 2026.01.04
Where’s my service?  (1) 2026.01.04
Feign Client  (1) 2025.03.14