[스프링] 프로파일에 따라 다른 스프링 시큐리티 설정

여러 환경에서 각각 다른 스프링 시큐리티 설정을 사용해야 하는 경우가 있습니다. 예를 들어, 개발 환경에서는 디버그 기능을 켜고, 운영 환경에서는 보안을 강화해야 할 수도 있습니다. 스프링의 프로파일을 이용하면 이러한 요구 사항을 처리할 수 있습니다. 이번 글에서는 프로파일을 이용하여 다른 환경에서 다른 스프링 시큐리티 설정을 사용하는 방법을 알아보겠습니다.

프로파일 설정

우선, 각 환경별로 필요한 설정을 포함한 프로파일을 정의해야 합니다. 예를 들어, 개발 환경에서는 dev 프로파일을, 운영 환경에서는 prod 프로파일을 사용할 수 있습니다. 프로파일은 application.properties 혹은 application.yml 파일에 정의할 수 있습니다.

# application.yml

spring:
  profiles:
    active: dev

혹은 프로그램 인자로 프로파일을 활성화할 수도 있습니다.

java -jar -Dspring.profiles.active=dev myapp.jar

프로파일별 설정

프로파일을 정의했으면, 각 프로파일별로 다른 스프링 시큐리티 설정을 만들 수 있습니다. 예를 들어, dev 프로파일에서는 permitAll로 설정하고, prod 프로파일에서는 authenticated로 설정할 수 있습니다.

@Configuration
@Profile("dev")
@EnableWebSecurity
public class DevSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().permitAll();
    }
}

@Configuration
@Profile("prod")
@EnableWebSecurity
public class ProdSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
    }
}

프로파일 적용

마지막으로, 프로파일을 적용하여 원하는 환경에서 해당 설정을 사용할 수 있습니다. 이를 위해 @Profile을 사용하여 각각의 설정이 특정 프로파일에만 적용될 수 있도록 합니다.

@Configuration
@EnableWebSecurity
@Profile({"dev", "prod"})
public class MultiProfileSecurityConfig {
    // 공통 보안 설정
}

이제 위와 같이 프로파일을 설정하면, 각각의 환경에서 원하는 스프링 시큐리티 설정을 사용할 수 있게 될 것입니다. 이러한 방법을 통해, 코드 중복을 최소화하고 각각의 환경에 맞게 유연하게 대응할 수 있습니다.

결론

이번 글에서는 스프링 시큐리티 설정을 다중 환경에서 유연하게 관리하는 방법을 알아보았습니다. 프로파일을 활용하면 각각의 환경에 맞는 설정을 쉽게 적용할 수 있습니다. 이를 통해 안정적이고 유연한 애플리케이션을 개발할 수 있습니다.

참고문헌: Spring Framework Documentation