[강의 내용 정리] «스프링 부트 개념과 활용» - 스프링부트에서 application.properties 설정파일 사용법

현재 수강중인 백기선 님의 «스프링 부트 개념과 활용» 강의 내용을 정리하고 있습니다.

application.properties 설정 파일에 있는 값 활용하기

application.properties 설정 파일에 있는 값을 불러올 때, 종종 아래와 같이 @Value 어노테이션을 활용하여, 불러옵니다.

# application.properties 내 설정값
sample.value = Sample
@Value("sample.value")
private String sampleValue;

이번 강좌에서는 @Value 어노테이션을 활용하는 방법이 아닌, 관련 설정을 묶어서 bean으로 등록한 후에 활용하는 방안을 배웠습니다.

설정 파일에서 아래 3개의 설정값(user.name , user.age, user.fullName) 을 활용하려는 상황을 가정해봅시다.

# application.properties 내 설정값
user.name = Gildong
user.age = ${random.int(1,100)}
user.fullName = ${user.name} Hong

1단계: 위 설정 파일과 매핑될 클래스를 만들어줍니다.

@Component
@ConfigurationProperties("user")
public class UserProperties {

    private String name;

    private int age;

    private String fullName;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

@ConfigurationProperties에 사용하려는 설정들의 공통 prefix인 “user”를 명시합니다.

2단계: 위 설정을 사용하려는 곳에서 위 Bean으로 등록된 위 설정을 활용합니다.

@Component
public class PracticeApplicationRunner implements ApplicationRunner {

    @Autowired
    private UserProperties userProperties;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        System.out.println("==================");
        System.out.println(userProperties.getName());
        System.out.println("==================");
    }
}

관련 설정을 묶어서 bean으로 등록한 후, 활용 vs. @Value 어노테이션 활용

@Value 어노테이션을 사용하는 대신에, 위와 같이 관련 설정을 bean으로 등록하여, 사용 시, 아래와 같은 장점이 있습니다.

  • 융통성 있는 바인딩

    • 프로퍼티 값을 camel-case(예: fullName), kebab-case(예: full-name) 등등 다양한 형식으로 작성하더라도 융통성 있게 바인딩됩니다.
  • 프로퍼티 타입 컨버전

  • 프로퍼티 값 검증

    • @Validated 어노테이션을 사용하여, 아래와 같이 프로퍼티가 특정 조건에 부합하는지 검사할 수 있습니다.

      @Component
      @ConfigurationProperties("user")
      @Validated
      public class UserProperties {
          
          @NotEmpty
          private String name; // name 필드에 빈 값이 들어올 수 없음
            
        ...
              
      }
      

@Value 어노테이션 사용 시, SpEL을 적용할 수 있다는 장점이 있으나, 위에서 언급한 장점들을 활용할 수 없습니다.

따라서 이번 강의에서는 @Value 어노테이션보다는 위와 같이 관련 있는 설정들을 bean으로 등록하여, 사용하는 걸 권장하고 있습니다.

댓글남기기