Spring 을 사용하는 것보다, 순수 JAVA 를 이용하여 YAML 파일의 정보를 읽어오는 방법이 조금 더 복잡하다. 아래는 테스트에 사용한 yml 파일의 정보이다.

test.yml

key1: value1
key2: value2

절대 경로를 이용하여 읽어오기

코드가 직관적이고 간단하다는 장점이 있다. 하지만 파일 객체를 이용하여 yml 파일에 접근하므로 절대 경로를 이용하여 읽어와야 하며, 그렇기 때문에 유지보수 하기에 번거롭다. 절대 경로는 프로젝트 시작 지점을 기준으로 한다.

public class YmlReader {

    public void readAbsolutePath() {
        final Yaml yaml = new Yaml();
        try {
            final Object load = yaml.load(new FileReader("src/main/resources/test.yml"));
            System.out.println(load);
        } catch (FileNotFoundException e) {
            System.out.println(e.getMessage());
        }
    }
}

yml 파일을 읽기 위해 외부 라이브러리 Yaml 을 사용하였다.

Untitled

상대 경로를 이용하여 읽어오기

절대 경로 예제와 동일하게 외부 라이브러리 Yaml 을 이용하였다. 위의 방법과 다른 점은 절대 경로를 이용할 때는 모든 파일을 대상으로 일치하는 파일을 찾아왔지만, 상대 경로를 이용할 때는 설정 정보는 resources 폴더에 저장한다는 점을 이용한다. ClassLoader 를 이용하여 resources 폴더만 대상으로 하여 해당 위치에 있는 파일을 읽어온다. InputStream 의 형태로 읽어왔기 때문에 ObjectMapper 를 이용하여 객체로 변환해준다.

public class YmlReader {

    public void readRelativePath() {
        final Yaml yaml = new Yaml();

        final InputStream resource = ClassLoader.getSystemClassLoader().getResourceAsStream("test.yml");
        final YmlInfo ymlInfo = new ObjectMapper().convertValue(yaml.load(resource), YmlInfo.class);
        System.out.println(ymlInfo);
    }
}

Untitled