예) naver.com/ (클라이언트와 서버가 같은 origin을 공유하기 때문에 이 때부터는 fetch에 상대경로만 적어두면 잘 작동함.)
웹 개발을 할 때는 두개의 서버가 필요(백엔드 서버 - React Dev Server)
React Dev Server는 npm start 하면 실행되는 서버임.
예) 백엔드 서버는 포트 8000 / 리액트 서버는 포트 3000 을 부여
한 컴퓨터에서도 각각의 서버를 식별 가능하게 하기 위해서
백엔드 서버와 리액트 데브 서버의 포트를 다르게 부여npm start -> 브라우저가 리액트 데브 서버(포트 3000)으로 접속 -> 리액트 데브 서버에서 HTML, CSS, JS 등을 응답 -> (단 웹 앱이 데브 서버만으로 운영되는 경우는 거의 없음) -> 다른 데이터들을 백엔드 서버(포트 8000)에 요청
fetch('http://localhost:8000/api_path')
실 서비스와 달리 개발할 때에는 리액트 데브 서버는 포트3000, 백엔드 서버는 포트8000으로 오리진이 달라져버리기 때문에 CORS의 Same Orgin Policy에 의해 에러가 나버린다.
문제 하나 더! COOKIE
서버는 인증을 통해 클라이언트에 토큰을 부여하고 클라이언트는 토큰을 쿠키에 두고 해당 서버 방문 시 인증 수단으로 쿠키를 제공하는데 이것 또한 CORS 정책에 위배되어 쿠키가 자동으로 리퀘스트에 포함되어 전송되지 않는다.
이를 해결하려면 백엔드에서 클라이언트의 오리진을 허용 설정해둬야 한다.
또한 쿠키의 경우 Credential:true 설정을 해줘야 자동으로 쿠키가 전송된다.
CORS 에러는 당연히 뜨지 않음!!
-package.json파일 아무데나
"proxy":"url"
넣어주면 됨.
추가) 백엔드 api가 여러개인 경우 npm proxy-middleware
나중에 공부해서 정리해보기
CORS 해결 방법 참고하면 좋은 것들.
CRA proxy 서버 설정 (FE)
netlify 호스팅 CORS 에러 해결
웹소켓 proxy 설정
추가 이해 링크