OPEN HYPER STEP
← 목록으로 (Java+Spring)
JAVA · 92 / 99
java
CHAPTER 92 / 99
읽기 약 2
FUNCTION

Eureka: 서비스 디스커버리


핵심 개념

서비스 등록/발견·@EnableEurekaServer/@EnableEurekaClient — 동적 스케일링.

본문

Eureka 서버

GRADLE📋 코드 (2줄)
// build.gradle
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
JAVA📋 코드 (7줄)
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}
YAML📋 코드 (14줄)
# application.yml
server:
  port: 8761

spring:
  application:
    name: eureka-server

eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false

Eureka 클라이언트 (각 마이크로서비스)

GRADLE📋 코드 (1줄)
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
JAVA📋 코드 (3줄)
@SpringBootApplication
@EnableEurekaClient  // 또는 @EnableDiscoveryClient
public class UserServiceApplication { }
YAML📋 코드 (11줄)
spring:
  application:
    name: user-service

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${random.uuid}

서비스 호출 — RestTemplate + LoadBalanced

JAVA📋 코드 (24줄)
@Configuration
public class RestConfig {

    @Bean
    @LoadBalanced  // Eureka에서 인스턴스 자동 발견
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}


@Service
@RequiredArgsConstructor
public class OrderService {
    private final RestTemplate restTemplate;

    public ProductDto getProduct(Long productId) {
        // 서비스 이름으로 호출 — Eureka가 IP 자동 해결
        return restTemplate.getForObject(
            "http://product-service/products/" + productId,
            ProductDto.class
        );
    }
}

Eureka Dashboard

📋 코드 (7줄)
http://localhost:8761/

표시:
- 등록된 서비스 목록
- 각 서비스의 인스턴스 수
- 인스턴스 상태 (UP/DOWN)
- 메타데이터 (port, version)

등록·해제·하트비트

YAML📋 코드 (4줄)
eureka:
  instance:
    lease-renewal-interval-in-seconds: 30  # 30초마다 하트비트
    lease-expiration-duration-in-seconds: 90  # 90초 후 제거

클러스터 모드 (HA)

YAML📋 코드 (11줄)
# 3개 Eureka 서버 클러스터
# eureka1.yml
spring:
  application:
    name: eureka-server
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka2:8761/eureka/,http://eureka3:8761/eureka/

Spring Cloud LoadBalancer (대안)

JAVA📋 코드 (4줄)
// Netflix Eureka는 maintenance mode
// Spring Cloud LoadBalancer가 새 표준

// 사용은 거의 동일 — @LoadBalanced 자동 적용

다음 챕터

CH.24 "Feign Client" — 선언적 HTTP 클라이언트.


AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

내 Spring 코드의 서비스 디스커버리 부분을 분석해서
동적 등록·해제 안정성와 개선 우선순위를 알려줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

서비스 디스커버리 vs 다른 패턴 비교를
실전 사례 5개로 보여주고 Eureka vs Consul vs K8s Service를 알려줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

내 코드베이스 전체를 분석해서
서비스 디스커버리 관련 서비스 등록 누락 위치를 보고해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 한국 기업의 서비스 디스커버리 채택률과
한국 MSA 디스커버리 채택률를 솔직히 알려줘.

⭐ 이것만 기억하세요
Eureka: 서비스 디스커버리 이 3가지만 확실히 잡으세요
1.Eureka는 서비스 등록·발견 + 헬스 체크 — IP 하드코딩 제거
2.@LoadBalanced + service-name 호출로 동적 IP 해결 + 자동 부하 분산
3.다음 챕터 CH.24에서 Feign — 더 간결한 서비스 간 통신


공유하기
진행도 92 / 99