1. 개요
소프트웨어를 설정하기 위한 독립된 파일을 뜻한다. 주로 사용자가 직접 읽거나 편집할 수 있도록 텍스트 파일을 사용하며, 어플리케이션(응용 소프트웨어)의 중간 상태를 저장하는 데이터 파일과는 구분된다.2. 상세
3. 종류
3.1. 운영체제의 설정
3.1.1. UNIX-like
유닉스 시스템에서는 기본적으로/etc
하위에 각종 시스템 소프트웨어들의 설정 파일을 저장한다. 모듈화가 잘 되어있는 유닉스 특성상 여러 분야에서 (오픈소스로) 개발된 각 소프트웨어들이 각자만의 포맷을 가지고 있는 경우가 많지만, 가장 많이 쓰이는 포맷은 .conf
이다.또한
/etc/fstab
[1], /etc/passwd
[2], /etc/sudoers
[3] 별도의 문법을 가지는 각 파일 포맷은 man page의 (5)번 항목에 별도로 문서가 마련되어 있다.유닉스 소프트웨어 설정파일의 전반적인 특징은 다음과 같다:
- 주석을 지원한다. 주로
#
을 사용하며, 이를 사용해 각 설정에 대한 설명을 담거나[4] 설정을 일시적으로 비활성화할 수 있다. - Key-Value형식이며, 중괄호 등 그룹핑을 사용하지 않는다. 만약 별도의 네임스페이스가 필요하다면 INI처럼
[]
를 사용하는 경우가 많다. ~rc
(runcom의 약자)로 끝나는 경우가 많다. 이 때문인지 흔히 rcfiles라고도 불린다.
macOS의 경우 유닉스식 설정과는 다르게 .plist를 사용한다.
3.1.2. Microsoft Windows
MS DOS시절에는 ini식 설정파일을 사용했지만, Windows NT부터는 레지스트리를 사용해서 전체 어플리케이션 트리의 설정을 일관적인 데이터베이스로 관리한다. 따라서 윈도우용 어플리케이션의 경우 설정파일이 없거나 외부로 노출되지 않는 경우가 많고, 개발자 도구나 시스템 툴 정도만 텍스트 설정파일을 제공하는 경우가 많다.3.2. 어플리케이션의 설정
3.2.1. UNIX-like
~
(홈 디렉토리) 아래에 .
으로 시작하는 파일들(dotfiles)을 둔다. 현대 XDG표준으로는 ~/.config
폴더를 사용한다.4. 설정 파일 포맷
모든 애플리케이션은 독자적인 설정 파일을 쓸 수 있지만, 그렇게 된다면 사용자가 쉽게 설정하고 편집할 수 있어야 한다는 원래의 목적이 퇴색된다. 따라서 데이터 직렬화 형식에서 사용되는 포맷들을 사용하는 곳도 늘어났지만, 설정파일의 특성상 기계가 파싱하는 것뿐만 아니라 사람도 읽기 쉬워야 하기 때문에 YAML등의 human-readable컨셉의 파일들이 널리 채택되었다.- INI - 윈도우를 비롯한 여러 소프트웨어에서 시스템 설정파일의 사실상 표준. 간단한 K-V형식이며, 일관된 표준이 존재하지 않고 애플리케이션별로 나름의 독자적 구조를 가지고 있어 그 종류도 다양하다.
- conf - UNIX시스템 설정파일의 사실상 표준. ini와 문법이 비슷하다.
- YAML - JSON의 superset으로 동작하는 설정파일 포맷. json이 주로 js어플리케이션이나 데이터 전송(AJAX 등), 데이터나 상태 기록(LottieFiles, 아스키네마 등)에 자주 쓰인다면, 설정파일로 쓰기에는 너무 단순한 문법 때문에 금세 verbose해지고 괄호와 ""이 너무 많아지며, trailling comma가 지원되지 않는다는 등의 단점이 있다. 따라서 이러한 json의 단점을 보완하고자 만들어진 yaml이 설정파일 분야에서는 강세를 보인다.
- TOML - Rust 생태계에서 자주 쓰이지만 개발자 도구와 관련이 없는 곳에서는 거의 쓰이지 않는다. ini-inspired 형식 중 하나이지만, 명확하게 표준화 되어있다는 장점이 있다.
- XML - Inkscape같은 툴에서 사용한다. 이유는 그야 SVG가 xml기반이니 이미 파서가 내장되어 있어서이다.
- JSON - 자주 쓰이지는 않고 개발자 툴/도구용 소프트웨어에서 주로 쓰인다. 대표적인 예시가
setting.json
을 사용하는 vscode.