구성 파일의 활용은 다양한 운영 설정과 최종 사용자 선호도에 맞게 소프트웨어 기능을 조정할 수 있기 때문에 소프트웨어 개발 및 시스템 관리에서 매우 중요한 측면입니다. 널리 사용되는 구성 파일 형식의 몇 가지 예로는 YAML과 TOML이 있습니다.

TOML은 보다 논리적이고 간단한 솔루션을 제시함으로써 다른 형식의 부적합성을 해결하는 복잡하지 않은 구문으로 인해 다양한 구성 파일 형식 중에서 저명하고 접근성이 뛰어난 선택입니다.

TOML 파일 이해

TOML 파일 형식은 간단하면서도 효과적인 키-값 쌍 시스템을 활용하여 조직화된 정보를 쉽게 이해할 수 있는 방식으로 표시하도록 설계되었습니다. 이 구조 내의 각 키는 해당 옵션의 특정 매개변수를 정의하는 해당 값이 할당된 옵션을 구성하기 위한 참조 역할을 합니다.

TOML 파일 형식은 명확성을 강조하는 간단한 지침 어휘를 사용하므로 사람과 계산 장치 모두 이해할 수 있습니다. TOML의 주목할 만한 특징은 문자열, 정수, 부동 소수점 숫자, 부울 값, 배열 및 해시를 포함하는 다목적 데이터 유형 범위입니다.

TOML의 적응성을 통해 복잡한 설정을 간단하게 표현할 수 있어 광범위한 사용 사례를 처리할 수 있습니다. 방대한 기능 및 성능으로 인해 TOML은 다양한 애플리케이션을 구성하는 데 적합한 옵션입니다.

Toml 파일은 테이블, 키-값 페어링 및 배열을 활용하는 직관적인 아키텍처 형식을 준수합니다. 이러한 구조는 복잡한 구성 설정을 명확하고 논리적으로 정리하여 보여줍니다.

TOML은 구문 내에서 인라인 및 여러 줄 주석을 모두 허용하므로 사용자가 구성 파일에 대한 철저한 문서화 및 주석을 제공할 수 있습니다. 공백을 무시하는 것은 명확성을 유지하고 불필요한 정보를 최소화하기 위해 수행됩니다.

TOML(Tom’s Obvious, Minimal Language)은 모든 값에 엄격한 데이터 유형을 사용하는 마크업 언어입니다. 이러한 유형은 텍스트 문자열부터 정수, 부동 소수점 숫자, 부울 값, 날짜/시간 스탬프와 같은 숫자 값에 이르기까지 다양합니다. TOML에서 강력한 타이핑을 사용하면 사용 중인 데이터의 정확성을 보장하여 처리 단계에서 오류를 방지할 수 있다는 이점이 있습니다.

TOML은 중첩 구조 구성을 지원하여 테이블 내에 테이블을 중첩할 수 있으므로 구성에서 계층 구조를 더 쉽게 나타낼 수 있습니다. 이는 여러 차원을 고려해야 하는 상황이나 복잡한 애플리케이션을 설정할 때 특히 유용합니다.

TOML은 배열 및 인라인 테이블 형식을 모두 지원하여 중복되거나 간결한 데이터를 표현할 수 있는 다양한 기능을 제공합니다.

이 글도 확인해 보세요:  Vite로 React 앱을 설정하는 방법

TOML 언어는 문법 구조와 구성을 규율하는 일련의 지침과 전통을 준수합니다. 이 프레임워크는 구성 정보를 표시하기 위해 공백 및 키-값 쌍의 활용을 기반으로 합니다.

TOML 형식의 기본 구성 파일 데모는 다음과 같습니다:

 [server]
port = 8080
host = "localhost"
debug = false

[database]
name = "mydatabase"
username = "admin"
password = "secretpassword"

본 문서에는 특정 구성 대안에 대한 키-값 쌍 표현을 포함하는 두 개의 세그먼트가 포함되어 있습니다. 이 경우 “[서버]” 섹션 내의 “포트” 키는 “[서버]” 섹션 내의 “호스트” 키에 할당된 포트 번호를 나타내며, 이는 서버의 호스트 이름에 해당합니다.

Rust에서 Toml 파일로 작업하기

안전, 효율성 및 사용 편의성을 강조하는 것으로 유명한 프로그래밍 언어인 Rust는 언어의 원칙에 따른 고유한 호환성 때문에 구성을 저장하는 기본 방법으로 Toml 파일을 선택했습니다.

새 패키지 관리자의 직렬화 형식으로 TOML을 선택한 데에는 몇 가지 중요한 고려 사항이 영향을 미쳤습니다. 그중에서도 가장 중요한 것은 TOML이 명확성과 확장성의 이상적인 조합을 제공한다는 사실이었습니다. 또한 TOML의 깔끔한 아키텍처는 불필요한 복잡성을 제거하여 소프트웨어 개발에 대한 Rust의 원칙적인 접근 방식에 부합합니다.

