직렬화와 역직렬화
Derive 매크로
직렬화와 역직렬화은(는) CoddyKit의 무료 Learn Rust Coding 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn Rust Coding 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.
Serde란 무엇인가요?
Serde(SERialize/DEserialize)는 데이터 구조를 JSON, YAML 등의 형식으로 변환하거나 그 반대로 변환하는 Rust 프레임워크입니다.
- 형식에 독립적인 핵심 기능과 형식별 크레이트를 제공합니다
- derive 매크로를 기반으로 작동합니다
serde 추가하기
derive 기능을 사용하여 serde를 추가하고, serde_json 같은 형식별 크레이트도 추가합니다. 이 작업은 Cargo.toml을 수정합니다.
[dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "1"트레이트 파생하기
#[derive(Serialize, Deserialize)]를 사용해 구조체에 주석을 추가하면 변환할 수 있게 됩니다. 각 필드도 직렬화할 수 있어야 합니다.
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct User {
id: u32,
name: String,
}형식으로 직렬화한다는 의미
Serialize는 값을 특정 형식의 바이트나 텍스트로 변환합니다. 구조체는 어떤 형식을 사용할지 알지 못하며, 형식 크레이트가 이를 결정합니다.
형식에서 역직렬화한다는 의미
Deserialize는 텍스트나 바이트를 다시 Rust 값으로 구문 분석하면서 형식과 필수 필드를 검증합니다.
직접 직렬화 모델링하기
직렬화의 원리를 이해하기 위해 간단한 구조체를 직접 작성한 직렬 변환기를 살펴보겠습니다. serde는 이와 비슷한 코드를 대신 생성합니다.
struct User { id: u32, name: String }
fn serialize(u: &User) -> String {
format!("id={};name={}", u.id, u.name)
}
fn main() {
let u = User { id: 7, name: "Alice".to_string() };
println!("{}", serialize(&u));
}직접 역직렬화 모델링하기
이번에는 반대 과정인 텍스트를 다시 구조체로 구문 분석하는 방법입니다. serde가 생성한 코드는 여러 형식에서 이 작업을 안정적으로 처리합니다.
struct User { id: u32, name: String }
fn deserialize(s: &str) -> User {
let parts: Vec<&str> = s.split(',').collect();
let id = parts[0].parse().unwrap();
let name = parts[1].to_string();
User { id, name }
}
fn main() {
let u = deserialize("42,Bob");
println!("{} {}", u.id, u.name);
}열거형에 파생 구현 적용하기
열거형에도 적용할 수 있습니다. 기본적으로 각 변형은 이름으로 직렬화되고, 데이터가 있다면 그 안에 중첩됩니다.
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
enum Shape {
Circle { radius: f64 },
Square { side: f64 },
}중첩 구조
serde는 자동으로 재귀 처리합니다. 다른 파생 구조체나 Vec을 포함하는 구조체도 그대로 작동합니다.
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct Address { city: String }
#[derive(Serialize, Deserialize)]
struct Person {
name: String,
addresses: Vec<Address>,
}직렬화만 또는 역직렬화만 적용하기
특성 하나만 파생하도록 할 수 있습니다. API 응답 형식은 Serialize만, 들어오는 요청 형식은 Deserialize만 적용할 수 있습니다.
use serde::Serialize;
#[derive(Serialize)]
struct ApiResponse {
status: u16,
message: String,
}파생 구현의 요구 사항
모든 필드 형식은 파생하려는 특성을 구현해야 합니다. 표준 형식과 컬렉션은 이미 구현하므로, 사용자 정의 형식에는 자체 파생 구현이 필요합니다.
use serde::Serialize;
#[derive(Serialize)]
struct Inner { x: i32 }
#[derive(Serialize)]
struct Outer { inner: Inner }빠른 확인
직렬화와 역직렬화에 대한 이해도를 확인해 보세요.
복습
serde의 기본 사항을 배웠습니다:
- serde는 형식에 독립적인 직렬화 및 역직렬화 프레임워크입니다
#[derive(Serialize, Deserialize)]가 변환 코드를 생성합니다- 구조체, 열거형, 중첩 형식에서 작동합니다
- 필요에 따라 한 방향만 파생할 수 있습니다
다음: serde_json으로 JSON 다루기
자주 묻는 질문
“직렬화와 역직렬화” 강의는 무료인가요?
네 — “직렬화와 역직렬화” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn Rust Coding 강의 전체를 잠금 해제할 수 있습니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.
“직렬화와 역직렬화”에서 뭘 배우나요?
Derive 매크로 브라우저에서 직접 실행하는 실습 코드로 Learn Rust Coding을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Learn Rust Coding을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Learn Rust Coding은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“직렬화와 역직렬화” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Learn Rust Coding 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Learn Rust Coding 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 직렬화와 역직렬화
- JSON 다루기
- 사용자 정의 직렬화
- 기타 형식