포스트

CORS 문제 해결 방법

개요

웹 개발을 하다 보면 CORS(Cross-Origin Resource Sharing, 교차 출처 리소스 공유) 문제에 부딪힐 수 있습니다. 이 문제는 브라우저 보안을 위해 발생하는 것이며, 본 글에서는 CORS 문제와 이를 해결하는 방법에 대해 자세히 알아보겠습니다.

CORS가 뭔가요?

CORS는 웹 페이지가 다른 도메인의 리소스에 접근하려고 할 때 발생하는 보안 문제입니다. 예를 들어, example1.com에서 동작하는 웹 페이지가 example2.com의 API를 호출하려고 할 때 이 문제가 발생할 수 있습니다.

서버에서 CORS 설정하기

서버의 응답 헤더에 Access-Control-Allow-Origin 값을 설정함으로써 CORS 문제를 해결할 수 있습니다.

  • Node.js와 Express 사용 예
1
2
3
4
app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  next();
});
  • Python과 Flask 사용 예
1
2
3
4
5
from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

이렇게 설정하면 모든 도메인에서 해당 서버의 리소스에 접근할 수 있게 됩니다.

프론트엔드에서 CORS 문제 해결하기

JavaScript의 fetchaxios 라이브러리를 사용할 때는 서버에서 헤더를 설정하지 않았다면 CORS 문제가 발생할 수 있습니다. 이럴 때는 프록시를 사용해 문제를 해결할 수 있습니다.

  • React에서 create-react-app 사용 예
1
2
// package.json에 아래 설정 추가
"proxy": "http://localhost:5000"

CORS 문제를 안전하게 해결하기

모든 도메인을 허용하는 대신, 특정 도메인만 허용하는 방법을 사용할 수 있습니다. 이렇게 하면 보안을 높일 수 있습니다.

  • Node.js와 Express에서 특정 도메인만 허용하기
1
2
3
4
app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', 'http://example1.com');
  next();
});

정리

CORS 문제는 웹 개발에서 자주 마주치는 보안 문제입니다. 이 문제를 해결하기 위해 서버 설정을 바꾸거나 프론트엔드 코드에 프록시를 설정할 수 있습니다. 특정 도메인만 허용하는 방법을 사용하면 보안을 더욱 강화할 수 있습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.