외부 설정 #2

Crow·2021년 8월 10일
0
post-thumbnail

학습 목표

  • @ConfigurationProperties
    • 연관된 Key 끼리 묶기
    • Bean 등록 & 다른 Bean에 DI
    • 융통성 있는 바인딩
    • @DurationUnit
    • @Validated를 통한 검증

@ConfigurationProperties

가급적이면 @Value 어노테이션을 통해서 프로퍼티를 사용하는 것 보다
@ConfigurationProperties 어노테이션을 통해서 아래 여러 기능들을 이용하는 것이 권장된다.
아래 기능들은 @Value 어노테이션을 통해서는 사용 못할 수 있다.

연관된 프로퍼티 끼리 묶기

여러 프로퍼티를 묶어서 읽어올 수 있다.

ex1. 여러 개의 같은 key를 가진 property 생성

  • 이름 : name - String
  • 나이 : age - int
  • 이름 + 성 : fullName (place holder 사용) - String

ex2. property 묶음 처리를 위한 클래스 생성

  • @ConfigurationProperties 어노테이션을 사용.
    • key를 인자로 준다. 즉, 예제에서는 "linger0310"을 준다.
  • Getter&Setter 작성.
  • @ConfigurationProperties 에 인자로 준 Key와 동일한 property 값들을
    .properties 파일에서 찾고, 그 값들을 해당 클래스의 필드들에 바인딩(전달)
    하는 역할의 클래스다.

Bean 등록 & 다른 Bean에 DI

위에서 만든 property 묶음 처리 클래스를 Bean으로 등록해서
다른 Bean에 주입하여 활용할 수 있다.

ex1. ApplicationRunner

  • ApplicationRunner : Application 실행 이후, 실행할 작업을 정의한다.
  • ex2 에서 생성한 property 묶음 처리 클래스의 객체를 DI(@AutoWired)를 통해 주입받고
    Getter 메소드들을 활용하여 각 property에 해당하는 필드에 값이 잘 바인딩(전달)
    되었는지 println()을 통해 Console 상에서 확인 해 본다.

ex2. Application

  • @EnableConfigurationProperties
    • 받을 수 있는 인자
      • .properties로부터 사용하고자 하는 property의 Key
      • .properties에서 연관된 Key들을 묶음 처리한 클래스
    • Application을 실행 시 springboot가 알아서 @EnableConfigurationProperties
      대한 작업을 처리 해주기 때문에 따로 이 어노테이션을 써 줄 필요는 없다.
      다만, 이러한 자동 처리 과정이 가능하기 위해서는
      • 인자로 받은 연관된 Key들을 묶음 처리한 클래스가 Bean으로 등록이 되어 있거나
      • 인자로 받은 Key에 해당하는 property가 참조 중인
        .properties 파일(ex. application.properties 등)에 존재해야한다.

ex3. Application 실행 결과

ex3. ApplicationRunner에서 구현한 작업들이 Console 상에 잘 출력 된 것을 볼 수 있다.

융통성 있는 바인딩

프로퍼티의 key name을 정의할 때 다음 방식들이 허용된다.

  • Kebab Case | hyphen
    • ex) linger.context-path
  • Snake Case | underscore(= underbar)
    • ex) linger.context_path
  • Camel Case | 두 번째 단어부터 대문자
    • ex) linger.contextPath
  • 모두 대문자
    • ex) linger.CONTEXTPATH

@DurationUnit

어떠한 시간 정보 프로퍼티를 정의하고 이 값을 받고자 할 때

시간 정보 프로퍼티 추가

ex2. 묶음처리 클래스에 코드 추가

ex3. ApplicationRunner 클래스에 코드 추가

ex4. Application 실행 결과

@DurationUnit 쓰지 않는 방법

시간 정보 프로퍼티 수정

묶음처리 클래스 수정

@Validated

프로퍼티 값을 검증할 수 있다.

  • NotEmpty
  • NotNull
  • etc

아래의 dependency가 요구된다.

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>

ex. NotEmpty 검증

name 프로퍼티에 대하여 NotEmpty 검증을 해보자.

ex1. 묶음처리 클래스에 코드 추가

클래스에 @Validated, name 필드에 @NotEmpty 어노테이션 추가.

ex2. 프로퍼티 변경

일부러 name 프로퍼티 값을 비워보자.

ex3. Application 실행 결과

아래와 같이 보기 쉽게 에러와 원인을 알려준다.

profile
올빼미를 사냥한 까마귀에서 진화한 독수리

0개의 댓글