회사 코드를 살펴보던 중 SpringBootApplication 위에 @Eureka
라는 어노테이션을 발견하게 되었다.
처음 보는 어노테이션이자 용어였기에, 공부를 진행해보고자 한다.
Eureka가 무엇인지 알기 이전에 먼저 LB(Load Balancing)에 대해서 알아야 한다.
LB(Load Balancer)란 여러대의 서버에 트래픽을 골고루 분산하기 위해 사용하는 기술이다.
LB가 어떻게 트래픽이 들어왔을 때 특정 Server에 트래픽을 배정할 수 있을까?
→ LB는 MSA의 각 모듈에 대한 연결 정보(ip, port, hostname)을 알고있다. 그렇기에 우리는 각 모듈의 연결 정보를 LB에 등록해야한다.
→ 그런데 각 모듈이 업데이트됨에 따라 연결 정보 또한 업데이트 된다.
→ 만약 모듈이 100개가 넘어간다고 해보자. 그러면 각 모듈 업데이트시마다 LB의 연결 정보를 매번 업데이트 시켜주어야 할 것이다.
이를 해결하기 위해 Eureka가 등장했다.
Eureka란 넷플릭스에서 제공한 MSA를 위한 클라우드 오픈 소스이다.
Eureka는 Eureka Server와 Eureka Client로 구성된다.
→ Eureka Client는 각 서비스 모듈이라고 생각하자.
Eureka의 실제 흐름은 아래와 같다.
Eureka Client 서비스가 시작될 경우에 Eureka Server에 자신의 정보를 등록한다.
Eureka Client는 Eureka Server로부터 다른 Client의 연결 정보가 등록되어 있는 Registry를 받고 자신의 Local에 저장하게 된다.
→ Registry는 서비스의 연결 정보를 등록하는 것이다.
30초마다 Eureka Server로부터 변경 사항을 갱신 받는다.
30초마다 Eureka Server로부터 변경 사항을 갱신 받는다.
30초마다 ping을 통하여 자신이 동작하고 있다는 신호를 보낸다. 만약 신호를 보내지 못하면 Eureka Server가 보내지 못한 Client를 Registry에서 제외시킨다.
Spring에서는 @EnableEurekaServer
Annotation을 달면 바로 Eureka Server로 사용할 수 있게 된다.
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}