JavaScript에서 “Blocked by CORS Policy” 오류를 해결하는 방법 (단계별 가이드)

발행: (2026년 2월 21일 오후 01:34 GMT+9)
4 분 소요
원문: Dev.to

Source: Dev.to

소개

웹 애플리케이션을 만들다가 브라우저 콘솔에 다음과 같은 오류가 표시된다면:

Access to fetch at 'https://api.example.com' from origin 'http://localhost:3000' 
has been blocked by CORS policy.

이는 JavaScript와 API를 다룰 때 초보자들이 가장 흔히 마주치는 문제 중 하나이다.

이 글에서 배울 내용:

  • CORS가 무엇인지
  • 왜 이 오류가 발생하는지
  • Node.js (Express)에서 해결하는 방법
  • PHP에서 해결하는 방법
  • 프로덕션 환경을 위한 모범 사례

CORS란?

CORS (Cross‑Origin Resource Sharing)는 브라우저 보안 기능이다. 요청이 cross‑origin으로 간주되는 경우는 다음과 같다:

  • 프론트엔드가 http://localhost:3000에서 실행될 때
  • 백엔드가 https://api.example.com에서 실행될 때

이 두 오리진이 다르기 때문에, 서버가 명시적으로 허용하지 않으면 브라우저가 요청을 차단한다.

Important: CORS는 서버가 아니라 브라우저에 의해 강제된다.

왜 CORS 오류가 발생하는가

CORS 오류는 백엔드 서버가 올바른 HTTP 헤더를 보내지 않을 때 발생한다. 브라우저는 다음과 같은 헤더를 확인한다:

Access-Control-Allow-Origin

해당 헤더가 없으면 브라우저는 요청을 차단한다. 즉, 프론트엔드만으로는 CORS를 해결할 수 없으며 백엔드에서 설정해야 한다.

해결 방법 1: Node.js (Express)에서 CORS 수정

  1. CORS 미들웨어를 설치한다:
npm install cors
  1. Express 서버를 업데이트한다:
const express = require('express');
const cors = require('cors');

const app = express();

app.use(cors());

app.get('/api/data', (req, res) => {
  res.json({ message: "CORS is fixed!" });
});

app.listen(5000, () => console.log("Server running on port 5000"));
  1. 서버를 재시작하고 요청을 다시 테스트한다.

해결 방법 2: PHP에서 CORS 수정

PHP 파일 상단에 다음 헤더를 추가한다:

이렇게 하면 cross‑origin 요청이 허용된다.

중요: 프로덕션에서는 “*” 사용 금지

다음과 같이 사용하면:

header("Access-Control-Allow-Origin: *");

모든 도메인에서 요청을 허용하게 되며, 프로덕션 환경에서는 안전하지 않다. 대신 허용할 도메인을 명시한다:

header("Access-Control-Allow-Origin: https://yourdomain.com");

Postman은 동작하지만 브라우저는 실패하는 이유

  • Postman은 동작한다: CORS 제한을 적용하지 않기 때문이다.
  • 브라우저는 실패한다: 보안 규칙으로 CORS를 강제하기 때문이다.

빠른 디버그 체크리스트

  • 백엔드에 CORS 헤더가 설정되어 있는지 확인한다.
  • 변경 후 서버를 재시작한다.
  • 브라우저 캐시를 비운다.
  • 업데이트된 메시지가 있는지 브라우저 콘솔을 확인한다.

결론

“Blocked by CORS Policy” 오류는 JavaScript 버그가 아니라 브라우저 보안 규칙이다. CORS는 백엔드에서 설정해야 한다는 점을 이해하면 해결 방법은 매우 직관적이다.

0 조회
Back to Blog

관련 글

더 보기 »

LovedIn: 사례 연구

소개 안녕하세요, 저는 Awoyemi Abiola이며, 이번은 Rise Academy Front‑end 트랙 프로젝트 – LovedIn의 Week 5 과제에 대한 제 케이스 스터디입니다. 이 케이스 스터디에서는...