서비스 디스커버리는 마이크로서비스 아키텍처에서 필수적인 구성 요소 중 하나입니다.
서비스 디스커버리는 동적으로 변화하는 네트워크 환경에서 서비스의 위치를 자동으로 식별하고 클라이언트에게 제공하는 역할을 합니다.
Netflix에서 개발한 Eureka는 Spring Cloud에서 널리 사용되는 서비스 디스커버리 도구입니다.
Eureka의 주요 개념
- Eureka Server
- 서비스의 등록 정보를 관리하고 서비스 인스턴스의 상태를 추적하는 서버입니다.
- 등록된 서비스의 정보를 주기적으로 갱신하고, 클라이언트에게 서비스 위치 정보를 제공합니다.
- Eureka Client
- 마이크로서비스 인스턴스로, Eureka Server에 자신의 위치와 상태 정보를 등록합니다.
- 주기적으로 Eureka Server에 HeartBeat 신호를 보내 자신이 정상 작동 중임을 알립니다.
- 다른 서비스를 호출할 때 Eureka Server로부터 해당 서비스의 위치 정보를 받아옵니다.
- Service Registry
- Eureka Server에 등록된 서비스 인스턴스의 메타데이터 저장소입니다.
- 서비스 ID, IP 주소, 포트 번호 등의 정보를 포함합니다.
Eureka 동작 과정
- 서비스 등록
- 마이크로서비스 인스턴스가 시작될 때, Eureka Server에 자신의 정보를 등록합니다.
- 등록 정보에는 서비스 ID, IP 주소, 포트 번호 등이 포함됩니다.
- 서비스 검색
- 클라이언트(다른 마이크로서비스 인스턴스)는 필요한 서비스의 위치 정보를 얻기 위해 Eureka Server에 요청을 보냅니다.
- Eureka Server는 해당 서비스의 가용한 인스턴스 목록을 반환합니다.
- HeartBeat
- 마이크로서비스 인스턴스는 주기적으로 Eureka Server에 HeartBeat 신호를 보냅니다.
- HeartBeat 신호를 통해 서비스 인스턴스의 가용성을 확인할 수 있습니다.
- 서비스 제거
- 마이크로서비스 인스턴스가 종료되거나 네트워크에서 분리되면, Eureka Server에서 해당 인스턴스의 정보를 제거합니다.
Eureka 구성 예시 (Spring Boot)
1. Eureka Server 구성
1
2
3
4
5
6
7
|
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
|
cs |
2. Eureka Client 구성
1
2
3
4
5
6
7
|
@EnableEurekaClient
@SpringBootApplication
public class ServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceApplication.class, args);
}
}
|
cs |
3. application.yml 설정
1
2
3
4
5
6
|
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
preferIpAddress: true
|
cs |
Eureka는 마이크로서비스 아키텍처에서 서비스 간의 느슨한 결합을 가능하게 하고, 동적인 서비스 검색과 로드 밸런싱을 제공합니다. 하지만 Eureka는 단일 실패 지점(Single Point of Failure)이 될 수 있으므로, 고가용성을 위해 Eureka Server의 클러스터링 구성이 필요할 수 있습니다.