-
Spring Boot 시리즈 34편 – Eureka와 서비스 디스커버리 구조: 마이크로서비스 환경에서의 자동 인스턴스 탐색 전략기술과 산업/언어 및 프레임워크 2025. 5. 21. 12:04728x90
Spring Cloud의 Eureka를 활용한 서비스 디스커버리 구조를 설명합니다. 마이크로서비스 환경에서 인스턴스 등록과 탐색, 자동 라우팅, 헬스체크 설정 등 운영 기준의 구성 전략을 다룹니다.
마이크로서비스 환경에서는 서비스가 고정된 IP나 포트를 가지지 않습니다.
동적으로 배포되고, 스케일 아웃 되며, 서버가 재시작될 수도 있습니다.이처럼 동적으로 변하는 서비스 주소를 일일이 관리하는 것은 사실상 불가능합니다.
이를 해결하기 위한 핵심 전략이 서비스 디스커버리입니다.Spring Cloud의 Eureka는 넷플릭스 OSS 생태계에서 시작된 대표적인 서비스 레지스트리이자 디스커버리 서버입니다.
1. 서비스 디스커버리란?
개념 설명
Service Registry 서비스 인스턴스가 자신의 위치(IP, port 등)를 등록하는 중앙 저장소 Service Discovery 클라이언트 또는 게이트웨이가 이 레지스트리에서 현재 인스턴스 정보를 조회하는 행위
2. Eureka의 기본 구조
[Service A] → 등록 → [Eureka Server] ← 조회 ← [Service B]
- 각 마이크로서비스는 Eureka Server에 자신을 등록함
- 클라이언트는 Eureka에서 대상 서비스 위치를 실시간 조회함
- 이를 통해 IP나 포트를 몰라도 통신 가능
3. Eureka Server 구축
1) 의존성 추가
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
2) 설정
@SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
3) application.yml
server: port: 8761 eureka: client: register-with-eureka: false fetch-registry: false
→ 자체 등록 및 조회는 하지 않도록 설정
4. Eureka Client 설정
1) 의존성 추가
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
2) application.yml
spring: application: name: user-service eureka: client: service-url: defaultZone: http://localhost:8761/eureka
- spring.application.name은 Eureka에 등록될 서비스 이름
- Eureka는 기본적으로 30초마다 헬스체크와 인스턴스 갱신을 수행
5. 다른 서비스에서 호출 (Feign 연동 예시)
Eureka와 함께 사용할 경우 @FeignClient(name = "user-service")와 같이
서비스 이름만으로도 HTTP 클라이언트를 자동 구성할 수 있습니다.@FeignClient(name = "user-service") public interface UserClient { @GetMapping("/api/users/{id}") UserResponse getUser(@PathVariable Long id); }
6. 운영 환경 구성 팁
항목 전략
고가용성 Eureka Server 2대 이상 구성 (peer to peer replication) TTL 설정 lease-renewal-interval-in-seconds, duration-in-seconds 설정 조정 상태 확인 각 서비스는 actuator/health 기반으로 헬스체크 메타데이터 eureka.instance.metadata-map을 활용해 zone, region, role 등 부가 정보 추가 가능 서비스 격리 Zone 기반 라우팅 또는 custom LoadBalancer 설정
마무리 요약
항목 요약
도입 목적 서비스 위치 자동 탐색, 동적 라우팅, 구성 복잡도 최소화 기본 구성 Eureka Server + Eureka Client 클라이언트 통합 FeignClient, Gateway 등과 자동 연동 운영 전략 헬스체크, TTL 관리, 다중 서버 구성으로 신뢰성 확보 대체 옵션 Consul, Nacos, Kubernetes Service Discovery 등도 있음
다음 편 예고
Spring Boot 시리즈 35편: Spring Cloud Config – 설정 중앙화 전략과 운영환경 속 안전한 구성관리
728x90'기술과 산업 > 언어 및 프레임워크' 카테고리의 다른 글
JHipster 시리즈 7화 - 마이크로서비스 구조 전환 – Gateway와 Service Registry 실습 (0) 2025.05.21 Spring Framework 시리즈 4화 – Bean의 생명주기 이해와 커스터마이징 (1) 2025.05.21 Spring Framework 시리즈 3화 – @Configuration vs XML – 빈 설정 방식 비교 (1) 2025.05.20 Spring Framework 시리즈 2화 – @Component와 @Autowired로 의존성 주입 구현하기 (1) 2025.05.20 Spring Boot 시리즈 33편 – Spring Cloud Gateway: API 게이트웨이 설계와 트래픽 라우팅 전략 (0) 2025.05.20