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

jeong85cs님의 프로필 이미지
jeong85cs

작성한 질문수

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

Spring API Gateway 에서 feign client

작성

·

989

0

API Gateway 에 AuthorizationHeaderFilter를 구현중에 있습니다.

1. token을 parsing 해서 나온 subject가 user service에 있는 username 이라서 gateway service에서 user service를 호출하기 위한 feign client를 구현하고, 이를 AuthorizationheaderFilter에서 주입하려고 했는데요. circular reference에러가 발생합니다. 구글에 찾아보니 spring bug로 gateway filter에서는 feign client를 사용할 수 없다는 얘기가 있던데, 실제로 사용할 수 없는건가요?

 

2. ApiGateway에 application.yaml를 만들어놓고, 특정 method에 filter 항목에 AuthorizationHeaderFilter를 지정해서 그 method 요청이 오면 filter가 걸리는 것을 확인했습니다. 그런데, 제가 구상하는 시스템에서는 실제로 Front end에서 gateway로 요청이 오는 것에는 filter를 걸고, 내부적으로 service 간 통신할 때 gateway로 들어오는 request에 대해서는 token이 필요하지 않기 때문에 filter를 걸고싶지 않은데요. 이를 구현하기 위한 아이디어를 얻고 싶습니다.

답변 1

0

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

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

문의사항 내용에 답변 드립니다.

1. Spring Cloud Gateway는 비동기 방식으로 서비스 되며, Feign Client는 동기 방식으로 서비스 되는 차이가 있습니다. 따라서 Gateway에서 직접 Feign Client나 RestTemplate을 사용하는 것은 적절하지 않을 것 같습니다. 마이크로 서비스 자체를 비동기 방식으로 지원하도록 구현하는 것이 필요할 것 같습니다. 

2. 말씀하신 내용으로 제대로 작업의 흐름이 이해 되지 않아 대략적으로 답변드려야 할 것 같습니다. Gateway를 이용해서 사용자의 요청을 Front-end로 전달하는 것은 잘 처리된거라 생각됩니다. 다만 내부적인 통신에서 Gateway를 사용해야 할 지, 서비스 간의 통신을 바로 할 지를 결정해야 할 것 같습니다. 예를 들어, user-service와 order-service 등은 외부에서의 접근을 차단하고 내부적인 통신만 할 경우에는 굳이 gateway를 사용하여 접근할 필요는 없다고 생각됩니다. 추가로, Filter에서 서비스의 요청이 어디에서 발생한 것인지 찾아서 분류하는 것이 가능합니다. 

서비스의 구성을 조금 더 상세하게 알려주시면 답변을 드리는데 도움이 될 것 같습니다. 

감사합니다.

jeong85cs님의 프로필 이미지
jeong85cs

작성한 질문수

질문하기