
Netflix OSS의 서비스 디스커버리(Server Discovery) 기능을 제공하는 microservice registry

내가 아는 그 OTT Netflix?
ㅇㅇ 맞음 그 넷플릭스랍니다
<역할>
→ 즉, Eureka를 사용하면 마이크로서비스 간의 통신에서 정적인 IP 주소가 필요 없으며, 자동으로 서비스 위치를 찾아서 요청할 수 있음
eureka-server 모듈)**@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
@EnableEurekaServer → Eureka 서버로 동작하도록 설정.server:
port: 19090
eureka:
client:
register-with-eureka: false # Eureka 서버 자체는 다른 Eureka 서버에 등록되지 않음
fetch-registry: false # 다른 서비스 목록을 가져오지 않음 (스스로 관리)
instance:
hostname: localhost
register-with-eureka: false).fetch-registry: false).→ 즉, 이 모듈은 "Service Registry" 역할을 하며, 다른 서비스들이 이 Eureka 서버에 등록하여 서로의 위치를 찾을 수 있음
eureka:
client:
service-url:
defaultZone: http://localhost:19090/eureka/
register-with-eureka: true
fetch-registry: true
server:
port: 8000
spring:
application:
name: api-gateway
cloud:
gateway:
routes:
- id: user-service
uri: lb://USER-SERVICE # Eureka에서 서비스 검색 후 요청 전달
predicates:
- Path=/api/v1/users/**
filters:
- name: CircuitBreaker
args:
name: userServiceBreaker
fallbackUri: forward:/fallback/users
- name: JwtAuthenticationFilter
라우팅(routes) 설정
id: user-service → USER-SERVICE로 요청을 보냄.uri: lb://USER-SERVICE → Eureka에서 USER-SERVICE의 위치를 찾아서 요청 전달.predicates: Path=/api/v1/users/** → /api/v1/users/** 경로의 요청만 처리.→ 즉, 클라이언트가 /api/v1/users/ 경로로 요청하면, Gateway는 이를 lb://user-service → Eureka에서 user-service의 위치를 자동 검색 후 요청 전달.
@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
public class GatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GatewayApplication.class, args);
}
}
@EnableDiscoveryClient를 사용하면 해당 서비스가 자동으로 Eureka에 등록됨.
→ Spring Cloud에서 service discovery를 활성화하는 역할.
💡 @EnableDiscoveryClient 없어도 근데 등록됨 ㅋ
Spring Boot 2.3 이상에서는 Spring Cloud Netflix Eureka 클라이언트(spring-cloud-starter-netflix-eureka-client)가 의존성으로 추가되어 있으면
@EnableDiscoveryClient를 명시적으로 사용하지 않아도 자동으로 Eureka에 등록된다 !!
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
}
eureka:
client:
service-url:
defaultZone: http://localhost:19090/eureka/
register-with-eureka: true # 서비스 등록 활성화
fetch-registry: true # 다른 서비스 목록 가져오기
register-with-eureka: true 설정이 있으면 자동으로 Eureka에 등록됨.💡 서비스 등록 여부 확인
Eureka 대시보드 접속 (http://localhost:19090/)
→ user-service, auth-service, gateway 등의 서비스가 정상적으로 등록되었는지 확인