-
[Spring Cloud] Netflix Eureka 찍어먹기Spring Framework 2025. 1. 3. 23:36
1. Eureka 소개
Netflix Eureka는 Netflix OSS(Open Source Software)에서 제공하는 서비스 디스커버리 기술이다. 서비스 디스커버리란 마이크로서비스 아키텍처에서 각 서비스가 동적으로 서로를 찾고 통신할 수 있도록 돕는 메커니즘이다. 마이크로서비스에서는 서비스가 독립적으로 분리되기 때문에 서비스 간의 위치를 동적으로 파악하는 것이 필요하다. Eureka를 사용하여 마이크로서비스를 편리하게 관리할 수 있으며 Eureka 서버를 클러스터로 구성하여 장애에 대비할 수도 있다. 하지만 Eureka는 HTTP 기반 통신을 사용하기 때문에 대규모 시스템에서 네트워크 부하가 발생할 수 있다.
2. 주요 기능
- 서비스 동적 등록: 각 마이크로서비스가 IP 주소나 포트를 미리 알 필요 없이, Eureka 서버에 동적으로 등록된다.
- 서비스 발견: 클라이언트 서비스가 Eureka 서버에서 필요한 서비스의 위치를 조회할 수 있다.
- 헬스 체크(Health Check): 서비스 인스턴스가 정상적으로 작동하는지 확인하고, 비정상적인 인스턴스를 레지스트리에서 제거한다.
3. 구성 요소
(1) Eureka Server
- 서비스 레지스트리 역할을 한다.
- 일반적으로 HA(고가용성)를 위해 다중 서버 환경으로 구성한다.
(2) Eureka Client
- 서비스 인스턴스가 Eureka 서버에 자신의 정보를 등록하고, 다른 서비스의 정보를 검색한다.
- Spring Cloud Netflix에서 간단한 설정을 통해 사용할 수 있다.
4. Eureka 찍어 먹기
(1) Eureka Server
build.gradle
implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
EurekaServerApplication@EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
application.ymlspring: application: name: eureka-server # 애플리케이션 이름 (Eureka 서버로 설정) server: port: 8761 # Eureka 서버가 실행될 포트 번호 servlet: context-path: /eureka # Eureka 서버의 컨텍스트 경로 ssl: enabled: false # HTTPS 사용 여부 (true로 설정 시 아래 SSL 옵션 필요) # key-store: 키스토어 파일 경로 # key-store-password: 키스토어 비밀번호 eureka: server: wait-time-in-ms-when-sync-empty: 0 # 레지스트리를 동기화하지 못했을 때 대기 시간 (밀리초) enable-self-preservation: true # 자기 보존 모드 활성화 eviction-interval-timer-in-ms: 60000 # 만료된 인스턴스를 제거하는 주기 (밀리초) client: register-with-eureka: false # 이 서버를 다른 Eureka 서버에 등록하지 않음 fetch-registry: false # 다른 Eureka 서버로부터 레지스트리를 가져오지 않음 eureka: instance: hostname: eureka-server # Eureka 서버의 호스트 이름 prefer-ip-address: true # 서비스 등록 시 IP 주소 사용 여부 instance-id: eureka-server-1 # Eureka 서버의 고유 ID management: endpoints: web: exposure: include: "*" # 모든 관리 엔드포인트 활성화 endpoint: health: show-details: always # 헬스 체크에서 세부 정보 표시 logging: level: com.netflix.eureka: DEBUG # Eureka 관련 디버그 로깅 활성화 org.springframework: INFO # Spring 관련 기본 로깅 레벨
(2) Eureka Client
build.gradleimplementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
application.ymlspring: application: name: my-eureka-client # Eureka 서버에 등록될 이름 server: port: 8080 eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ # Eureka 서버의 URL. 클러스터 환경에서는 여러 서버 URL을 콤마로 구분하여 추가 register-with-eureka: true # 클라이언트가 Eureka 서버에 자신을 등록할지 여부 (기본값 true) fetch-registry: true # Eureka 서버에서 레지스트리를 가져올지 여부 (기본값 true) healthcheck: enabled: true # 클라이언트가 헬스 체크 상태를 Eureka 서버에 보고할지 여부 instance: instance-id: eureka-client-1 # Eureka 서버에 등록되는 클라이언트의 고유 ID prefer-ip-address: true # Eureka 서버에 등록 시 IP 주소를 우선 사용 (true: IP, false: 호스트 이름) lease-renewal-interval-in-seconds: 30 # 클라이언트가 Eureka 서버에 상태를 갱신하는 주기 (초) lease-expiration-duration-in-seconds: 90 # Eureka 서버가 상태 갱신 신호를 기다리는 시간 (초) metadata-map: # 추가적인 메타데이터 정보 설정 zone: primary # 데이터 센터 또는 서비스 영역(zone)을 설정 version: 1.0 # 애플리케이션 버전 정보 environment: production # 환경 정보 (예: 개발, 테스트, 운영 환경) management: endpoints: web: exposure: include: "*" # 모든 관리 엔드포인트 활성화 endpoint: health: show-details: always # 헬스 체크에서 세부 정보 표시 logging: level: com.netflix.eureka: DEBUG org.springframework: INFO
'Spring Framework' 카테고리의 다른 글
[동시성 문제] 게시글 조회수 증가 (0) 2024.08.18 Spring AI 맛보기 (0) 2024.08.13 [Spring Data JPA] open-in-view 설정에 대해서 (0) 2024.07.12 [Spring Data JPA] 벌크 연산 후 영속성 컨텍스트를 초기화 해야 하는 이유 (0) 2024.07.09 [Spring MVC] 파일 업로드 예제 (1) 2024.05.24