[java] SnakeYAML을 사용하여 YAML 파일의 범위 처리하기

YAML (YAML Ain’t Markup Language)은 사람이 쉽게 읽고 작성할 수 있는 데이터 직렬화 형식입니다. SnakeYAML은 Java에서 YAML 파일을 처리하기 위한 라이브러리입니다. 이번 블로그 포스트에서는 SnakeYAML을 사용하여 YAML 파일의 범위 (scope)를 처리하는 방법을 알아보겠습니다.

1. SnakeYAML 라이브러리 설치

먼저 SnakeYAML 라이브러리를 사용하기 위해 프로젝트에 아래의 Maven 의존성을 추가해야 합니다.

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

Maven 이외의 빌드 도구를 사용하는 경우 해당 도구의 설정 파일에 SnakeYAML 라이브러리를 추가하십시오.

2. 범위 지정된 YAML 파일 작성

SnakeYAML을 사용하여 범위 지정된 YAML 파일을 작성하는 것부터 시작해 보겠습니다.

# config.yaml

default:
  server:
    port: 8080
    domain: localhost
  database:
    url: jdbc:mysql://localhost:3306/sample
    username: admin
    password: secret
  
development:
  server:
    port: 8081
  
production:
  server:
    domain: example.com
    database:
      url: jdbc:mysql://production-db:3306/sample
      username: prod_admin
      password: prod_secret

위의 예시는 config.yaml 파일로, default, development, production이라는 범위를 가지고 있습니다.

3. SnakeYAML을 사용하여 범위 지정된 YAML 파일 파싱

이제 SnakeYAML을 사용하여 config.yaml 파일을 파싱하여 범위 지정된 데이터에 액세스하는 방법을 알아보겠습니다.

import org.yaml.snakeyaml.Yaml;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Map;

public class ConfigReader {

    public static void main(String[] args) {
        try {
            Yaml yaml = new Yaml();
            FileInputStream inputStream = new FileInputStream("config.yaml");
            Map<String, Object> data = yaml.load(inputStream);

            // default 범위
            Map<String, Object> defaultConfig = (Map<String, Object>) data.get("default");
            System.out.println("Server Port: " + defaultConfig.get("server.port"));
            
            // production 범위
            Map<String, Object> productionConfig = (Map<String, Object>) data.get("production");
            System.out.println("Database URL: " + productionConfig.get("database.url"));
            System.out.println("Username: " + productionConfig.get("database.username"));

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

위의 예시 코드에서는 config.yaml 파일을 읽어와 default 범위와 production 범위에 속하는 데이터에 접근합니다. SnakeYAML은 YAML 파일을 Map 형식으로 파싱하므로 캐스팅이 필요합니다.

결론

SnakeYAML을 사용하면 범위 지정된 YAML 파일의 데이터를 손쉽게 읽을 수 있습니다. 위에서 소개한 예시 코드를 기반으로 다양한 YAML 파일을 파싱하는 로직을 구현해보시기 바랍니다.


참고 자료: