인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

코린이님의 프로필 이미지

작성한 질문수

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

유레카 서버에 등록된 서비스를 호출하는 게이트웨이

작성

·

247

1

선생님 안녕하세요.
 
client가 특정 엔드포인트로 request할 경우, 게이트웨이가 Eureka Server에서 해당 서비스의 존재 유무를 파악하고 라우팅시켜준다고 생각했습니다. 그런데 Eureka Server에 등록되어 있는 서비스의 정보를 게이트웨이 application.yml파일에 입력하지 않았더니 해당 서비스를 게이트웨이가 호출할 수 없었습니다. Q1) 게이트웨이가 특정 서비스를 호출하려면, 해당 서비스가 Eureka Client로 등록되어 있고, 게이트웨이 설정파일에도 해당 서비스의 정보를 입력해야만 게이트웨이가 서비스를 호출할 수 있는건가요? 유레카의 필요성을 잘 모르겠습니다... Q2) 유레카는 꼭 있어야 하는건가요?

답변 1

0

Dowon Lee님의 프로필 이미지
Dowon Lee
지식공유자

안녕하세요 이도원입니다. 

작성하신 apigateway-service의 application.yml 파일의 내용을 정확하게 몰라 답변드리는 데에 한계가 있지만, 말씀하신 내용으로 짐작해 보면, applicatin.yml 파일에는 Eureka에 등록된 서비스의 이름으로 라우팅 하고 있을 것 같습니다. 만약 그렇다면, 해당 서비스명을인식하기 위해 Eureka로부터 해당 정보를 가지고 온 상태에서 라우팅을 할 수 있습니다. Eureka client에 해당하는 apigateway-service는 주기적으로 Eureka server로부터 등록된 서비스들의 정보를 가지고 받아오고 있으며, 해당 정보를 토대로 다른 서비스로 호출이 가능합니다. 새롭게 등록되거나, 해제 된 서비스들의 내용은 주기적으로 받아오는 정보를 통해 갱신하게 됩니다. 물론 Eureka를 사용하지 않고도 직접 URL을 입력하여 라우팅 할 수 있으며, 이때에는 말씀하신 2번째 질문처럼 Eureka의 사용 용도가 없어지게 됩니다. 그러나, 이렇게 서비스 할 경우, LB 사용이 안되어, 같은 서비스를 여러개 띄워 사용할 경우에는 분산처리가 되지 않습니다. 

Eureka는 많은 서비스들의 정보를 가지고 있으면서, 서비스들간에 통신을 하기위해 처리되며, 해당 서비스들이 모든 각각의 서비스 IP를 알고 있다고 가정하면, 사용하지 않고 처리할 수도 있겠지만, 이후에 사용하게 되는 컨테이너 가상화같은 부분에서는 모든 IP를 직접 제어해서 사용하는 것이 어렵기 때문에, 가급적이면 사용하는게 좋다고 생각됩니다. 

감사합니다.