🧩 Spring Boot CORS란

정의

Spring Boot에서의 CORS 설정은 브라우저의 Same-Origin Policy를 우회할 수 있도록 허용 Origin, Method, Header를 서버에서 정의하는 과정이다. Spring Security를 함께 쓰는 경우에는 보안 필터 체인 안에서 CORS를 활성화해야 한다.

  • 프론트엔드와 백엔드가 서로 다른 Origin일 때 필요하다.
  • 보통 http.cors()CorsConfigurationSource를 함께 사용한다.
  • 허용 범위를 너무 넓게 열지 않도록 주의해야 한다.

⚙️ SecurityConfig 예시

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http.cors().and()
        .csrf().disable()
        .authorizeRequests()
        .antMatchers("/api/**").authenticated()
        .anyRequest().permitAll()
        .and()
        .formLogin()
        .successHandler((req, res, auth) -> res.setStatus(HttpServletResponse.SC_OK))
        .failureHandler((req, res, e) -> res.setStatus(HttpServletResponse.SC_UNAUTHORIZED))
        .and()
        .userDetailsService(userService);

    return http.build();
}

의미

  • http.cors()는 Spring Security 필터 체인에서 CORS 처리를 활성화한다.
  • csrf().disable()은 별개 설정이므로 CORS와 혼동하지 않아야 한다.
  • authorizeRequests()는 인증/인가 정책을 담당한다.

⚙️ CORS Configuration 예시

@Bean
public CorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration config = new CorsConfiguration();
    config.setAllowedOriginPatterns(List.of("http://localhost:5173"));
    config.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPTIONS"));
    config.setAllowedHeaders(List.of("*"));
    config.setAllowCredentials(true);

    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", config);
    return source;
}

🧠 주요 개념

항목 설명
SecurityFilterChain Spring Security HTTP 보안 설정
Form Login 기본 로그인 방식
UserDetailsService 사용자 정보 로딩
CORS 다른 Origin에서의 요청 허용
SuccessHandler 로그인 성공 처리
FailureHandler 로그인 실패 처리

⚠️ 주의사항

  • Access-Control-Allow-Origin*를 쓰면서 Allow-Credentials=true를 함께 쓰면 안 된다.
  • 브라우저가 보내는 Preflight 요청(OPTIONS)을 막지 않아야 한다.
  • 인증이 필요한 API는 허용 Origin을 가능한 한 좁게 설정하는 것이 좋다.
  • allowedOriginPatterns는 동적 패턴이 필요할 때 유용하지만 운영에서는 신중하게 써야 한다.

📌 정리

  • Spring Boot CORS는 브라우저의 교차 출처 요청을 서버에서 허용하는 설정이다.
  • Spring Security와 함께 쓸 때는 http.cors()CorsConfigurationSource 구성이 핵심이다.
  • 설정 후에는 콘솔, Network, Preflight 순서로 실제 동작을 확인하는 것이 좋다.

연결문서

댓글남기기