Rust 에코시스템 내에서 TOML 파일 조작을 용이하게 하는 여러 타사 상자를 사용할 수 있으며, 이 중 toml 상자가 특히 널리 사용되고 있습니다.

toml 크레이트는 TOML 데이터를 구문 분석, 조작 및 직렬화하기 위한 목적으로 매우 유용한 도구로, Rust 애플리케이션 내에서 구성 파일 및 구조화된 데이터를 관리하는 프로세스에서 기본 구성 요소 역할을 합니다.

Rust에서 타사 패키지를 활용하려면 먼저 Cargo를 사용하여 Rust 프로젝트를 설정해야 하며, 그 후 프로젝트의 Cargo.toml 파일의 의존성 세그먼트에 아래에 지정된 지시문을 포함시켜 Rust 기반 사업 내에서 toml 패키지의 설치 및 적용을 용이하게 할 수 있습니다:

 [dependencies]
toml = "0.5"

톰엘 데이터를 효율적으로 직렬화 및 역직렬화하기 위해서는 “serde” 크레이트의 서비스를 활용해야 합니다. “toml” 크레이트는 데이터 조작을 위해 “serde”와 원활하게 통합됩니다.

 [dependencies]
serde = { version = "1.0", features = ["derive"] }
toml = "0.5"

`toml` 및 `serde` 상자를 필요한 구성 요소로 통합한 후, Rust 코드베이스 내에 이러한 라이브러리를 도입하고 통합하여 해당 기능을 활용할 수 있습니다.

 use toml;

Toml은 Toml 파일을 효율적으로 읽고, 쓰고, 구문 분석할 수 있는 다용도 라이브러리입니다.

이 글도 확인해 보세요:  내부에서 REST API 호출을 수행하는 방법 VS 코드

Rust로 TOML 파일 읽기

Toml 크레이트를 프로젝트 요구 사항으로 통합하고 가져오기를 통해 프로젝트에 도입하면 Rust 애플리케이션을 활용하여 TOML 아카이브를 열람할 수 있습니다.

빌더 패턴을 사용하여 Toml 파일에 저장된 데이터에 액세스하고 조작하려면 먼저 내장된 `fs` 크레이트의 `File` 구조를 활용하여 해당 파일을 열 수 있습니다.

 use std::fs::File;
use std::io::Read;

fn main() {
    let mut file = File::open("config.toml").expect("Failed to open file");
    let mut contents = String::new();
    file.read_to_string(&mut contents)
        .expect("Failed to read file");

    // At this point, `contents` contains the content of the TOML file
    println!("{}", contents);
}

`main` 함수는 `File::open` 메서드를 사용하여 `cargo.toml` 파일 열기를 시작하고, 이후 `read_to_string` 프로시저를 통해 파일의 내용을 문자열로 로드합니다. 그런 다음 `println!` 매크로를 사용하여 해당 문자열의 내용을 콘솔 인터페이스에 인쇄합니다.

TOML 파일의 내용을 아스트링으로 읽는 것은 유용하지만, 대부분의 상황에서는 정보를 보다 체계적인 형식으로 로드하는 것이 바람직합니다. Rust 언어를 사용하면 TOML 파일의 데이터 구조를 나타내는 구조 유형을 설정할 수 있습니다. 현재 톰엘 크레이트를 사용하여 톰엘 데이터를 이러한 구조로 자동 역직렬화할 수 있습니다.

프로젝트의 Cargo.toml 파일에 포함된 세부 정보를 열람하려면 다음 절차를 활용할 수 있습니다:

 use serde::Deserialize;
use std::fs;

#[derive(Debug, Deserialize)]
struct CargoToml {
    #[allow(dead_code)] // Disable dead code warning for the entire struct
    package: Package,
    #[allow(dead_code)]
    dependencies: Dependencies,
}

#[derive(Debug, Deserialize)]
struct Package {
    #[allow(dead_code)]
    name: String,
    #[allow(dead_code)]
    version: String,
    #[allow(dead_code)]
    edition: String,
}

#[derive(Debug, Deserialize)]
struct Dependencies {
    #[allow(dead_code)]
    serde: SerdeDependency,
    #[allow(dead_code)]
    toml: String,
}

#[derive(Debug, Deserialize)]
struct SerdeDependency {
    #[allow(dead_code)]
    version: String,
    #[allow(dead_code)]
    features: Vec<String>,
}

fn main() {
    let toml_str = fs::read_to_string("Cargo.toml").expect("Failed to read Cargo.toml file");

    let cargo_toml: CargoToml = toml::from_str(&toml_str).expect("Failed to deserialize Cargo.toml");

    println!("{:#?}", cargo_toml);
}

