[java] SnakeYAML을 사용하여 YAML 파일의 참조값 처리하기

YAML은 인간이 읽고 쓰기에 용이한 데이터 직렬화 형식입니다. 그러나 YAML 파일에는 동일한 값을 여러 번 중복해서 사용하는 경우가 있을 수 있습니다. 이런 경우에는 참조를 사용하여 중복을 피하고 메모리를 절약할 수 있습니다. 이번 포스트에서는 Java의 SnakeYAML 라이브러리를 사용하여 YAML 파일에서 참조값을 처리하는 방법에 대해 알아보겠습니다.

1. SnakeYAML 라이브러리 설치하기

SnakeYAML은 Maven 또는 Gradle을 사용하여 쉽게 프로젝트에 추가할 수 있습니다. 아래는 Maven을 사용하는 경우의 예시입니다.

<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>1.27</version>
</dependency>

2. YAML 파일 작성하기

먼저, YAML 파일에 참조를 사용하기 위해 $ref 키를 사용할 것입니다. 아래는 예시 YAML 파일입니다.

# settings.yml
database:
  host: localhost
  port: 3306
  username: admin
  password: password

server:
  url: http://example.com
  api_key: secret_key

service:
  url: $ref{server.url}
  admin_username: $ref{database.username}
  admin_password: $ref{database.password}

위의 YAML 파일에서는 service.url, service.admin_username, service.admin_password 값이 각각 $ref{}로 참조되어 있습니다.

3. SnakeYAML을 사용하여 YAML 파일 로드하기

Java 코드에서 SnakeYAML을 사용하여 YAML 파일을 로드하여 이를 처리할 수 있습니다.

import org.yaml.snakeyaml.Yaml;

public class YamlExample {
    public static void main(String[] args) {
        Yaml yaml = new Yaml();
        Map<String, Object> data = yaml.load(new FileReader("settings.yml"));

        String serviceUrl = (String) data.get("service").get("url");
        String adminUsername = (String) data.get("service").get("admin_username");
        String adminPassword = (String) data.get("service").get("admin_password");

        System.out.println("Service URL: " + serviceUrl);
        System.out.println("Admin Username: " + adminUsername);
        System.out.println("Admin Password: " + adminPassword);
    }
}

위의 코드는 SnakeYAML 라이브러리를 사용하여 YAML 파일을 로드하고, 참조된 값을 가져와서 출력하는 예제입니다.

4. 실행결과

위의 코드를 실행하면 다음과 같은 결과가 출력될 것입니다.

Service URL: http://example.com
Admin Username: admin
Admin Password: password

위의 결과에서 확인할 수 있듯이, SnakeYAML을 사용하여 YAML 파일에서 참조값을 처리할 수 있습니다. 이를 통해 중복을 피하고 더 효율적으로 YAML 파일을 관리할 수 있습니다.

참고 자료