INI 이란?

INI 파일에 대해 알아보고 javascript로 활용하기


들어가며

현재 진행 중인 프로젝트에서 INI 파일을 읽어 개발을 해야 하는 작업이었습니다. 저는 INI란 포맷 낯설었는데 거기에 여러 가지 검색 결과를 읽어보았을 때 javscript로 정리된 글을 찾기 어려워 이 달의 포스팅 주제로 정하였습니다.

INI 파일이란

프로그램에 설정과 실행에 대한 정보를 저장하는데 사용하는 텍스트 파일입니다. (저는 처음 접해보았지만) 설정 파일에 대한 사실상 표준이라고 합니다. 확장자는 .ini이만 텍스트 파일이기 때문에 .txt 확장자도 사용할 수 있습니다.

형식

; 주석

; 기본
[section]
key = value


; 예제
; 20221월 포스팅 관련
[pxd]
mean = People eXperience Design
number =100명
location = 서울시 강남구 신사동

[XEGroup]
mean = UX Engineer
number = 14

INI 파일은 section 안keyvalue로 표현합니다.
section은 정보의 구분점이고 대괄호([ ])안에 사용해야합니다.
key와 value는 등호(=)로 나누어집니다.

javscirpt로 INI 파일 읽어오기

INI 파일을 읽어오는 방법에 대해 검색을 했을 때 결과의 대부분은 back-end 개발 언어였습니다. 검색 결과를 보면서 ‘javascirpt로 INI 파일을 읽는 것이 생소하긴 하구나’라는 느낌을 받았는데 다시 javscript로 검색어를 추가해서 보니 아래와 같은 베이스 코드를 중복적으로 찾을 수 있었습니다.
이 코드를 활용하여 상위 INI 파일의 2번째 section인 XEGroup의 mean의 값을 알아보려고 합니다.

// INI 파일 변환
function parseIni(data) {
  const regex = {
    section: /^\s*\[\s*([^\]]*)\s*\]\s*$/,
    param: /^\s*([^=]+?)\s*=\s*(.*?)\s*$/,
    comment: /^\s*;.*$/,
  };
  const obj = {};
  const lines = data.split(/[\r\n]+/);
  let section = null;

  lines.forEach((line) => {
    if (regex.comment.test(line)) {
      return;
    }

    if (regex.param.test(line)) {
      // INI 파일의 key, value 값
      const match = line.match(regex.param);
      const value = match[2];
      if (section) {
        obj[section][match[1]] = value;
      } else {
        obj[match[1]] = value;
      }
    } else if (regex.section.test(line)) {
      // INI 파일의 section 구분
      const match = line.match(regex.section);
      obj[match[1]] = {};
    } else if (line.length === 0 && section) {
      section = null;
    }
  });
  return obj;
}

함수 parseIni()은 INI 파일을 변환하는데, 정규식을 활용하여 문자열을 읽고 그 내용을 반환하는 코드입니다. 시간이 되신다면 .test().match() 메서드도 읽어보시면 좋을 것 같습니다.

import fs from 'fs';

// ini 파일 읽어오기
function parseIniString() {
  let returnValue;

  try {
    // 파일 경로
    const data = fs.readFileSync(`C:\\App\\pxd.ini`, `UTF8`);
    const XEGroupIni = parseIni(data);
    const XEGroupMean = XEGroupIni.mean;
    returnValue = XEGroupMean; // returnValue = UX Engineer
  } catch (error) {
    returnValue = '';
  }
  return returnValue;
}

파일을 읽기 위해 node.js의 fs(FileSystem) 모듈이 설치되어 있어야 합니다. fs는 node.js의 표준모듈이므로 node.js가 설치되어 있으면 별도의 설치는 필요하지 않습니다.
fs.readFileSync(동기식 파일읽기)로 INI 파일을 읽은 후 parseIni() 함수의 매개변수로 넣으면 반환된 key와 value를 확인할 수 있습니다. 저는 key) mean을 선택하여 value) UX Engineer을 확인하였습니다.

마치며

여러 기술 팁이 있는 작업은 아니지만 추후 INI 파일로 개발을 하게 될 때 이 글이 도움이 되었으면 합니다.

고맙습니다. - 끄읕 -

참고문서


추천 글