백엔드 공부진행도/SpringBoot
CORS란?
myeongjaechoi
2025. 1. 15. 13:25
CORS(Cross-Origin Resource Sharing)
- 출처가 다른 자원을 공유한다는 뜻
- 한 출처에 있는 자원에서 다른 출처에 있는 자원에 접근하도록 하는 개념
- 직역하면, 교차되는 출처 자원들의 공유라는 뜻
- 다른 출처에 있는 자원을 요청한다고 하면, 이를 교차 출처 요청이라고 함
- SOP(Same-Origin Plicy)를 우회하도록 허용하는 메커니즘
- SOP : 같은 출처만 허용한다는 보안 정책
CORS의 역할
- 보안 강화 : 요청을 허용할 도메인, HTTP 메서드. 헤더 등을 지정해 불필요한 접근을 차단
- 다른 도메인 간 통신 허용 : 클라이언트와 서버가 다른 도메인에 있을 때 요청과 응답을 허용
- Ex) 클라이언트에서 요청이 http://localhost:3000일 때, 서버가 http://localhost:8080이여도 응답을 허용
- 정확한 설정 관리 : 필요한 리소스 공유를 허용하되, 불필요한 오픈을 방지
CORS 사용 예시
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
// CORS 및 CSRF 설정
httpSecurity.cors().and().csrf().disable();
// API 권한 설정
configureApiAuthorization(httpSecurity);
// OAuth2 로그인 설정 추가
httpSecurity.oauth2Login(oauth2 -> oauth2
.loginPage("/login") // 사용자 정의 로그인 페이지 (필요 시)
.defaultSuccessUrl("/home", true) // 로그인 성공 후 리디렉션 URL
.failureUrl("/login?error=true") // 로그인 실패 시 리디렉션 URL
.successHandler(customAuthenticationSuccessHandler()) // 커스텀 성공 핸들러
.failureHandler(customAuthenticationFailureHandler()) // 커스텀 실패 핸들러
);
return httpSecurity.build();
}
이건 나의 SecurityConfig.java 코드이다.
Rest API기반 애플리케이션으로, CSRF 보호는 비활성화하였다.