[React][Axios] CORS에러 발생 이유와 proxy를 통한 해결

2023. 10. 16. 19:20·Framework/React

CORS란?

CORS (Cross-Origin Resource Sharing) Policy(정책)는 웹 브라우저에서 실행되는 웹 애플리케이션들이 다른 도메인(origin)에 있는 리소스에 접근할 수 있는 권한을 부여하거나 제한하는 보안 정책입니다. 

 

위 에러는 CORS 에러 입니다. 아마 다들 한 번 쯤은 봤을 에러인데요. 이 글에서는 왜 이러한 에러가 발생하는지, 그리고 어떻게 해결하는 지에 대해 아주아주 간략하게 정리해 보겠습니다. 

 

CORS에 대한 개념을 알아보기 위해 이 글을 보시는 것은 추천드리지 않습니다 🥲 다소 생략된 부분이 있다고 느끼실 수 있어요! 

 

CORS에러가 발생하는 이유

앞서 말했듯이 CORS는 다른 도메인에 있는 리소스에 접근하는 것과 관련이 있습니다. 

여기서 다른 도메인(origin)이란 프로토콜(protocol), 호스트(host), 포트(port)를 합친 것이고, 각각을 비교하여 셋 중 하나의 문자열이라도 다를 경우 다른 도메인으로 인식합니다.

 

여기서 "문자열"을 비교한다는 것에 주의해주셔야 합니다.

localhost:3000과 127.0.0.1:8080은 같은 주소를 의미하지만 

"localhost"와 "127.0.0.1" 이 호스트의 문자열이 다르기 때문에 다른 도메인으로 인식합니다.

 

SOP

아니!! 달라도 요청정도는 보낼 수 있는거 아니야? ㅡㅡ 라고 생각하실 수도 있습니다.

하지만 정책상 불가능 하다는 것을 알게되었습니다. 

그 정책은 바로 SOP(Same Origin Policy), 동일 출처 정책입니다.

 

이 SOP 정책은 동일한 출처에서만 리소스를 공유할 수 있다는 정책을 가지고 있습니다.

즉, 동일한 도메인(origin)의 서버에 있는 리소스는 자유롭게 사용이 가능하지만! 다른 출처(cross origin)의 서버에 있는 리소스는 사용하지 못한다는 것이죠!

 

그렇다면 CORS 에러가 난 이유는

➡️ SOP를 어겼기 때문!

 

그럼 에러를 해결해보자 (React)

에러를 해결하기 위해서 사실 서론이 길었습니다.

이 에러를 해결하기 위한 방법은 아주아주 간단하거든요!

 

바로 리액트 앱의 package.json에 proxy 설정을 해주시면 됩니다

//package.json

{
    ...,
    ...,
    "proxy": "요청을 보내고자 하는 origin"
}

이런 식으로 해결을 했을때

"여러가지 API를 관리하는 CORS 설정을 하기 위해서는 어떻게 해야하지?" 라는 의문이 드실 수 있습니다.

http-proxy-middlewar 라는 라이브러리를 통해 여러 API에서 CORS설정을 할 수 있습니다

다만 이 글에서는 다루지 않고 있습니다... 

이거 정리하려면 글을 또 일주일동안 미루면서 쓸 게 분명하기 때문에... 아마 나중에 다른 글에서 볼 수 있을 것 같습니다.

 

 

 

 


사실 CORS같은 경우에는 웹 개발자라면 반드시!!!!!!!!! 알아야 하는 개념이라고 하기 때문에, 단순히 에러만 처리하지 않고 개념에 대해서도 공부해봤습니다. 제가 정리한 내용은 아주 빙산의 일각이기 때문에... 이 글을 통해 아~ 이런거구나! 만 알고 가지 마시고 다른 글들도 읽어보시는 것을 추천드립니다. (근데 이 글을 누가 볼까요...)

 

 

'Framework > React' 카테고리의 다른 글

[React] 로그인 후 유저 정보를 Redux에 저장하기 (TypeScript)  (0) 2024.04.10
[React] 리덕스 알아보기  (0) 2024.04.06
[React] JSX와 자바스크립트 표현식  (0) 2023.08.15
[React] npm 으로 yarn 설치 & yarn으로 react 설치  (0) 2023.07.28
[React] 리액트 앱 생성하고 실행하기  (0) 2023.05.20
'Framework/React' 카테고리의 다른 글
  • [React] 로그인 후 유저 정보를 Redux에 저장하기 (TypeScript)
  • [React] 리덕스 알아보기
  • [React] JSX와 자바스크립트 표현식
  • [React] npm 으로 yarn 설치 & yarn으로 react 설치
hurlud
hurlud
나와 같은 궁금증을 가진 사람들을 위해 오늘도! 🐥
  • hurlud
    주독야독
    hurlud
  • 전체
    오늘
    어제
  • 최근 글

    • ALL (106)
      • CS (13)
      • Linux (2)
      • Deploy (7)
        • AWS (6)
        • Docker (1)
      • IDE (13)
        • IntelliJ (5)
        • Android Studio (8)
      • DB (10)
        • MySQL (6)
        • MongoDB (4)
      • Programming Language (20)
        • JavaScript (10)
        • Java (8)
        • Python (2)
      • Framework (32)
        • Node.js (6)
        • SpringBoot (17)
        • React (6)
        • NestJS (2)
      • Git | Github (4)
      • ETC (5)
      • Akka (0)
  • 링크

    • 깃허브
  • hELLO· Designed By정상우.v4.10.0
hurlud
[React][Axios] CORS에러 발생 이유와 proxy를 통한 해결
상단으로

티스토리툴바