CORS에 대하여

프로젝트에서 CORS 에러를 해결한 적이 있다.

학과생 때 진행했던 프로젝트인데 복기 과정에서 CORS에 대한 완전한 이해가 동반되지 못했다고 생각이 들어서 이번 기회에 못을 박고 넘어가자.

먼저 CORS란 무엇인지 짚고 넘어가자.


CORS란?

CORSCross Origin Resource Sharing의 약자로 애플리케이션을 통합하기 위한 매커니즘이다.

여기서의 매커니즘은 한 도메인에서 로드되어 다른 도메인에 있는 리소스와 상호 작용하는 클라이언트 웹 애플리케이션에 대한 방법을 정의한다.

이때 이러한 작업은 HTTP-header를 이용해서 이루어지는데 이를 CORS라고 부른다.


솔직히 나는 이 정의가 좀 여렵다.


내가 이해한 느낌으로 재정의 해보자.

  • CORS는 다른 오리진(cross-origin)에서 리소스를 요청할 때 보안을 위해서 HTTP-header를 이용해 서버에서 믿을만한 origin인지 확인하고 그에 맞는 응답을 제공하는데 이러한 매커니즘을 CORS라고 한다.


크로스 오리진(Cross-Origin)이란?

cross-origin이란 다음 중 한 가지라도 다른 경우를 말한다.

  • 프로토콜

    • http와 https는 프로토콜이 다르다.

  • 도메인

    • domain.comother-domain.com은 다르다.

  • 포트 번호

    • 8080포트와 3000포트는 다르다.


CORS는 꼭 필요한가?

답을 먼저 말하자면 꼭 필요하다.

과거에는 크로스 사이트 요청 위조(CSRF) 문제가 많이 발생했다.

Cross Site Responce Forgery(CSRF)은 사용자가 인증한 세션에서 웹 애플리케이션이 정상적인 요청과 비정상적인 요청을 구분하지 못하는 점을 악용하는 공격 방식으로, 웹 애플리케이션이 사용자의 요청이 실제 사용자가 전송한 것인지 확인하지 않는 경우에 자주 발생한다.

CSRF에 대한 더 자세한 내용은 친절하게 설명해주는 https://nordvpn.com/ko/blog/csrf/ 를 참고하자.


이러한 문제를 해결하기 위해서 이제는 모든 브라우저가 동일 오리진 정책을 채택한다.


동일 오리진 정책

말그대로 동일한 오리진에서 오는 요청만을 허락하는 정책이다.

클라이언트 URL의 프로토콜, 포트 및 호스트 이름은 모두 클라이언트에서 요청하는 서버와 일치해야 한다.

이는 다른 오리진에서의 확인되지 않은 요청을 사전에 방지하는 정책이기도 하다.


CORS를 사용했던 경험

진행했던 프로젝트의 간단한 시스템 아키텍처는 이미지에서 처럼 React를 이용한 클라이언트와 Spring Boot를 이용한 백엔드 서버가 독립적으로 존재했다.


API 테스트 과정에서 클라이언트 localhost:3000localhost:8080cross-origin 상황이었다.

이는 당연하게도 클라이언트에서 백엔드 서버에 API 요청 시 CORS Error를 발생시켰다.

간단한 해결 방법을 채택했지만(서버 측에서 3000 포트를 승인하게하는 방법) 직접 문제를 대면하고 해결했던 좋은 경험이었다.


refer

- https://aws.amazon.com/ko/what-is/cross-origin-resource-sharing/

- https://hannut91.github.io/blogs/infra/cors

- https://nordvpn.com/ko/blog/csrf/

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 3월 19일 오전 6:06

댓글 2

  • 안녕하세요, 첫 게시물을 올려주셨네요! 직접 프로젝트 과정에서 경험하신 정보들을 공유해 주셔서 감사해요! 회고 느낌으로 작성해주신 것 같아서 술술 읽혔습니다. 앞으로도 이런 경험들 많이 공유해 주세요 :-)

    @정서영 글쓰는 재주가 없어서 회고 형식으로 작성했는데 읽어주셔서 감사해요!

함께 읽은 게시물


< '네이버 다녀요'라는 말에 아무도 무슨 일을 하는지는 묻지 않았다 >

1

... 더 보기


주니어 개발자들이 읽으면 좋은 테크 아티클 모음📚

F-Lab 에서 주니어 개발자들이(사실 개발자라면 누구나) 보시면 좋을 아티클 모음을 공유해 주었네요! 검색엔진부터 비동기 처리, NoSQL 등 다양한 분야의 아티클들이 공유되어 있으니 관심있으신 분들은 보시면 좋겠습니다. F-Lab 에서 공유해주신 아티클 주제를 나열해보면 다음과 같습니다. 📌 구글이 직접 말하는 검색엔진의 원리 (tali.kr) 📌 검색 엔진은 어떻게 작동하는가 (xo.dev) 📌 네이버의 검색엔진의 특징과 알고리즘 (tistory.com) 📌 [네이버 블로그]네이버 검색의 원리 : 네이버 블... 더 보기

주니어 개발자들이 읽으면 좋은 테크 아티클 모음

F-Lab : 상위 1% 개발자들의 멘토링

주니어 개발자들이 읽으면 좋은 테크 아티클 모음

 • 

저장 150 • 조회 4,127


Next.js 프로젝트를 AWS EKS에 배포하며 배운 것들

... 더 보기

쿠버네티스를 활용한 클라우드 네이티브 데브옵스 | 존 어런들 - 교보문고

product.kyobobook.co.kr

쿠버네티스를 활용한 클라우드 네이티브 데브옵스 | 존 어런들 - 교보문고

 • 

댓글 1 • 저장 24 • 조회 2,172


Longest Common Subsequence 자바스크립트 풀이

... 더 보기

Longest Common Subsequence | 알고달레

알고달레

Longest Common Subsequence | 알고달레