외부 설정 #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개의 댓글

관련 채용 정보