브라우저는 same-origin policy(SOP, 동일 출처 정책)에 의해 다른 출처의 리소스를 허용하지 않음.
CORS(Cross-Origin Resource Sharing, 교차 출처 리소스 공유)
-동일 출처가 아니더라도 요청을 수행할 수 있도록 해주는 SOP 예외 정책, 서로 다른 origin끼리 리소스 요청을 받을 수 있도록 표준( Same Origin Policy )을 우회하는 기술
SOP(same-origin policy, 동일 출처 정책)
Origin이란
프리플라잇이란?
브라우저가 정상적으로 response를 확인하고나면 이후 cors요청을 전송
CORS의 동작 원리 (Simple request)
서버 응답 시, 브라우저가 요청한 Origin과 헤더(Access-Control-Request-Headers)의 값을 비교하여 유효한 요청이면 리소스를 응답. 유효하지 않으면 브라우저에서 이를 막고 에러 발생
스프링에서 해결 방법
스프링에선 컨트롤러에서 특정 메서드 혹은 컨트롤러 상단부에 @CrossOrigin 어노테이션을 활용하는 방법과 WebMvcConfigurer의 addCorsMappings(CorsRegistry) 메소드를 사용하는 방법이 있는데 전자는 컨트롤러가 많을 수록 설정해야 하는 어노테이션이 많아진다는 단점 때문에 팀프로젝트에서는 후자를 사용
해결한 경험
해당 클래스에서 CorsRegistry 클래스를 파라미터로 받는 addCorsMapping 메서드를 Override했음
이후 파라미터의 allowedOrigins 메서드를 사용해 프론트 엔드 origin에 접근을 허용해줌으로써
정상적으로 preflight 요청에서 브라우저가 접근 허용이 되어있음을 확인할 수 있도록 해주었습니다.