[웹] CORS와 SOP
*이 글의 내용은 제가 이해한 것을 바탕으로 작성되었습니다. 글의 내용 중 잘못된 내용이 있다면 댓글로 피드백 해주시면 감사하겠습니다.
0. 개요
CORS는 웹 통신에서 사용되는 보안 정책 중 하나이다. 여태까진 백엔드끼리만, 혹은 프론트끼리만 작업을 하다 보니 CORS에 대해 몰라도 상관이 없었다. 하지만 웹 통신을 하려면 CORS에 대한 이해는 필수이다.
그래서 이번 기회에 CORS에 대해 정리해보게 되었다.
1. SOP (Same Origin Policy)
CORS를 이해하려면 SOP를 먼저 설명해야 한다.
SOP(Same Origin Policy)는 다른 Origin으로 요청을 보낼 수 없도록 금지하는 브라우저의 기본적인 보안 정책이다. 즉, 동일한 Origin으로만 요청을 보낼 수 있게 하는 것이다. 여기서 Origin은 URL에서 프로토콜, 도메인, 포트 번호를 합친 부분을 의미한다.
예전에는 이것이 절대적인 규칙이었기 때문에, 다른 Origin으로 요청을 보내는 건 애초에 불가능하였다. 그러나 기술이 발달하면서 서로 다른 Origin끼리 데이터를 주고받아야 하는 일이 많아졌고, 이로 인해 SOP는 별도의 예외 사항을 두게 되었다. 즉, 몇 가지 예외 상황에 대해서는 다른 Origin으로도 요청을 보낼 수 있게 하는 것이다. 그 예외 상황이 바로 CORS이다.
2. CORS (Cross Origin Resource Sharing)
CORS(Cross Origin Resource Sharing)는 다른Origin으로 요청을 보내기 위해 지켜야 하는 정책으로, 원래대로라면 SOP에 의해 막히게 될 요청을 풀어주는 정책이라고 볼 수 있다.
참고로 CORS는 '브라우저'의 정책이다. 즉, 서버는 평소처럼 요청이 오면 응답을 해줄 뿐이고, 브라우저가 자신이 보낸 요청 및 서버로부터 받은 응답의 데이터가 CORS 정책을 지키는지 검사하여 안전한 요청을 보낸 건지 검사하는 것이다. 따라서 서버가 정상적으로 응답을 해줬더라도, 알고 보니 안전한 요청이 아니라고 판단되면 해당 응답을 버린다. 그렇기 때문에 서버 간 통신에서는 이러한 정책이 전혀 적용되지 않는다.