0Pricing
Learn Rust Coding · 강의

기타 형식

TOML, YAML, bincode

기타 형식은(는) CoddyKit의 무료 Learn Rust Coding 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn Rust Coding 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.

JSON을 넘어선 형식

serde의 핵심은 형식에 독립적이므로 형식 크레이트만 바꾸면 같은 파생 구조체를 여러 형식에서 사용할 수 있습니다.

  • 구성에는 TOML
  • 사람이 읽기 쉬운 데이터에는 YAML
  • 간결한 이진 데이터에는 bincode

하나의 구조체, 여러 형식

구조체는 한 번만 정의합니다. 각 형식 크레이트는 동일한 Serialize / Deserialize 구현 위에서 자체적인 to_string / from_str에 해당하는 기능을 제공합니다.

use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
struct Config {
    name: String,
    port: u16,
}

TOML

TOML은 구성에 널리 사용됩니다. Cargo.toml 자체도 이를 사용합니다. toml 크레이트로 TOML을 직렬화하고 구문 분석할 수 있습니다.

use serde::Serialize;

#[derive(Serialize)]
struct Config { name: String, port: u16 }

fn to_toml(c: &Config) -> String {
    toml::to_string(c).unwrap()
}

TOML 구문 분석하기

toml::from_str을 사용해 TOML 구성을 다시 구조체로 읽어 오세요.

use serde::Deserialize;

#[derive(Deserialize)]
struct Config { name: String, port: u16 }

fn parse(s: &str) -> Config {
    toml::from_str(s).unwrap()
}

YAML

YAML은 중첩된 사람이 편집하는 데이터에 적합합니다. 동일한 API 형태를 제공하는 serde_yaml 같은 크레이트를 사용하세요.

use serde::Serialize;

#[derive(Serialize)]
struct Config { name: String, port: u16 }

fn to_yaml(c: &Config) -> String {
    serde_yaml::to_string(c).unwrap()
}

bincode

bincode는 간결한 이진 형식입니다. 사람이 읽지 않고 크기와 속도가 중요한 캐싱이나 네트워크 전송에 적합합니다.

use serde::Serialize;

#[derive(Serialize)]
struct Config { name: String, port: u16 }

fn to_bytes(c: &Config) -> Vec<u8> {
    bincode::serialize(c).unwrap()
}

형식 선택하기

사용 대상에 따라 선택하세요:

  • 중첩된 사람이 읽는 구성: TOML 또는 YAML
  • 웹 API: JSON
  • 내부 이진 저장소/전송: bincode

형식 선택 모델링하기

결정 과정은 사용 사례를 형식에 매핑하는 것뿐입니다. 이 실행 가능한 예제는 이러한 선택 로직을 보여 줍니다.

fn pick_format(use_case: &str) -> &str {
    match use_case {
        "config" => "TOML",
        "api" => "JSON",
        "cache" => "bincode",
        _ => "JSON",
    }
}

fn main() {
    println!("{}", pick_format("config"));
    println!("{}", pick_format("cache"));
    println!("{}", pick_format("api"));
}

바이트 왕복 변환

이진 형식은 왕복 변환을 지원합니다. 바이트로 직렬화한 다음 같은 구조체로 다시 역직렬화합니다. 이 실행 가능한 예제는 바이트 길이를 이용한 왕복 변환 개념을 모델링합니다.

fn encode(name: &str) -> Vec<u8> {
    name.as_bytes().to_vec()
}

fn decode(bytes: &[u8]) -> String {
    String::from_utf8(bytes.to_vec()).unwrap()
}

fn main() {
    let bytes = encode("Alice");
    println!("len={}", bytes.len());
    println!("back={}", decode(&bytes));
}

형식별 특성

형식마다 지원하는 기능이 다릅니다. TOML은 null을 허용하지 않고 중첩에 테이블이 필요하며, YAML은 앵커를 지원합니다. bincode는 자체적으로 형식을 설명하지 않으므로 양쪽이 형식을 공유해야 합니다.

주석은 여전히 적용됩니다

앞에서 배운 #[serde(...)] 주석인 rename, default, skip은 모든 형식에서 작동합니다. 형식 계층이 아니라 serde 계층에서 동작하기 때문입니다.

use serde::Serialize;

#[derive(Serialize)]
#[serde(rename_all = "kebab-case")]
struct Config { max_connections: u32 }

빠른 확인

다른 형식에 대한 이해도를 확인해 보세요.

복습

다른 serde 형식에 대해 배웠습니다:

  • 하나의 파생 구조체를 TOML, YAML, JSON, bincode에서 사용할 수 있습니다
  • 각 형식 크레이트는 익숙한 to_string / from_str 방식의 API를 제공합니다
  • 사용 대상에 따라 구성, API, 이진 저장소 중에서 선택합니다
  • serde 주석은 모든 형식에 적용됩니다

이로써 Serde 과정과 Rust 시리즈를 마칩니다.

자주 묻는 질문

“기타 형식” 강의는 무료인가요?

네 — “기타 형식” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn Rust Coding 강의 전체를 잠금 해제할 수 있습니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.

“기타 형식”에서 뭘 배우나요?

TOML, YAML, bincode 브라우저에서 직접 실행하는 실습 코드로 Learn Rust Coding을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Learn Rust Coding을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Learn Rust Coding은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“기타 형식” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Learn Rust Coding 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Learn Rust Coding 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 직렬화와 역직렬화
  2. JSON 다루기
  3. 사용자 정의 직렬화
  4. 기타 형식
← Learn Rust Coding(으)로 돌아가기