[데브코스] Resources 폴더 설정

Updated: Categories:

W3D4 - application.properties / YAML / Resource에 대해 공부해보자

Properties

  • Spring 생성시 자동생성되며, resources 폴더 하위에 있음
  • DB 접속정보나 포트정보 등등을 정의하는 것
  • 보통 환경변수로 지정하고 싶은 것을 써놓는 듯?

사용법

  • application.properties파일에 변수명=값 형태로 저장한다.
  • 변수 사용시 AppContext에 @PropertySource("application.properties") 어노테이션을 달아준 후 컨테이너 생성하면됨.
  • 컴포넌트 내에서 @Value() 어노테이션을 사용해 프로퍼티(환경변수) 값을 가져올 수 있다.
    • 시스템 환경변수도 가져올 수 있다.
    • 만약 프로퍼티 등록 키값과 시스템 키값이 동일하다면, 시스템이 우선순위가 더 높음.

Provider

  • 컴포넌트에 특정 .properties파일을 연결하여 Value를 제공하는 Provider 클래스를 만들기도 한다.
// 예시
@Component
@PropertySource("version.properties")
public class VersionProvider {
    private final String version;

    public VersionProvider(@Value("${version:v0.0.0}") String version) {
        this.version = version;
    }
    public String getVersion() {
        return version;
    }
}


YAML

  • 어디선가 많이 본 녀석이다.
  • Spring의 기본 프로퍼티 확장자는 .properties이고 다른 확장자는 지원 X (Boot에서는 지원함)
  • 따라서 .yaml으로 작성된 파일을 프로퍼티로 읽어오기 위해선 PropertySource Factory를 구현해야한다

@ConfigurationProperties

  • 리스트 바인딩을 위해선 스프링’부트’에서 제공하는 @ConfigurationProperties를 사용해야함
  • 바인딩용 클래스에 해당 어노테이션을 달고 Prefix를 지정하여 해당 프리픽스 하위 데이터를 바인딩함.
  • 해당 클래스에는 Getter와 Setter가 필수적으로 존재해야함.
  • 프로퍼티가 적을땐 @Value로 바인딩해도 되지만, 많아지면 일일히 하기 힘드니까 이런 방법을 씀!!

@Profile

  • AppContext 생성시 .setAdditionalProfiles() 메소드를 통해 Bean을 선택해 생성이 가능하다
  • 컴포넌트 파일 위에 @Profile() 어노테이션을 달아 구분한다

프로필별 환경변수 분리

  1. spring.config.activate.on-profile을 활용해 프로필별 환경변수를 설정할 수 있다.
  2. yaml 파일을 분리해서 프로필별 변수 설정도 가능
    • application.yaml이 default 파일임
    • application-프로필명.yaml 네이밍 규칙을 따라 프로필명 설정가능


Resource

  • 스프링에서 제공하는 AppContext에 자원을 가져올 수 있는 기능
  • .getResource() 메소드로 리소스를 읽어올 수 있다
    • resources 폴더 내 : .getResource(파일명)
    • resources 폴더 외부 : .getResource(file:경로) (root는 프로젝트 폴더경로임)
    • URL : .getResource(URL주소)