Zuul 적용 시 응답 헤더

이호인·2022년 6월 5일
0

Spring

목록 보기
5/6
post-thumbnail

현재 모놀리스 구조에서 마이크로서비스 구조로 점진적 변화를 시도해보는 공부를 하고있다. api-gateway의 필요성을 느껴서 netflix에서 만든 zuul을 적용하던 중 발생한 문제점에 대해 정리해두려고 한다.

📌 현재 상황

  • board-service / 포트번호 8080
  • api-gateway /포트번호 8082

아직 나누는 중이라 임시로 지정했다.

  • 문제 :
    게시판 서비스 이용 중 로그인 체크 필터에서 로그인 되지 않아 리다이렉트 되면 api-gateway 서버 8082 -> 게시판 서버 8080으로 응답해버림

  1. 요청이 들어오면 zuul 서버에서 받음.
  2. zuul 서버에서 board-service 서버로 요청을 보냄.
  3. board-service (8080)에서 로그인 체크 필터에 걸려 리다이렉트.
  4. board-service에서 리다이렉트 된 내용이 응답 헤더에 쓰여짐.
  5. zuul 서버로 응답.

📌 해결 방법

@Bean
    public LocationRewriteFilter locationRewriteFilter() {
        return new LocationRewriteFilter();
    }

api-gateway application 파일에 이 코드를 입력해주면 해결된다.
https://www.javadoc.io/static/org.springframework.cloud/spring-cloud-netflix-core/1.4.0.RELEASE/org/springframework/cloud/netflix/zuul/filters/post/LocationRewriteFilter.html
에 따르면

ZuulFilterZuul URL이 되도록 Location 헤더를 다시 작성하는 일을 담당한다고 적혀져있다.

처음에 이유를 몰라서 한동안 헤맸던 것 같다. 계속 필터 확인하고 클라이언트 단에서 잘못 호출하는지 확인도 해보고.. 이 플로우를 제대로 이해하지 못했던 것 같아서 다시 한번 zuul에 대해서도 찾아보기도 했다. 결국 스터디를 같이 진행해주고 있는 멘토님과 이야기를 나누다가 이런 식이다 ~ 이런 식이구나라고 이해한 뒤 해결 방법을 찾게 되었다.

📌 더 생각해보기

아직 적용해보진 않았지만 예상으로는 완벽하게 이제 서비스별 분리를 하고 zuul에서 필터 적용을 한다면 저 설정을 하지 않아도 원하는 결과값을 얻을 수 있지 않을까 생각이 들었다.

📌 reference!

https://www.javadoc.io/static/org.springframework.cloud/spring-cloud-netflix-core/1.4.0.RELEASE/org/springframework/cloud/netflix/zuul/filters/post/LocationRewriteFilter.html
멘토의 친절한 설명 ㅎㅎ @대악인 👍

profile
공부 기록

0개의 댓글