본문 바로가기

자바

스프링은 어떻게 property를 관리할까

외부 설정 파일이란 처음 spring boot를 실행하면 src/main/resources에 있는 application.properties와 같이

여러가지 설정 값들을 애플리케이션의 밖이나 안에 정의 할 수 있는 기능을 말한다.

 

propertie를 사용하는 이유 :

배포하고나서 설정을 변경할 때 용이하기 때문이라고 생각한다.

키-값 구조로 정의된 값들을 소스코드에서 불러다 치환하면 되기 때문에 소스코드를 수정하지 않아도 되고

배포되고나서 고쳐야할 경우 서버에 접속해서 properties 파일만 수정하면 되기 때문에 편리하다.

 

 

스프링은 src/main/resources에 들어가 있는 설정파일(yml, properties)을 자동으로 감지한다. 따라서 이 파일들을 사용하기 위해 

PropertySource를 명시적으로 등록하거나, 속성 파일에 대한 경로를 제공할 필요가 없다.

application.yaml은 스프링이 시작할 때 자동으로 읽는다!

그런데 항상 src/main/resources에 있는 application.properties에 모든 설정(데이터 소스, 계정 정보 등)을 넣을 수 없다. 그래서 이러한 기타 설정 파일을 따로 분리하는 경우가 많다. 그렇게 되면 이 외부 설정 파일들은 자동으로 읽지 않기 때문에 따로 

직접적인 경로를 지정해서 사용해야 한다.

 

 @PropertySource  어노테이션을 사용하면 사용이 가능하다.

// user-info.properties 
// 현재 application.properties와 같은 디렉토리에 있음
user.name = easydong
user.age = 23
user.url = https://dongcoding.tistory


// UserInfoController
@RestController
@PropertySource("classpath:user-info.properties")
public class UserInfoController {
    @Value("${user.name}")
    private String name;
    @Value("${user.age}")
    private String age;
    @Value("${user.url}")
    private String url;

    @GetMapping("/userinfo")
    public String userinfo(){
        String userinfo = "이름 : " + name + "나이 : " + age + "주소 : " + url;
        return userinfo;
    }
}

주의할 점은 @Value로 propertie 값들을 불러올려면 @Component 로 등록해서 스프링에서 빈으로 관리되게 해줘야 한다는 것이다.

(@RestController는 내부적으로 @Component가 등록되어 있기 때문에 위 예제에는 @Component를 쓰지 않았다)

 

스프링 컨테이너 내부에서 모든 빈들을 등록할 때 @Value(${내가 가져온 값}) 안의 내용에 맞는 값을

외부 설정 파일(.properties, .yaml)에서 찾아서 넣어준다. 만약 빈으로 등록하지 않았다면

@Value(${내가 가져온 값})에 맞는 값을 넣는 과정이 실행되지 않으므로 @Value 가 동작하지 않는다.

 

 

참고한 자료

반응형

'자바' 카테고리의 다른 글

테스트 코드 작성 요령  (0) 2022.08.29
제네릭(generic)  (0) 2022.08.26
스프링 부트 프로파일(profile)설정  (0) 2022.08.19
다형성(polymorphism)  (0) 2022.06.24
접근제어자(Access Modifier)정리  (0) 2022.06.23