Jin's IT Story.

CORS 에러는 왜 생길까 동일 출처 정책 이해하기

| 2026-11-04
목차
    웹 보안과 동일 출처 정책을 상징하는 푸른빛의 3D 방패 아이콘

    웹 개발을 진행하다 보면 프론트엔드와 백엔드를 연결할 때 빨간색 경고 문구와 함께 요청이 차단되는 현상을 자주 겪게 됩니다. 이러한 현상이 발생하는 가장 대표적인 이유는 웹 브라우저가 기본적으로 적용하는 동일 출처 정책(Same-Origin Policy) 때문입니다. CORS 에러 원인을 정확히 이해하면 왜 브라우저가 이러한 차단을 실행하는지, 그리고 어떻게 안전하게 해결할 수 있는지 명확한 답을 찾을 수 있습니다.

    동일 출처 정책(Same-Origin Policy)이란 무엇일까

    동일 출처 정책은 웹 브라우저가 보안을 위해 강제하는 아주 기초적이면서도 중요한 규칙입니다. 쉽게 말해 내가 거주하는 아파트 단지 입구에서 외부인의 무단출입을 통제하는 보안 시스템과 비슷합니다. 하나의 웹사이트에서 불러온 스크립트가 다른 출처의 데이터에 함부로 접근하지 못하도록 막아주는 역할을 합니다.

    여기서 '출처(Origin)'는 프로토콜, 도메인 주소, 포트 번호 3가지의 조합으로 결정됩니다. 예를 들어 https://example.com:443 이라는 주소가 있다면, 프로토콜(https), 도메인(example.com), 포트(443)가 모두 완벽하게 일치해야만 브라우저는 동일한 출처로 인식합니다. 세 가지 요소 중 단 하나라도 다르면 브라우저는 다른 출처로 판단하고 보안 경계를 높이게 됩니다.

    CORS 에러 원인과 브라우저의 동작 방식

    CORS는 Cross-Origin Resource Sharing의 약자로, 직역하면 '교차 출처 자원 공유'를 의미합니다. 동일 출처 정책 때문에 원칙적으로는 다른 출처 간의 데이터 요청이 불가능하지만, 현실의 웹 서비스는 다양한 API 서버와 연동되어 작동합니다. 따라서 보안을 유지하면서도 예외적으로 타 출처의 자원을 공유할 수 있도록 만든 표준 메커니즘이 바로 CORS입니다.

    자주 오해하는 부분 중 하나는 CORS 에러를 백엔드 서버가 낸다고 생각하는 것입니다. 하지만 실제 CORS 에러 원인은 서버가 아닌 웹 브라우저에 있습니다. 브라우저는 타 출처로 요청을 보낸 뒤 받은 응답에 Access-Control-Allow-Origin 같은 적절한 CORS 헤더가 포함되어 있는지 확인합니다. 만약 해당 헤더가 없거나 허용 목록에 현재 사이트가 없다면, 브라우저가 스스로 판단하여 데이터 전달을 차단하고 콘솔에 에러를 출력합니다.

    사전 검사 단계인 프리플라이트(Preflight) 요청 이해하기

    브라우저는 다른 출처로 위험할 수 있는 요청을 보낼 때, 본 요청을 보내기 전 미리 안전성을 점검하는 절차를 거칩니다. 이를 프리플라이트(Preflight) 요청이라고 부르며, HTTP의 OPTIONS 메서드를 사용해 서버에 사전 문의를 던집니다.

    비유하자면 대형 건물에 들어가기 전 정문 경비원에게 "이 신분증으로 들어가도 되나요?"라고 먼저 물어보는 것과 같습니다. 브라우저는 서버에 프리플라이트 요청을 보내 응답 속 헤더 정보를 확인합니다. 이때 서버가 요청을 허용한다는 응답을 주어야만 비로소 실제 GET이나 POST 같은 본 요청을 서버로 전달하게 됩니다.

    CORS 에러를 안전하게 해결하는 핵심 방법

    CORS 에러를 해결하는 가장 올바른 정석 방법은 백엔드 서버에서 응답 헤더를 제대로 설정해 주는 것입니다. 서버 측 설정에서 Access-Control-Allow-Origin 헤더에 허용할 프론트엔드 출처 주소를 명시해 주면 브라우저는 차단을 해제하고 정상적으로 데이터를 받아옵니다.

    개발 단계에서 임시로 문제를 우회하고 싶다면 프록시(Proxy) 서버를 활용하는 방법도 있습니다. 프론트엔드 개발 환경에서 요청을 직접 타 출처로 보내는 대신, 동일 출처의 개발용 프록시 서버를 거쳐 전달하면 브라우저는 동일 출처 통신으로 인식하여 에러가 발생하지 않습니다.

    CORS는 개발자를 괴롭히는 장애물이 아니라, 사용자의 정보와 웹 시스템을 안전하게 보호하기 위해 마련된 필수 안전장치입니다. 동일 출처 정책의 개념을 똑똑하게 이해하고 프리플라이트 동작 과정을 파악한다면, 어떤 환경에서도 당황하지 않고 안정적인 웹 서비스를 구축할 수 있습니다.