Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

6-3 서비스 탐색 #500

Closed
Tracked by #485
jongfeel opened this issue Jul 15, 2023 · 0 comments
Closed
Tracked by #485

6-3 서비스 탐색 #500

jongfeel opened this issue Jul 15, 2023 · 0 comments
Assignees
Labels
2023 Hands-on microservices with kotlin 코틀린 마이크로서비스 개발

Comments

@jongfeel
Copy link
Owner

jongfeel commented Jul 15, 2023

6-3 서비스 탐색

서비스 탐색 서버를 사용하면 마이크로서비스 인스턴스를 동적으로 등록할 수 있다.
주 역할은 다음과 같다.

  • 애플리케이션이나 다른 마이크로서비스가 요청을 수행할 때, 동적 인스턴스의 목록을 사용
  • 인스턴스가 시작하거나 중지할 때 동적으로 관리해서 마이크로서비스의 규모에 대한 정확한 정보를 제공
  • 하트비트 매커니즘을 사용해, 사용할 수 없는 인스턴스 연결을 해제하는 매커니즘 제공

스프링 클라우드는 서비스 탐색에 벤더 독립적 접근 방식을 제공한다. 아래와 같은 다양한 구현을 사용할 수 있다.

  • Hashicorp Consul
  • Netflix Eureka
  • Apache Zookeeper

여기서는 유레카를 사용한 예제를 살펴본다.

서비스 탐색 서버 만들기

https://start.spring.io/ 에서 스프링 이니셜라이저를 사용해 서비스 탐색 서버 프로젝트를 생성한다.

image

application.properties를 yml로 바꾸고 아래와 같이 편집한다.

server:
  port: 8761
spring:
  application:
    name: "discovery-serer"

Application 파일에 @EnableEurekaServer 어노테이션 추가

package com.microservice.chapter06discoveryserver

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer

@SpringBootApplication
@EnableEurekaServer
class Chapter06DiscoveryserverApplication

fun main(args: Array<String>) {
	runApplication<Chapter06DiscoveryserverApplication>(*args)
}

gradlew bootrun을 실행하면 아래와 같은 로그 확인 가능

image

http://localhost:8761/ 접속 후 확인할 수 있는 화면

image

탐색 서버에 연결하기

책은 maven의 pom.xml로 설명하고 있지만, 여기서는 build.gradle.kts 파일을 열고 dependencies에 아래의 의존성을 추가한다.
(사실 id 값은 maven과 똑같다)

implementation("org.springframework.cloud:spring-cloud-starter-netflix-eureka-client")

이전에 만들어 뒀던 config server, 그리고 discovery-server가 모두 실행되고 있어야 microservice가 실행된다.
그러면 전과 다르게 eureka client가 추가 실행되는 로그를 확인할 수 있다.

image

유레카 대시보드를 refresh해서 확인해 보면 greetings 서비스가 등록된 걸 볼 수 있다.

image
탐색 서버가 http://localhost:8761에서 실행 중이므로 특별한 설정이 필요가 없다. 기본 8761 포트로 연결하기 때문이다.
설정을 eureka.client.serviceUrl.defaultZone을 유레카 서버의 URL로 변경 가능하다.

스프링 부트 액추에이터 사용하기

유레카는 인스턴스 실행 여부를 확인하는 메커니즘을 제공한다. 마이크로서비스가 유레카에게 요청을 보내 요청을 받을 준비가 됐다고 알려주는데 이걸 하트비트라고 한다.
유레카가 하트비트를 받지 못하면 인스턴스의 연결이 끊어지고 다시 보내면 유레카가 다시 연결된다.
하트비트의 구현은 정기적인 요청을 전송해서 해당 서비스가 여전히 활성 상태임을 알려주는 것이다.

스프링 부트 액추에이터Spring Boot actuator는 서비스가 가동 중인지를 알 수 있는 더 나은 매커니즘을 제공한다.
스프링 컨텍스트를 탐색하고 정상인지 알려주는 표시기indicator를 제공한다.
이 정보를 상태점검 URL 혹은 JMX와 같은 다양한 방식으로 전파하며 하트비트를 사용해 유레카로 전파할 수도 있다.

마이크로서비스에 스프링 부트 액추에이터를 프로젝트에 추가한다.

implementation("org.springframework.boot:spring-boot-starter-actuator")

그리고 applicaion.yml 파일에 다음 내용을 추가한다. healthcheck 정보를 보내도록 유레카 클라이언트를 설정한 것이다.

eureka:
  client:
    healthcheck:
      enabled: true

http://localhost:8080/actuator/health 에서 상태 정보를 볼 수 있다.
마이크로서비스의 상태 정보를 제공하기도 하지만 하트비트를 유레카에게 알리기 위해서도 사용된다.

image
URL /actuator/health는 매우 흥미로운 기능이지만 주의해야 한다.
다른 매커니즘을 사용해 이를 보호하거나 민감한 정보가 노출되지 않도록 기본 경로를 변경해야 한다.
스프링 부트 액추에이터 설명서를 참고하면 된다.
https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.monitoring
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
2023 Hands-on microservices with kotlin 코틀린 마이크로서비스 개발
Projects
No open projects
Development

No branches or pull requests

1 participant