앞서 Spring Cloud에 관해서 알아보았는데 오늘은 좀 더 구체적으로 하나하나씩 알아보려 합니다.
이번 블로그에서는 Service Discovery 패턴에 대해 알아보고 해당 패턴을 구현해보겠습니다. 자세한 내용은 GIT-eureka-discovery 브랜치에서 알아보실 수 있습니다.
마이크로서비스 아키텍처(분산 시스템)에서 각 서비스가 동적으로 서로를 찾고 통신할 수 있도록 돕는 메커니즘입니다
장점 : 클라이언트가 간단해지며, 로드 밸런서가 다양한 로드 밸런싱 전략을 사용하여 효율적으로 트래픽을 분산시킬 수 있습니다.
단점 : 로드 밸런서가 단일 장애점이 될 수 있으며, 관리가 복잡해질 수 있습니다.
예시 기술 : AWS Elastic Load Balancer (ELB), NGINX, HAProxy
장점 : 클라이언트가 서비스 선택에 대한 완전한 제어권을 가지며, 특정 로드 밸런싱 알고리즘을 쉽게 구현할 수 있습니다.
단점 : 클라이언트에 추가적인 복잡성이 생기고, 서비스 레지스트리에 대한 의존성이 커집니다.
예시 기술 : Netflix Eureka, Consul, Zookeeper
서버,클라이언트 사이드 디스커버리에 관해서 간단하게 알아봤습니다.
제가 사용해볼 기술은 인프라 작업이 아닌 코드 단 작업으로 할 수 있는 Client-side Discovery를 적용할 것입니다.
사용할 라이브러리는 Netflix가 개발안 Eureka를 사용해보겠습니다.
eureka server 하나에 인스턴스 2개를 연결
서버들의 정보를 관리하는 Eureka Server를 구현해보겠습니다.
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
위와 같이 eureka-server 의존성을 추가해줍니다.
@SpringBootApplication
@EnableEurekaServer
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
}
@EnableEurekaServer 어노테이션을 사용하여 Eureka Server 관련 구성이 활성화 되도록 해줍니다.
spring.application.name=server
server.port=19090
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.instance.hostname=localhost
eureka.client.service-rl.defaultZone=http://localhost:19090/eureka/
위 설정을 마치고 실행을 한 후 localhost:{설정한 주소}로 접속을 하면 위와 같은 대시보드가 렌더링 되는데 성공한다면 server 설정은 끝입니다.
다른 서비스들의 정보를 얻기 위한 Eureka Clients를 구현해보도록 하겠습니다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
위와 같이 eureka-client 의존성을 추가해줍니다.
@SpringBootApplication
@EnableDiscoveryClient
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
@EnableDiscoveryClient 어노테이션을 사용하여 Eureka client 관련 구성이 활성화 되도록 해줍니다.
spring.application.name=order
server.port=19091
eureka.client.service-url.defaultZone=http://localhost:19090/eureka/
멀티 모듈 환경에서 server -> client 순으로 실행을 시켜줍니다.
실행후 localhost:{server 설정 포트}로 접속해본다면 client들의 정보들을 확인할 수 있습니다.
Eureka 구현을 마무리 해보도록 하겠습니다.