2026. 1. 4. 21:09ㆍSpring Microservice/Service Discovery




🧭 Spring Eureka에 서비스 등록하기 (Registering Services with Spring Eureka)
— Spring Boot 마이크로서비스를 Eureka 서비스 레지스트리에 등록하는 전체 흐름 정리 🚀
✨ 개요: 지금 우리는 무엇을 하고 있는가?
이미 Spring 기반 Eureka Server를 성공적으로 구축하셨습니다 👍
이제 다음 단계는 각 마이크로서비스(organization, licensing) 가 자기 자신을 Eureka에 등록(register) 하도록 설정하는 것입니다.
이 과정을 통해 우리는 다음을 명확히 이해하게 됩니다.
✅ Spring Boot 마이크로서비스를 Eureka에 등록하는 방법
✅ application ID / instance ID 개념
✅ 왜 IP 기반 등록을 선호하는지
✅ Spring Cloud Config와 Eureka 설정 분리 전략
✅ Eureka의 고가용성(HA) 개념
✅ Eureka REST API로 서비스 조회하는 방법
✅ “서비스가 바로 안 보이는 이유(30초 룰)”
📌 중요 포인트
이 섹션에서는 비즈니스 로직 구현이 아닌,
👉 “서비스 디스커버리에 등록되는 과정” 자체 에 집중합니다.
🧩 실습 대상 서비스 소개
이번 챕터에서는 두 개의 마이크로서비스를 사용합니다.
- 🏢 organization-service
- 📜 licensing-service
이 두 서비스는 모두 Eureka Client 로 동작합니다.
📦 전체 예제 코드는 아래 링크에서 다운로드할 수 있습니다.
👉 https://github.com/ihuaylupo/manning-smia/tree/master/chapter6/Initial
⚠️ 참고
이미 가지고 계신 다른 마이크로서비스를 사용해도 무방합니다.
단, service ID (spring.application.name) 는 반드시 일관성 있게 관리해야 합니다.
📦 1단계: Eureka Client 의존성 추가
먼저 organization-service 와 licensing-service 의 pom.xml 에
Eureka Client 의존성을 추가합니다.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
🔍 이 의존성의 역할은?
- Spring Cloud가 Eureka Server와 통신할 수 있도록 필요한 JAR 포함
- 서비스 등록, 헬스체크, 레지스트리 조회 기능 제공
🆔 2단계: spring.application.name 설정 (매우 중요!)
Eureka에 등록되는 모든 서비스는 두 가지 식별자를 가집니다.
🔑 Application ID
- 서비스 논리적 그룹 이름
spring.application.name값과 완전히 동일- 예:
organization-servicelicensing-service
🔢 Instance ID
- 단일 서비스 인스턴스를 구분하기 위한 값
- Eureka가 자동으로 랜덤 생성
📄 application.yml 설정 예시
organization-service
spring:
application:
name: organization-service
profiles:
active: dev
cloud:
config:
uri: http://localhost:8071
licensing-service
spring:
application:
name: licensing-service
profiles:
active: dev
cloud:
config:
uri: http://localhost:8071
📌 왜 bootstrap.yml 인가?Eureka & Config Server 설정은 애플리케이션 컨텍스트보다 먼저 로딩되어야 하기 때문입니다.
⚙️ 3단계: Eureka 등록 설정 (Config Server에서 관리)
이제 서비스가 Eureka에 등록되도록 설정해야 합니다.
💡 핵심 전략
👉 각 서비스의 Eureka 설정을 Config Server로 위임
📂 설정 파일 위치
Spring Config Server 프로젝트 기준:
src/main/resources/config/organization-service.propertiessrc/main/resources/config/licensing-service.properties
📄 properties 파일 설정
eureka.instance.preferIpAddress = true
eureka.client.registerWithEureka = true
eureka.client.fetchRegistry = true
eureka.client.serviceUrl.defaultZone = http://localhost:8070/eureka/
📄 application.yml 형태라면?
eureka:
instance:
preferIpAddress: true
client:
registerWithEureka: true
fetchRegistry: true
serviceUrl:
defaultZone: http://localhost:8070/eureka/
🌐 왜 preferIpAddress = true 인가? (🔥 핵심 질문)
디폴트로 Eureka는 호스트 이름(hostname) 으로 서비스를 등록합니다.
🖥️ 서버 환경에서는?
- DNS 기반 hostname 존재
- 문제 없음 ✅
🐳 Docker / 컨테이너 환경에서는?
- 컨테이너 시작 시 랜덤 hostname
- DNS 엔트리 ❌
- 👉 서비스 해석 실패
📌 해결책:
eureka.instance.preferIpAddress: true
💬 저자의 의견 (그리고 실무 권장 사항):
“우리는 항상 true로 설정합니다.”
왜냐하면:
- ☁️ 클라우드 마이크로서비스는 일시적(ephemeral)
- 📦 상태 없음(stateless)
- 🔁 언제든 재시작 가능
→ IP 기반 식별이 더 적합
🔄 Eureka Client 주요 옵션 설명
✅ registerWithEureka
eureka.client.registerWithEureka: true
- 해당 서비스가 Eureka에 자신을 등록
- 기본값:
true
📥 fetchRegistry
eureka.client.fetchRegistry: true
- Eureka Registry를 로컬 캐시
- 매 요청마다 Eureka 호출 ❌
- ⏱️ 30초마다 변경사항 동기화
⚠️ 참고
위 두 설정은 기본값이 true지만,
학습 목적상 명시적으로 선언했습니다.
🌍 serviceUrl.defaultZone
eureka.client.serviceUrl.defaultZone:
http://localhost:8070/eureka/
- Eureka Server 주소 목록
- 콤마(,)로 여러 개 지정 가능
- 고가용성(HA)을 위한 설정의 출발점
🏗️ Eureka와 고가용성(HA)
⚠️ 주의할 점!
❌ defaultZone에 URL 여러 개 적는 것만으로는 HA가 아님
진짜 HA를 위해 필요한 것
- Eureka Server 간 Peer-to-Peer 레지스트리 복제
- 각 Eureka 노드가 서로를 인지해야 함
📚 이 내용은 책 범위를 벗어나므로 아래 공식 문서 참고:
👉 https://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-eureka-server
🔍 Eureka REST API로 서비스 조회하기
Eureka는 REST API를 통해 등록된 서비스 목록을 제공합니다.
📌 특정 서비스 조회
GET http://<eureka-host>:8070/eureka/apps/<APPID>
예:
GET http://localhost:8070/eureka/apps/organization-service
📄 응답 포맷
- 디폴트값: XML
- JSON으로 받고 싶다면?
Accept: application/json
👉 Eureka는 XML / JSON 둘 다 지원합니다.
⏳ 서비스 기동 시 주의사항 (🔥 진짜 많이 헷갈리는 부분)
❗ “왜 서비스가 바로 안 보여요?”
Eureka는 서비스 등록 후 즉시 활성화하지 않습니다.
📌 내부 동작:
- 30초 동안
- 3번 연속 헬스체크 성공
- 그 이후에야
UP상태 전환
🐳 Docker 환경에서 특히 주의!
- Eureka + 서비스들이 동시에 기동
- 초기에는:
- ❌ 404 Not Found
- ❌ Service not found
- 하지만…
- ⏱️ 30초 후 정상 동작
💬 결론:
“조급해하지 마세요 😄
Eureka는 느리지만 신중합니다.”
🏁 마무리 정리
🎯 이 글에서 다룬 핵심 요약
- ✔️ Spring Boot 마이크로서비스를 Eureka에 등록하는 전체 흐름
- ✔️ application ID / instance ID 개념
- ✔️ preferIpAddress가 중요한 이유
- ✔️ Spring Cloud Config와 Eureka 설정 분리 전략
- ✔️ Eureka REST API 활용법
- ✔️ 서비스 기동 시 30초 워밍업 이슈
'Spring Microservice > Service Discovery' 카테고리의 다른 글
| Looking up service instances with Spring Discovery Client (1) | 2026.01.04 |
|---|---|
| Using service discovery to look up a service (0) | 2026.01.04 |
| Building our Spring Eureka service (0) | 2026.01.04 |
| Service discovery in the cloud (0) | 2026.01.04 |
| Where’s my service? (1) | 2026.01.04 |