Spring Cloud Gateway CORS 설정

진병욱·2023년 11월 27일

Spring Cloud MSA 적용

목록 보기
3/3
post-thumbnail

먼저 이러한 문제를 해결하기전에 현재의 백엔드 환경은 아래처럼 구성되어 있다.

  • AWS EC2
  • Nginx
  • Docker
  • Spring Cloud Gateway
  • Spring Boot (3.1.5)
  • Java 17
  • Mysql
  • micro services
    - auth-service
    - user-service
    - mail-service
    - game-service
    - rank-service
    - notice-service
    - payments-service

🤦‍♂️ 발생한 문제

MSA 환경에서의 CORS를 기존처럼 각각의 서비스에 설정을 해주었는데 CORS 문제 발생

기존에 하나의 프로젝트에 여러 도메인이 존재했을 때는, 전역으로 Spring Security에서 CORS 설정을 해 주었었다.

MSA 환경으로 백엔드를 구성했을 때도, 대수롭지 않게 각각의 서비스에 CORS 설정을 해 두었는데
이 때 CORS 에러가 발생하였다.

🔍 해결 과정

분명 나는 CORS 설정을 했는데 도대체 뭐가 문제일까.. 한참을 생각하고 찾아봤다.

그 결과 개발자 도구에서의 요청 흐름을 통해, gateway 자체에서 CORS 에러가 발생하고 있음을 확인했다.

문제를 확인하고 검색을 해 보니, gateway에서의 CORS 설정이 가능한 것도 확인했다.
그래서 공식 문서를 참고하여, CORS 설정을 했다.

spring:
  cloud:
    gateway:
      globalcors:
        cors-configurations:
          "[/**]":
            allow-credentials: false
            allowed-origins:
              - http://localhost:3333 (로컬 개발을 위해)
              - 도메인
            allowed-headers:
              - "*"
            allowed-methods:
              - PUT
              - GET
              - POST
              - DELETE

🙇‍♂️ 해치웠나?

CORS 설정도 해 두었으니, 이제는 정말 문제가 해결됐을 걸을 확인하고, 배포를 하고 다시 확인해봤다.

하지만, 이번에도 오류가 발생하고 있었고, 개발자 도구의 콘솔을 확인해보니
이번엔 중복 헤더 오류가 발생한 것을 확인할 수 있었다.

하나의 헤더에 여러 값이 중복으로 설정되었던 이슈인데, 알고보니 gatway + 서비스 이렇게 두 개의 CORS 설정이 적용되고 있었기 때문이었다.

🙋‍♂️ 해결

그래서 각 서비스들에서의 CORS 설정들을 모두 제거했더니, 정상적으로 서비스가 작동했다.

원래는 잘 작동하던 서비스들이 갑자기 CORS 에러가 발생하여
분명히 나는 다 했는데 뭐가 문제지 하면서 머리가 너무 아팠는데
그렇게 큰(?) 문제는 아니었어서, 너무 다행이었다. 😅

그래도 처음 이런 환경을 설계하고 적용하는데, 이런 저런 문제를 만나면서 해결해보는 경험도
재미도 있으면서 좀 더 친숙해지는 느낌을 받았다. 😄

CORS 에러는 언제 맞닥트려도 상당히 멘탈이 나가는 듯 하다...

profile
새로운 기술을 접하는 것에 망설임이 없고, 부족한 것이 있다면 항상 배우고자 하는 열정을 가지고 있습니다!

0개의 댓글