
먼저 이러한 문제를 해결하기전에 현재의 백엔드 환경은 아래처럼 구성되어 있다.
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 에러는 언제 맞닥트려도 상당히 멘탈이 나가는 듯 하다...