-
서비스 등록 및 디스커버리 (feat. spring.io)개발 일지/Cloud 2022. 5. 20. 09:47반응형
안녕하세요. 윤종현입니다.
지난 주(2022.05.19.)부터 스프링 MSA & 클라우드를 정주행하기 시작했습니다.
많이 늦었죠. 이 페이지들은 3~4년전 부터 꾸준히 봤지만 실무에 적용할 기회가 없어 방치하고 있었네요.
그런데 금년도에 이직 후 회사에서 관련 프로젝트를 진행 중이기에 제대로 정리해보려고 합니다.
스프링 클라우드 페이지에서 스크롤를 내려보면 처음 나오는 섹션이 바로 "Service discovery" 입니다.
클라우드에서 애플리케이션은 다른 서비스의 위치를 정확히 알기 어렵기 때문이죠.
그래서 Netflix Eureka와 같은 서비스 레지스트리가 필요합니다.
스프링 클라우드는 Eureka, Consul, Zookeeper 등 레지스트리에 대한 DiscoveryClient 를 제공합니다.
또한 Spring Cloud Load Balancer는 서비스 인스턴스 간에 로드를 안정적으로 분산시켜 줍니다.
Getting Started: Service Registration and Discovery
자 이제부터 spring.io에 있는 가이드를 시작해 보겠습니다.
Service Registration and Discovery Tutorial
이 튜토리얼은 Netflix Eureka 서비스 레지스트리를 사용합니다.
What You Will Build
"넷플릭스 유레카" 서비스 레지스트리를 설정하고, 여기에 자체 등록 및 호스트를 확인하는 클라이언트를 빌드합니다.
서비스 레지스트리는 클라이언트측 로드 밸런싱을 지원하고 DNS 없이도 컨슈머로부터 서비스 제공자를 분리시킵니다.
시작하기
이제부터 2개 애플리케이션을 준비하겠습니다.
첫번째 애플리케이션(Service app.)는 Eureka 서버만 있으면 됩니다.
그리고 두번째는 클라이언트 애플리케이션으로 Eurek 서버 및 Eureka Discovery 클라이언트가 필요합니다.
2개 애플리케이션의 의존성은 아래 이미지를 참고하세요.
※ 빌드 툴은 선호하는 것은 선택합니다. (Maven, or Gradle)
1. Service application
2. Client application
Eureka 서비스 레지스트리
일단 서비스 애플리케이션 프로젝트를 개발툴에서 열고 프로젝트 구조를 확인해 봅니다.
가장 먼저 Eureka 서비스 레지스트리가 필요합니다.
스프링 클라우드의 @EnableEurekaServer를 사용해서 다른 애플리케이션이 통신할 수 있는 레지스트리를 설정합니다.
레지스트리를 시작하면, 연결할 수 있는 레플리카 노드가 없다는 메시지를 확인할수 있습니다.
There was a problem with the instance info replicator
운영 환경에서는 둘 이상의 레지스트리 인스턴스가 필요합니다.
하지만 튜토리얼에서는 간단히 테스트할 것이기 때문에 관련 로깅 설정을 비활성화 하겠습니다.
클라이언트 애플리케이션
서비스 레지스트리를 구동했으니 이제 아래 작업을 진행 합니다.
레지스트리에 셀프로 등록하고, Spring Cloud DiscoveryClient 추상화를 사용하여 자체 호스트 및 포트에 대한 레지스트리를 찾는 클라이언트를 구성합니다.
@EnableDiscoveryClient 는 Netflix Eureka DiscoveryClient 구현체를 활성화합니다.
어떤 구현체을 선택하든 spring.application.name 속성에 지정한 이름으로 eureka-client가 등록된 것을 볼 수 있습니다.
이 속성은 Spring Cloud의 서비스 구성 초기 단계에서 많이 사용됩니다.
이 속성은 서비스 부트스트랩에서 사용되기 때문에 관례적으로 /src/main/resources/bootstrap.properties에 작성하고 src/main/resources/application.properties보다 먼저 로드됩니다.
eureka-client는 http://localhost:8080/service-instances/a-bootiful-client에 등록된 모든 ServiceInstance 를 리턴하는 Spring MVC REST 엔드포인트를 정의합니다.
테스트 하기
eureka-service를 먼저 구동하고 eureka-client를 시작해 줍니다.
eureka-client는 레지스트리에 자신을 등록하고 레지스트리에서 자체 등록된 인스턴스 목록을 새로고침하는데 약 1분이 걸립니다.
아래는 Eureka Server 페이지입니다.
반응형'개발 일지 > Cloud' 카테고리의 다른 글
Centralized Configuation (feat. spring.io) (0) 2022.06.28 Spring Cloud Gateway (feat. spring.io) (0) 2022.06.27 Spring Cloud 페이지 한글 정리 (0) 2022.05.19 Bitvise SSH 클라이언트 및 Proxy Forwarding (0) 2022.04.08 AWS EC2 인스턴스 생성하기 (0) 2022.04.08