서비스 디스커버리는 분산 시스템에서 서비스 인스턴스의 위치를 동적으로 찾기 위한 메커니즘입니다. 서비스 디스커버리 없이, 각 서비스는 다른 서비스의 위치를 알고 있어야 합니다. 이는 서비스 인스턴스의 수가 증가하거나 변경될 때마다 큰 관리 비용을 발생시킵니다.
서비스 디스커버리는 서비스 레지스트리를 유지하여 각 서비스 인스턴스의 위치를 관리합니다. 서비스 레지스트리는 각 서비스 인스턴스의 네트워크 위치(IP 주소 및 포트 번호)를 저장하고, 이를 기반으로 다른 서비스가 해당 인스턴스에 요청을 보낼 수 있게 합니다.
Spring Cloud Netflix Eureka는 넷플릭스 오픈소스 프로젝트 중 하나로, 서비스 디스커버리를 위한 솔루션을 제공합니다. Eureka는 서비스 레지스트리 역할을 하며, 서비스 인스턴스는 Eureka 서버에 등록되고, 클라이언트는 이 서버를 통해 다른 서비스의 위치를 찾습니다.
프로젝트 설정
build.gradle 파일에 Eureka 서버 의존성을 추가합니다:
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
implementation 'org.springframework.boot:spring-boot-starter-web'
}
Eureka 서버 애플리케이션 클래스
Eureka 서버를 활성화하기 위해 메인 애플리케이션 클래스에 @EnableEurekaServer 어노테이션을 추가합니다:
package com.example.eurekaserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
설정 파일
application.yml 파일을 생성하고 Eureka 서버 설정을 추가합니다:
server:
port: 8761
eureka:
client:
register-with-eureka: false
fetch-registry: false
spring:
application:
name: eureka-server
프로젝트 설정
build.gradle 파일에 Eureka 클라이언트 의존성을 추가합니다:
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
implementation 'org.springframework.boot:spring-boot-starter-web'
}
Eureka 클라이언트 애플리케이션 클래스
Eureka 클라이언트를 활성화하기 위해 메인 애플리케이션 클래스에 @EnableEurekaClient 어노테이션을 추가합니다:
package com.example.eurekaclient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
설정 파일
application.yml 파일을 생성하고 Eureka 클라이언트 설정을 추가합니다:
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: eureka-client
@EnableEurekaServer 어노테이션과 설정 파일을 통해 Eureka 서버를 설정.@EnableEurekaClient 어노테이션과 설정 파일을 통해 Eureka 클라이언트를 설정.