앞서 언급한 엔티티는 CargoToml, 패키지, 의존성 및 SerdeDependency 구조로 지정되며, TOML 파일의 아키텍처를 구성합니다. 이러한 구조에는 이러한 구조의 비활성화에 대한 경고 메시지를 억제하는 역할을 하는 #[allow(dead\_code)] 속성이 추가되었습니다.

주요 함수의 주요 목적은 toml 패키지의 from\_str 기능을 활용하여 toml\_str 변수를 통해 “Cargo.toml” 파일에서 데이터를 추출한 다음, 앞서 언급한 TOML 문자열에 포함된 정보를 역직렬화하여 cargo\_toml 변수에 저장하는 것입니다.

이 글도 확인해 보세요:  JES에서 사운드를 임포트하고 재생하는 방법

1차 연산을 실행하여 얻은 결과는 다음과 같습니다:

Rust로 TOML 파일에 데이터 쓰기

쓰기 데이터를 Toml 형식으로 변환하는 것은 프로그래밍 애플리케이션을 통해 구성 파일을 생성하는 효율적인 방법입니다.

구조체를 TOML 형식으로 변환하려면 다음 단계를 따르세요: 1.먼저, `tomlp` 또는 `tomlp-go`를 실행하여 tomlp 패키지를 가져옵니다. 2. 다음으로 tomlp 패키지에서 제공하는 New() 함수를 사용하여 직렬화하려는 Struct 타입의 인스턴스를 생성합니다. 3. 구조체의 인스턴스를 생성한 후 MarshalTOML() 함수를 사용하여 TOML 형식으로 마샬링합니다. 그러면 직렬화된 데이터가 포함된 문자열이 반환됩니다. 4. 마지막으로 프로젝트의 루트 디렉터리에서 확장자가 a.toml인 새 파일(예: “config.toml”)을 엽니다. 3단계에서 직렬화된 데이터를 이 파일에 쓰고 일반 텍스트로 저장합니다. 이 간단한 단계를 수행하면

 use std::fs::File;
use std::io::Write;
use serde::Serialize;
use toml::to_string;

#[derive(Serialize)]
struct ServerConfig {
    host: String,
    port: u16,
    timeout: u32,
}

fn write_config_to_file(config: &ServerConfig, file_path: &str) -> Result<(), Box<dyn std::error::Error>> {
    let toml_string = to_string(config)?;
    let mut file = File::create(file_path)?;
    file.write_all(toml_string.as_bytes())?;
    Ok(())
}

fn main() {
    let config = ServerConfig {
        host: "localhost".to_owned(),
        port: 8000,
        timeout: 30,
    };

    if let Err(e) = write_config_to_file(&config, "config.toml") {
        eprintln!("Error: {}", e);
    } else {
        println!("Config file created successfully.");
    }
}

write\_config\_to\_file 함수의 목적은 지정된 디렉터리에 ServerConfig 구조체의 인스턴스로 저장된 구성 세부 정보가 포함된 “config.toml”이라는 파일을 생성하는 것입니다. 이 함수는 구조체 인스턴스의 내용을 문자열 형식으로 변환하고, 읽을 수 있도록 형식 지정 명령을 추가한 다음, 형식이 지정된 toml 문자열을 지정된 파일에 저장하여 이 작업을 수행합니다.

주요 함수의 주요 임무는 ServerConfig 구조체 인스턴스를 인스턴스화하고, 그 내용을 파일에 기록할 목적으로 write\_config\_to\_file 메서드에 전달한 다음, 이 프로세스의 결과를 나타내는 보고서를 콘솔에 출력하는 것입니다.

Cargo는 종속성 관리를 위해 TOML 파일을 사용합니다.

TOML 파일의 활용은 Rust 프로그래밍 언어에서 종속성 관리자 및 빌더로서 Cargo의 기능에 필수적입니다.

Cargo를 매개로 새로운 Rust 작업을 시작하면 프로젝트의 기본 유전자좌 내에 Cargo.toml 파일이 생성되어 해당 작업의 사양 아카이브 역할을 합니다. 이 문서에는 프로젝트의 메타데이터, 요구 사항, 구성 구성 및 다양한 기본 설정에 관한 세부 정보가 기록되어 있습니다.

By 최은지

윈도우(Windows)와 웹 서비스에 대한 전문 지식을 갖춘 노련한 UX 디자이너인 최은지님은 효율적이고 매력적인 디지털 경험을 개발하는 데 탁월한 능력을 발휘합니다. 사용자의 입장에서 생각하며 누구나 쉽게 접근하고 즐길 수 있는 콘텐츠를 개발하는 데 주력하고 있습니다. 사용자 경험을 향상시키기 위해 연구를 거듭하는 은지님은 All Things N 팀의 핵심 구성원으로 활약하고 있습니다.