22.06.29 적용
머먹지 배달 서비스 프로젝트에 MSA를 적용하기 위한 단계로 spring cloud gateway를 적용하였고, 이제는 Service Discovery 역할을 하는 Eureka를 적용해보기로 하였다. 현재 구조는 머먹지 서비스(customer, store, rider, order), auth 서비스, user 서비스, apigateway 서비스로 저장소가 각각 분리된 상태로 구성되었다.
유레카 서버를 적용하는 것이 처음이다보니 처음 생각은 apigateway를 Eureka Server로 만들고, 나머지 서비스들을 각각 Eureka Client로 두면 되겠다는 생각으로 apigateway에 EurekaServer를 적용했다. 하지만 아래 나온 에러가 나타났다.
Action에 나온대로 application.yml에 spring.main.web-application-type= reactive를 적용하여 위의 에러는 해결되었지만 Eureka 서버가 돌려지지 않는다는 문제가 발생하였다.
1) Eureka Server 구축된 것 자체가 문제였을까?
apigateway 프로젝트에 적용하는 것이 아닌 따로 Eureka Server만을 위해 프로젝트를 만들고 돌려보니 Eureka server가 제대로 작동하였다.
따라서 여기가 문제가 아니다.
2) 원래의 ApiGateWay 프로젝트가 문제였을까?
Eureka Server 내용을 지우고 원래 상태로 돌리니 처음 나왔던 에러도 나오지 않았다. 즉, 둘다 문제가 아니다.
구글링 해본 결과, apigateway를 쓰기 위해서는 starter-web 디펜던시를 빼줘야 하는데, Eureka Server는 starter-web에 의존하기 때문에 apigateway와 Eureka Server는 함께 있을 수 없다는 것을 확인할 수 있었다.
https://stackoverflow.com/questions/62908844/spring-cloud-gateway-not-compatible-with-eureka-server
즉, 머먹지 프로젝트의 구조도를 그려보면,
멘토님께 문의해본 결과, gateway와 EurekaServer의 깃허브 저장소는 함께 있되, 각각 프로젝트로 각각 있는 형태로 구성해야 했다.
Eureka Server를 구축하기 위해 수행한 일을 나열해보자면,
1) 폴더 재구성화
→ 알아보니 .git만 밖에두고 각각 프로젝트의 폴더를 만들면 분리된다고 한다. 간단하지만 삽질 중 하나였다.
2) Eureka Server 프로젝트 구축
단순히 디펜던시, application.yml, EurekaseverApplication자바 파일에 적용만 하면 되었었다.
3) gateway에 Eureka Client 적용
빨강색 부분을 추가했는데, 파랑색 부분은 나머지 서비스들을 클라이언트화 할 때 중복되는 코드이기 때문에 이에 대한 조치로 라이브러리화하여 maven으로 만들어진것을 implementation할 계획이다.