먼저 본 가이드는 지금까지 했던 다른 가이드들과 달리 꽤나... 매우? 불친절한 것 같다. 다른 자료를 많이 찾아봐야했고, 나의 짧은 영어 때문인지 정확히 뭘 보여주고 싶고, 이것을 어떻게 활용해야 할지 배경지식 없이는 이해하기가 쉽지 않아보였다. 따라서 우선 본 가이드를 수행하고, 동작하게 까지 만들어 두고, 추후에 다시 들여다보기로 한다.
https://spring.io/guides/gs/service-registration-and-discovery/
아직 완전히 이해하지를 못해서 요약을 하지 못하겠다.
이 가이드 또한 두 개의 프로젝트로 구성되어 있으며 디렉토리 구조는 다음과 같다.(폴더 및 프로젝트 이름은 가이드와 다를 수 있다.)
- gs-service-registration-and-discovery
- eureka-client
- eureka-service
개인적으로 이 가이드 또한 그냥 코드를 받아서 진행해보는 것을 추천한다.
사실 코드는 매~~우 간단하다. 정말 말 그대로 가이드에 나와있는 그대로 작성하면 된다. 코드를 다 작성하고는 그냥 그대로 두 application.kt를 실행 해 주면 된다. 가이드에서는 service를 먼저 키고 client를 키라고 하지만 뭐 크게 상관은 없다. 뭘 먼저 키든 조금 기다리면 원하는 결과를 얻을 수 있다.
위 과정에서 여러 에러가 뜰 수 있는데 삽질을 해본 사람으로서 짤막한 팁을 남겨두겠다.
1. ~~~ Netflix의 registration에서 getApplication이 null 이라며 client를 킬 때 에러가 뜰 수 있다. 이 경우 client의 gradle.kts에 kotlin implementation("com.sun.jersey.contribs:jersey-apache-client4:1.19.4")
을 추가해주자. 정확히 어떤 흐름인지는 모르겠으나, 구글링을 통해 이것이 해법임을 경험적으로 알아냈다.
2. 가이드에서 테스트를 할 때 보면 localhost:8080/service-instances/a-bootiful-client에서 확인해보라고 하는데, 여기서 "a-bootiful-client"의 경우 client의 resources/application.properties에서 설정된 값이다. 즉 아래와 같이 작성해줘야 한다.
## application.properties
spring.application.name=원하는 이름
// 이렇게 설정하고서 localhost:8080/service-instances/원하는이름 에서 결과를 확인해보자.
따로 좀 알아본 결과 Eureka는 여러 service instances를 registry로 관리하여 서버와 클라이언트를 이어주는 중간자 역할을 하는 것 같다. 다만 그 확실한 생태계를 아직까지는 모르겠다. 이 내용은 얼마 전 진행한 load balancer 가이드와 연장선에 있는데, 이 eureka에서 여러 service instance들을 관리하며 health check도 진행하는 식인 것 같다.
앞서 그러한 느낌을 주었듯, 아직 마치지 않으려 한다. 이를 닫고 넘어가기에는 매우 중요해 보이는데, 지금 완전히 이해하기에는 지식이 조금 부족한 것 같은 느낌이 든다. 빠른 시일내에 이 service registration과 관련하여 공부 후에 돌아오겠다.