저작권 안내: 저작권자표시 Yes 상업적이용 No 컨텐츠변경 No

스프링5 입문

JSP 2.3

JPA 입문

DDD Start

인프런 객체 지향 입문 강의

'@ConfigurationProperties'에 해당되는 글 1건

  1. 2016.06.08 스프링 부트 커스텀 설정 프로퍼티 클래스 사용하기

스프링 부트는 application.properties 파일을 이용해서 설정을 제공한다. 이 파일에는 부트가 제공하는 프로퍼티뿐만 아니라 커스텀 프로퍼티를 추가할 수 있다. 커스텀 프로퍼티를 사용하는 몇 가지 방법이 있는데 그 중에서 설정 프로퍼티 클래스를 사용하면 관련 설정을 한 클래스에서 관리할 수 있어 편리하다.


설정 프로퍼티 클래스를 사용하는 방법은 간단하다. 먼저, 설정 프로퍼티 클래스로 사용할 클래스를 작성한다. 이 클래스는 다음과 같이 작성한다.

  • @ConfigurationProperties 애노테이션을 클래스에 적용한다. application.properties 파일에서 사용할 접두어를 지정한다.
  • application.properties 파일에 설정한 프로퍼티 값을 전달받을 setter를 추가한다.
  • 프로퍼티 값을 참조할 때 사용할 get 메서드를 추가한다.
다음은 설정 프로퍼티 클래스의 작성 예이다.


@ConfigurationProperties(prefix = "eval.security")

public class SecuritySetting {

    private String authcookie;

    private String authcookieSalt;


    public String getAuthcookie() {

        return authcookie;

    }


    public void setAuthcookie(String authcookie) {

        this.authcookie = authcookie;

    }


    public String getAuthcookieSalt() {

        return authcookieSalt;

    }


    public void setAuthcookieSalt(String authcookieSalt) {

        this.authcookieSalt = authcookieSalt;

    }


}


application.properties 파일의 프로퍼티의 설정 프로퍼티 클래스의 프로퍼티는 다음과 같이 매칭된다.


* application.properties 프로퍼티 이름 = prefix + "." + setter 프로퍼티 이름


예를 들어, 위 코드에서 prefix는 "eval.security"이므로 setAuthcookie()에 해당하는 프로퍼티는 "eval.security.authcookie"가 된다. 만약 setter의 프로퍼티 이름 중간에 대문자가 포함되어 있다면 다양한 매핑을 지원한다. 예를 들어, 위 코드에서 authcookieSalt가 중간에 대문자를 포함하고 있는데 이 경우 다음과 같은 프로퍼티로부터 값을 가져올 수 있다.

  • eval.security.authcookieSalt
  • eval.security.authcookie-salt
  • eval.security.authcookie_salt
  • EVAL_SECURITY_AUTHCOOKIE_SALT

@ConfigurationProperties를 적용한 클래스를 만들었다면, 다음 할 일은 빈으로 등록하는 것이다. 스프링 빈으로 등록하는 방법은 간단하다. 다음의 두 가지 방식 중 하나를 사용하면 된다.

  • @EnableConfigurationProperties을 이용해서 지정하기
  • 설정 프로퍼티 클래스에 @Configuration 적용하기 (또는 설정 프로퍼티 클래스를 @Bean으로 등록하기)

먼저 @EnableConfigurationProperties을 사용하는 방법은 다음과 같다. @EnableConfigurationProperties을 설정 클래스에 추가하고 @EnableConfigurationProperties의 값으로 @ConfigurationProperties를 적용한 클래스를 지정하면 된다. 이 경우 @EnableConfigurationProperties는 해당 클래스를 빈으로 등록하고 프로퍼티 값을 할당한다.


@SpringBootApplication

@EnableConfigurationProperties(SecuritySetting.class)

public class Application { ... }


두 번째 방법은 설정 프로퍼티 클래스를 빈으로 등록하는 것이다. 스프링 부트는 컴포넌트 스캔을 하므로 설정 프로퍼티 클래스에 @Configuration을 붙이면 자동으로 빈으로 등록된다. 스프링 부트는 해당 빈이 @ConfigurationProperties를 적용한 경우 프로퍼티 값을 할당한다.


@ConfigurationProperties 적용 클래스를 빈으로 등록했다면 이제 설정 정보가 필요한 곳에서 해당 빈을 주입받아 사용하면 된다. 예를 들면 다음과 같이 자동 주입 받아 필요한 정보를 사용하면 된다.


@Configuration

public class SecurityConfig {

    @Autowired

    private SecuritySetting securitySetting;


    @Bean

    public Encryptor encryptor() {

        Encryptor encryptor = new Encryptor();

        encryptor.setSalt(securitySetting.getAuthcookieSalt());

        ...

    }


@ConfigurationProperties를 사용할 때의 장점은 다음과 같다.

  • 필요한 외부 설정을 접두어(prefix)로 묶을 수 있고 중첩 설정을 지원한다. (예, YAML을 사용하면 계층 구조로 묶을 수 있다.)
  • 기본 값을 쉽게 지정할 수 있다. 설정 프로퍼티 클래스의 필드에 기본 값을 주면 된다.
  • int, double 등 String 이외의 타입을 설정 프로퍼티 클래스의 프로퍼티에 사용할 수 있다. 설정 파일의 문자열을 설정 프로퍼티 클래스의 프로퍼티 타입으로 스프링이 알아서 변환해준다.



Posted by 최범균 madvirus

댓글을 달아 주세요