Eureka Server란 무엇이고, 왜 사용하는가?
MSA는 여러 마이크로서비스 간의 통신으로 동작하며, 서비스를 호출하기 위해서는 IP와 Port를 알아야한다.
하지만, IP가 동적으로 바뀌거나 서버의 부하 발생 시 스케일 아웃으로 서비스 인스턴스를 확장할 때는 각 서비스가 새로운 서버의 IP, Port 정보를 모른다는 문제가 있다.
이러한 문제를 해결하가 위해 필요한 개념이 바로 Service Discovery와 Service Registry이다.
Service Discovery란 마이크로서비스의 IP, Port 정보를 찾아주는 것을 의미하고, Registry란 서비스의 연결 정보를 등록하는 것이다.
이러한 역할을 하는 것이 바로 Eureka Server로 각 마이크로서비스에서 Eureka Client 의존성 및 설정을 마치면, 마이크로서비스가 실행될 때 Eureka Server로 본인의 연결 정보를 알려주고 Eureka Server는 Client 정보를 등록하고, 등록된 정보를 토대로 원하는 서비스를 찾을 수 있게 된다.
Document - Spring Cloud Netflix
Eureka Server 설정
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
@SpringBootApplication
@EnableEurekaServer //EurekaServer 활성화
public class DiscoveryServiceApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryServiceApplication.class, args);
}
}
server:
port: 8761
spring:
application:
name: discovery-Server
eureka:
client:
register-with-eureka: false #유레카 레지스트리에 자기 자신을 등록하지 않겠다.
fetch-registry: false #레지스트리의 정보를 가저오지 않겠다.
Eureka Server 의존성에는 내부적으로 Eureka Client 라이브러리가 포함되어 있다.
따라서 스스로를 Client로 등록하지 않기 위해서 Eureka Client 설정을 따로 해주는 것이다.
Eureka Server에 Client 라이브러리가 포함되는 이유는 Eureka Server도 장애가 발생할 수 있고 HA(High Availability)를 위해 클러스터링해야 한다. 따라서 Eureka Server가 또 다른 Eureka Server에 등록될 수 있도록 Server이자 Client의 역할을 해야하기 때문이다.
서버 실행 후 브라우저에서 아래와 같이 등록된 마이크로서비스를 확인할 수 있다.
Eureka Client 설정
spring:
application:
name: my-first-service # 유레카 서버에 등록될 서비스 이름
eureka:
instance:
instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}}
client:
service-url:
defaultZone: http://${IP}:${PORT}/eureka #유레카 서버 주소
register-with-eureka: true
fetch-registry: true
인스턴스 아이디는 같은 이름의 서버가 여러 대 등록될 경우 구분하기 위해 랜덤 값을 넣었고, 본인이 원하는대로 수정하면 된다.
'Architeture' 카테고리의 다른 글
Gateway 왜 사용하고, 어떻게 활용하는가? (0) | 2025.09.12 |
---|
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!