본문 바로가기

오픈소스/노드

[Node] INI 라이브러리를 통한 환경설정 파일 구현 - ini Parser -

 본 문서는 INI 라이브러리 ini 을 모듈화 하여 프로젝트와 의존하지 않은 코드를 작성하였습니다. 프로젝트의 오류와 반영된 코드 및 결과 값들을 파악하여 동작을 이해할 때 사용하기도 합니다. ini Parser를 사용하게 되면 환경설정 파일을 외부로 반출 시킬수 있기 때문에 환경설정 파일과 코드와의 의존성이 약해져서 더욱 좋은 코드가 작성될 수 있다는 점입니다. 환경설정을 변경하기 위해 코드를 고치는 것 보다 간단하게 ini 환경설정 파일을 고치는 것이 유용하다고 판단됩니다.

 

 그러면 아래 예제를 통해 시작해보도록 하죠.

 

 

# Contents


  • ini Install
  • 예제 코드

 

 

# ini Install


 해당 라이브러리를 이용하기 위해 우리는 2개의 라이브러리를 설치할 예정입니다.

 

  • ini : ini로 구성된 파일의 저장 및 로드를 도와주는 실질적인 라이브러리 입니다. 
  • object-path : Object인 객체의 Key 를 이용하여 Value를 불러오거나 저장시키는 라이브러리입니다.

설치 방법은 아래와 같습니다.

 

npm install --save ini
npm install --save object-path

 

# 예제 코드


 ini 설치가 완료되었으면 아래 정리된 모듈을 복붙해주세요. 해당 모듈을 사용하게 되면 어떠한 의존성 없이 로그를 출력 및 저장할 수 있으며, 사용법도 아주 간단합니다. 

 

 저는 로그 모듈 파일을 config.js로 만들었습니다. 그리고 아래 내용을 복붙하였습니다.

 

const ini = require("ini");
const objectPath = require("object-path");
const fs = require("fs").promises;

class Config {
    constructor(filePath) {
        this.data = {};
        this.filePath = filePath;
    }

    get(configPath) {
        return objectPath.get(this.data, configPath);
    }

    set(configPath, value) {
        objectPath.set(this.data, configPath, value);
    }

    async load() {
        this.data = ini.decode(await fs.readFile(this.filePath, "utf8"));
    }

    async save() {
        await fs.writeFile(this.filePath, ini.decode(this.data));
    }
}

module.exports = Config;

 

 실질적인 사용은 아래와 같습니다. Config 생성자를 만들 때 ini 파일을 로드함으로써 파일의 값을 읽어와 객체로 변환시켜줍니다. 그 객체를 통해 값을 읽어오거나 값을 넣는 작업을 할 수 있습니다.

 

const Config = require("./config");

async function main() {
    var config = new Config("./conf/server.ini");
    await config.load();
    console.log(config.get("mysql.host"));
}

main();