SnakeYAML을 통해 YAML을 클래스와 매핑하기

Spring Boot는 설정파일로 .properties 파일을 사용하지만 확장자를 변경해서 .yml 파일도 사용할 수 있다.

또한 @EnableConfigurationProperties을 통해 설정파일의 key, value를 클래스 프로퍼티로 매핑할 수 도 있다.

이러한 YAML 파일을 사용해서 편리한 기능을 사용할 수 있는 것은 Spring Boot의 특징인 자동 설정 덕분이다.

그러면 어떤 라이브러리를 기본으로 사용하기 때문에 가능한 것일까?

그것은 바로 SnakeYAML이다.

그럼 SnakeYAML을 사용해서 YAML의 값을 클래스 프로퍼티로 매핑해보자.

classpath에 다음과 같이 test.yml 파일을 생성하자.

1
2
3
4
5
user:
name: devson
age: 20

test: This is test string for snake yaml

위 test.yml을 매핑하기 위한 YamlTest클래스를 생성하자.

1
2
3
4
5
6
7
8
9
10
11
@Data
public class YamlTest {
private User user;
private String test;

@Data
public static class User {
private String name;
private int age;
}
}

예제 코드는 간단하게 하기위해 lombok을 사용하였는데 프로퍼티에 public getter/setter가 있어야 해당 프로퍼티를 매핑할 수가 있다.

이제 SnakeYAML library를 사용해서 YamlTest 클래스와 test.yml을 매핑 해보자

1
2
3
4
5
6
public static void main(String[] args) throws IOException {
Yaml yaml = new Yaml(new Constructor(YamlTest.class));
YamlTest test = yaml.load(new ClassPathResource("test.yml").getInputStream());

System.out.println(test); // YamlTest(user=YamlTest.User(name=devson, age=20), test=This is test string for snake yaml)
}

간단한 사용법은 위와 같고 더 자세한 사용법은 document를 참고하자.

Share