웹개발 기본상식

CORS란? (Cross-Origin Resource Sharing)

Irene1988 2025. 4. 19. 16:14

🌍 CORS가 뭔가?

  • CORS는 '다른 출처(Origin) 간의 리소스 공유'를 허용할지 말지 서버가 결정하는 정책이야.

웹 브라우저는 보안 때문에 기본적으로, 다른 출처(Origin) 에 요청을 보내는 걸 차단한다.

여기서 "출처(Origin)"는 다음 3가지를 합쳐:

 

프로토콜 + 도메인 + 포트
예시:

 

📦 예를 들어볼게

너의 프론트엔드 (Next.js, React 등)가
http://localhost:3000에서 동작 중인데,

서버(API)
http://localhost:8080 에 있다면,
서로 포트번호가 다르기 때문에 "다른 출처" 이야.

그래서 그냥 AJAX 요청(axios, fetch 등)을 보내면, 브라우저는:

❌ "어? 다른 출처잖아? 보안상 막아야겠다!"

라고 막아버려.

이때 서버가 "괜찮아, 이 출처는 허락할게" 라고
응답 헤더에 특정 정보를 담아줘야 통과할 수 있어.
그게 바로 CORS 설정이야.

 

🎯 서버가 보내야 하는 CORS 헤더 예시

Access-Control-Allow-Origin: http://localhost:3000

이런 식으로 서버가 허용하면 브라우저는 요청을 허락해.

 

또 추가적으로,

Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization

 

🛡️ 왜 이런 제약이 필요한가?

웹 보안 때문에.
아무 사이트나 사용자의 인증정보(cookies, tokens 등)를
마구 가져가는 걸 막으려고.

 

🚀 개발자가 흔히 하는 일

  • 백엔드(Spring Boot, Node.js 등)에서
    Access-Control-Allow-Origin: * (모든 출처 허용)을 설정하거나
  • 특정 도메인만 허용하기 (localhost:3000, mydomain.com 등)

개발환경에서는 주로 "모든 출처 허용" (*) 해놓고,
운영환경에서는 "특정 출처만 허용" 해서 보안을 강화해.

 

📋 정리

질문
CORS란? 다른 출처에서 요청하는 걸 허락할지 말지 서버가 정하는 정책
왜 필요해? 보안을 위해 (다른 사이트가 내 데이터 막 가져가는 걸 방지)
어떻게 해결해? 서버가 응답 헤더에 Access-Control-Allow-Origin 등을 넣어줘야 함

 

📢 주의사항

  • CORS는 클라이언트(브라우저)에서 막는 거야. 서버 문제는 아님.
  • 서버가 제대로 설정 안 해주면, 브라우저가 요청 자체를 막아버려.
  • Postman 같은 툴은 CORS 무시하고 바로 통신 가능해 (브라우저에서만 CORS 체크함).