Intro
저는 현재 로컬환경에서만 개발을 진행하고 Front 부분과 따로 개발, 배포를 진행해본 경험이 없기 때문에 CORS 이슈를 만나본 적은 없지만, 언젠가 CORS 이슈를 겪게될 것은 자명한 사실이기 때문에 여러 사이트를 참고하여 간단하게 개념들을 정리해보고자 합니다.
CORS, SOP란?
SOP (Same-Origin Policy, 동일 출처 정책)
자바스크립트 엔진 표준 스펙의 보안 규칙으로 하나의 출처(Origin)에서 로드된 자원(문서나 스크립트 등)이 호스트나 프로토콜, 포트번호가 일치하지 않는 자원과 상호작용하지 못하도록 요청 발생을 제한하고, 동일 출처(Same Origin)에서만 접근이 가능한 정책입니다.
CORS (Cross-Origin Resource Sharing)
CORS는 한 도메인 또는 Origin의 웹 페이지가 다른 도메인(도메인 간 요청)을 가진 리소스에 액세스 할 수 있게하는 보안 메커니즘입니다.
CORS는 서버와 클라이언트가 정해진 헤더를 통해 서로 요청이나 응답에 반응할지 결정하는 방식으로 CORS라는 이름으로 표준화되었습니다.
따라서 로컬 환경에서 개발을 할 때 API 요청을 해보면 문제없이 리소스를 내어주지만, 별도의 CORS 없이 다른 출처에서 API 요청을 하면 CORS 이슈가 발생하여 정상적으로 요청이 가지 않습니다.
CORS는 왜 생겼을까?
이전에는 동일한 도메인에서 리소스를 받아왔는데, 지금은 클라이언트에서 도메인이 다른 서버에서 제공하는 API를 사용하는 일이 많아졌습니다.
그래서 이전처럼 동일한 도메인간의 요청만 할수는 없어졌고, CORS가 생겼습니다.
CORS 이슈 해결 방법
CORS 이슈를 해결하는 방법은 정말 여러가지가 있지만, 간단한 방법 몇가지만 살펴보도록 하겠습니다.
동일 출처로 이동
간단하게 요청을 보내는 클라이언트와 서버를 동일한 출처로 이동시켜주면 해결할 수 있습니다.
서버에서 Access-Control-allow-origin 헤더 추가
서버에서 모든 클라이언트 요청에 대한 cross-origin HTTP 요청을 허가하는 Access-Control-Allow-Origin: * 헤더를 추가하면 됩니다. 하지만 이렇게 설정하면 전체 호스트에 대한 요청을 허용하는 것이기 때문에 보안에 취약할 수 있습니다.
스프링에서 CORS 적용
스프링에서 CORS를 적용하는 방법은 다음 3가지의 방법이 있습니다.
- 어노테이션 활용
- CORS 필터 적용
- 스프링 시큐리티 설정
자세한 내용은 제가 일전에 정리해놓은 아래의 링크를 참고해주세요!
https://sandcastle.tistory.com/78
Spring에서 CORS 적용하기
Intro 최근 CORS에 대하여 공부를 해보고, Spring에서 CORS 설정은 어떻게 하는지에 대하여 공부에 본 뒤, 직접 적용하는 코드를 작성하고 간단하게 정리하고자 합니다. 모든 코드는 https://github.com/DevCH
sandcastle.tistory.com
Cross Origin 어노테이션 사용
메소드 레벨 및 글로벌 레벨에서 spring mvc 애플리케이션에서 spring cors를 지원하는 방법입니다. 기본적으로 spring mvc는 @CrossOrigin 어노테이션을 제공하기 때문에 이 어노테이션이 달린 메소드는 교차 출처를 허용하는 것으로 표시합니다.
Reference
'개발 > ETC' 카테고리의 다른 글
트랜잭션 전파속성과 UnexpectedRollbackException (0) | 2024.08.11 |
---|---|
[Datagrip] MySQL sqldump Export & Import (0) | 2024.08.10 |
도커로 젠킨스 설치, 설정 가이드 (0) | 2023.10.12 |
테스트코드에서 Lombok 사용하기 (0) | 2023.09.01 |
XSS에 대하여... (0) | 2023.08.02 |
개발을 하며 만났던 문제들과 해결 과정, 공부한 내용 등을 기록합니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!