더북(TheBook)

이처럼 스프링 시큐리티와 관련하여 자동 구성 중에서 여러 구성 클래스를 고려한다. 여기서 하나하나 자세히 알아볼 필요는 없지만, 스프링 부트의 자동 구성된 보안 구성을 오버라이드하는 작업에서는 SpringBootWebSecurityConfiguration이 가장 중요하다. 이 구성 클래스의 일부를 살펴보자.


@Configuration
@EnableConfigurationProperties
@ConditionalOnClass({ EnableWebSecurity.class })
@ConditionalOnMissingBean(WebSecurityConfiguration.class)
@ConditionalOnWebApplication
public class SpringBootWebSecurityConfiguration {
    ...
}

이 코드에서 볼 수 있듯이 SpringBootWebSecurityConfiguration에는 조건 애너테이션이 몇 개 붙어 있다. @ConditionalOnClass 애너테이션은 @EnableWebSecurity 애너테이션이 클래스패스에 있는지 확인하고, @ConditionalOnWebApplication 애너테이션은 현재 애플리케이션이 웹 애플리케이션인지 확인한다. 한편 @ConditionalOnMissingBean 애너테이션은 스프링이 제공하는 기본 보안 클래스인 SpringBootWebSecurityConfiguration 대신 우리가 만든 보안 구성 클래스를 사용할 수 있게 한다.

@ConditionalOnMissingBean 애너테이션은 WebSecurityConfiguration 타입의 빈이 없을 때만 작동하도록 설정했다. 겉으로는 잘 드러나지 않지만, 앞에서 SecurityConfig 클래스에 @EnableWebSecurity 애너테이션을 붙인 결과로 WebSecurityConfiguration 타입의 빈을 간접적으로 생성한다. 따라서 자동 구성을 진행하는 시점에 이미 WebSecurityConfiguration 타입의 빈을 선언하므로 @ConditionalOnMissingBean 애너테이션 조건을 만족하지 않아 SpringBootWebSecurityConfiguration이 제공하는 모든 구성을 무시한다.

스프링 부트 자동 구성과 @ConditionalOnMissingBean 애너테이션은 자동 구성된 빈을 무엇이든 명시적으로 오버라이드할 수 있게 하지만, 항상 이런 식으로 오버라이드할 필요는 없다. 이번에는 간단한 구성 프로퍼티들을 설정하여 자동 구성되는 컴포넌트를 변경하는 방법을 알아보자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.