yangbongsoo / tistory-comments

0 stars 0 forks source link

18 #3

Open utterances-bot opened 2 years ago

utterances-bot commented 2 years ago

Spring Cloud Gateway CORS 주의사항

CORS 요청을 받기 위해 서버가 해줘야 하는 작업들이 있다. 그런데 Spring Cloud Gateway 는 프록시 서버이기 때문에 조금 더 신경써야 하는 부분이 있어 정리했다. ※ CORS 기본 개념까지 같이 설명하기엔 글이..

https://yangbongsoo.tistory.com/18

yangbongsoo commented 2 years ago

@SooKim1110 님. 해당 이슈 는 다른분들도 참여하시는 공간이라 여기에 답변 남깁니다. ㅎㅎ

저희 서비스같은 경우는 Access-Control-Allow-Origin에 웹 프론트 주소 “http://localhost:3000” 이 들어갈 것 같은데 모든 백엔드 서비스에서 허용해야하는 Origin 이 같고, 같은 cors 정책을 사용하는 경우에는 혹시 gateway에서 cors 설정을 해주는 방식이 뒷단 서버들에서 처리하는 방식보다 나을까요?

다시 생각해보니, @SooKim1110 님이 작업하신 방향이 맞는거 같습니다. 현재 만드시는 프로젝트의 구조는 아래와 같다고 이해했습니다.

스크린샷 2022-01-17 오전 10 13 59

gateway 뒷단 서버(downstream server) 가 고정된 형태이고, 같은 CORS 정책을 사용한다면 gateway 에서 공통 작업을 처리 해주는게 합리적인거 같습니다.

왜 gateway 에서 다 bypass 시키고 뒷단 서버에서 각자 CORS 처리를 하는걸 추천 했을까 다시 생각해봤는데요. 저는 "만약 gateway 뒷단 서버가 새롭게 추가됐는데, 기존과 다른 CORS 정책을 가진다면?" 이라는 생각을 기본적으로 갖고 코드를 본거 같습니다.

개인적으로 SW 개발을 해오면서, 확장가능한 구조를 계속 고민하다보니 자연스럽게 그렇게 됐네요. ㅎㅎ 그런데 지금 그것까지 고려하는건 오버 스펙인거 같습니다. 성급한 추상화가 더 안좋듯이 이 작업은 @SooKim1110 님이 작업하신게 맞는거 같습니다.

다만 이 CORS 작업을 하면서도 확장가능한 구조 에 대한 고민은 같이 해주면 좋을거 같습니다(기술적 선택을 안하더라도). CORS 이슈 처리는 간단합니다. 조금만 구글링해도 해답을 금방 얻을 수 있죠. 그래서 다른사람과 차별화 되기 힙듭니다. 그런데 다른 구조에 대해서도 고민을 해본다면 CORS 에 대한 좋은 스토리가 생길거 같습니다.

SooKim1110 commented 2 years ago

상세힌 답변 남겨주셔서 감사합니다.

말씀해주신 것처럼 뒷단 서버들을 자유롭게 변경하려면 gateway보단 각 서버들에서 CORS를 처리하는 것이 확장이 용이할 것 같습니다.

블로그에 있던 PR 링크도(https://github.com/spring-cloud/spring-cloud-gateway/pull/1883) 읽어보니 이런 상황을 고려했다는 것을 알 수 있었습니다.

 We use gateway like route just to farword request, every backend has it's own team, they can do it in their own services, communicate between team is expensive, so just keep gateway simple. For example we have 2 old sevices,1 is service in java, 2 is service in c#, they have already done well with CORS, we don`t want do it again in gateway.

지금 만드는 서비스는 규모가 크지 않고 아키텍쳐가 확정된 상태라 일단은 그대로 gateway에서 처리할 것 같지만, 확장가능한 구조에 대해 고민을 하면 좋을 것 같다는 말씀이 많이 와 닿았습니다. 설계를 하고 코드를 쓰면서 진짜 고민을 한 만큼 결과가 나온다는 것을 자주 느꼈습니다. 앞으로 서비스를 구현해나가면서 CORS를 gateway를 처리하는 것이 최선인지, 확장가능한 구조인지 계속 고민을 해보며 수정해나가도록 하겠습니다.

앞으로도 블로그에 좋은 글 많이 작성해주세요😊 자주 읽으러 가겠습니다. 감사합니다!

yangbongsoo commented 2 years ago

@SooKim1110 님 안녕하세요. 혹시 email 주소 알 수 있을까요? 문의드리고 싶은게 있습니다.

SooKim1110 commented 2 years ago

@yangbongsoo 안녕하세요! ohjskim@gmail.com 으로 보내주시면 됩니다.