spring boot에는 yaml(야물?)을 사용할 수 있다.
json 과 비슷한 형태로 편리한 문법을 갖고 있다.
우리는 classpath 에 application.yml 을 추가 하면 자동으로 boot가 스캔한다.

test:
  db: localdb

우리는 다음과 같이 설정한다.
해당 클래스에 바인딩을 하자.

@Configuration
@ConfigurationProperties(prefix = "test")
public class ServerProfiles {

    private String db;

    public String getDb() {
        return db;
    }

    public void setDb(String db) {
        this.db = db;
    }
}

그리고 나서 테스트를 해보자

@Autowired
private ServerProfiles serverProfiles;

@Test
public void yamlTest(){
    System.out.println(serverProfiles.getDb());
}

localdb라는문자가 출력 된다.
우리는 쉬운방법으로 yaml을 사용할 수 있다.
그리고 또한 application.yml 말고 다른 파일을 불러오고 싶다면 다음과 같이 하면 된다.
예를들어 server.yml에 해당 설정이 있다고 가정하자.
우리는 이렇게 할 수 있다.

@Configuration
@ConfigurationProperties(locations = "classpath:server.yml", prefix = "test")
public class ServerProfiles {

    private String db;

    public String getDb() {
        return db;
    }

    public void setDb(String db) {
        this.db = db;
    }
}

근데 조금 이상한게 있다. setter로 값을 넣는다.
불변 객체가 아니다. 정보를 언제든지 바꿀수 있다는건데..
Map이나 List경우에는 setter가 필요 없는데

@Configuration
@ConfigurationProperties(locations = "classpath:server.yml")
public class ServerProfiles {

    Map<String,String> test = new HashMap<>();

    public Map<String, String> getTest() {
        return test;
    }
}

암튼 그렇다.

우리는 실제 개발을 할때 로컬 테스트 개발 운영 등 여러 서버에 적용 하고 있다.
이럴경우 다음과 같이 설정 하자

test:
  db: localdb
---
spring:
    profiles: development

test:
  db: testdb
---
spring:
    profiles: production
test:
  db: prodb

mvn으로 실행 하거나 jar파일을 실행 할때 다음과 같이 옵션을 주면된다.

java -Dspring.profiles.active="production" -jar spring-test-0.0.1-SNAPSHOT.jar
mvn spring-boot:run -Dspring.profiles.active="production"

우리는 이렇게 yaml파일을 사용할 수 있다.

yaml 파일의 단점은 @PropertySource 어노테이션으로 불러 올 수 없다.
해당 어노테이션을 사용 하려면 프로퍼티 파일을 사용해야된다.