ABOUT

성능과 운영 안정성을 함께 끌어올리는 개발자입니다.

92% Positional Error Reduction
79% p95 Latency Improvement
90%+ Long Tasks Reduction

2022.02 · 한국장학재단

우수 멘티

한국장학재단 사회 리더 대학생 멘토링 IT

2022.10 · 동작구청

우수 인재상

동작구청 우수 SW 인재

2025.05 · (주) 그랩

프로그래밍 우수상

(주) 그랩 우수 프로그램 개발

2025.05 · AWSKRUG

AWS한국사용자모임 발표

AI agent 스크립트 튜닝 관련 발표

ComputerScience

Development

Engineering

Trouble Shooting

GUESTBOOK

첫 마음부터
함께 나누는 온기

방명록 작성하러 가기

SUBSCRIBE

최신소식을
편하게 만나보세요.

CORS (Cross-Origin Resource Sharing)

 

정의

다른 출처(origin) 간의 리소스 요청을 제어하는 브라우저 보안 정책

클라이언트(브라우저)가 현재 도메인과 다른 도메인에 HTTP 요청을 보낼 수 있도록 허용하는 메커니즘입니다.
기본적으로 브라우저는 보안 상의 이유로 동일 출처(Same-Origin)가 아닌 요청을 차단하지만, 서버가 특정 헤더를 통해 허용할 수 있습니다.
특히 REST API 또는 마이크로서비스 환경에서 클라이언트-서버 분리가 일반화됨에 따라 필수적인 설정이 되었습니다.
CORS(Cross-Origin Resource Sharing)는 웹 페이지가 도메인, 프로토콜, 포트가 다른 리소스를 요청할 수 있도록 허용하는 보안 기능입니다. 이는 보안상의 이유로 기본적으로 브라우저가 다른 출처의 리소스를 요청할 때 제한을 두는 동일 출처 정책(Same-Origin Policy)을 우회할 수 있게 합니다.

특징

서버가 허용한 경우에만 교차 출처 요청 허용

출처(origin): 프로토콜 + 도메인 + 포트 조합을 의미합니다.

Preflight 요청: 실제 요청 전에 브라우저가 OPTIONS 요청을 통해 서버가 요청을 허용하는지 확인함

Access-Control-Allow-Origin: 허용된 출처를 명시 (예: https://example.com)

Access-Control-Allow-Methods: 허용된 HTTP 메서드 (예: GET, POST, PUT)

Access-Control-Allow-Headers: 허용된 요청 헤더 (예: Content-Type, Authorization)

Access-Control-Allow-Credentials: 인증 정보를 포함한 요청 허용 여부

Access-Control-Expose-Headers: 브라우저에서 접근 가능한 응답 헤더 지정

Access-Control-Max-Age: Preflight 요청 결과를 캐싱할 수 있는 시간(초 단위)

CORS 정책

CORS 정책은 서버가 브라우저의 교차 출처 요청을 수락할지 거부할지를 정의합니다.

즉, 서버가 응답 시 헤더를 통해 명시한 정책에 따라, 브라우저는 교차 출처 요청을 허용하거나 차단합니다.

  • 정책의 주체: 브라우저는 정책을 실행하고, 서버는 정책을 설정합니다.
  • 허용 방식: 명시된 출처만 허용되며, 인증 정보 포함 여부도 정책에 따라 달라집니다.
  • 보안 목적: CORS 정책은 악의적인 도메인에서 무단으로 API를 호출하지 못하게 차단합니다.

사용 예시

프론트엔드 서버와 API 서버가 분리된 환경에서 사용

예시: http://localhost:3000에서 http://api.example.com으로 요청 시

Access-Control-Allow-Origin: http://localhost:3000
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 86400

 

보안 고려사항

Access-Control-Allow-Origin: *로 설정할 경우, 모든 도메인에서 접근이 가능하므로 민감한 데이터가 노출되지 않도록 주의해야 합니다.

인증 정보(Credentials)를 포함한 요청에서는 와일드카드(*)를 사용할 수 없습니다. 명시적인 출처만 허용해야 합니다.

서버 설정이 허술하면 CSRF와 같은 공격에 취약해질 수 있으므로, 항상 신뢰할 수 있는 도메인만을 화이트리스트로 등록해야 합니다.


728x90