본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...

CodeDeck AI
2025. 11. 8. · 59 Views
Rust Serde 직렬화 역직렬화 완벽가이드
Rust의 Serde 라이브러리를 사용하여 데이터를 JSON, TOML 등의 형식으로 변환하는 방법을 배웁니다. 초급자도 쉽게 따라할 수 있도록 기본 개념부터 실전 예제까지 단계별로 설명합니다.
들어가며
이 글에서는 Rust Serde 직렬화 역직렬화 완벽가이드에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- Serde_기본_설정
- 기본_구조체_직렬화
- JSON으로_직렬화하기
- JSON에서_역직렬화하기
- 필드명_변경하기
- 선택적_필드_처리
- 기본값_설정하기
- 중첩된_구조체_처리
- 벡터와_배열_처리
- Pretty_JSON_출력
1. Serde 기본 설정
개요
Serde를 사용하기 위해 Cargo.toml에 필요한 의존성을 추가합니다. serde와 serde_json은 Rust에서 직렬화/역직렬화를 위한 필수 라이브러리입니다.
코드 예제
[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
설명
derive 기능을 활성화하면 구조체에 자동으로 직렬화 기능을 추가할 수 있습니다. serde_json은 JSON 형식으로 변환하는 기능을 제공합니다.
2. 기본 구조체 직렬화
개요
Serialize와 Deserialize trait을 derive하여 구조체를 JSON으로 변환할 수 있습니다. 가장 기본적인 Serde 사용 방법입니다.
코드 예제
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct User {
name: String,
age: u32,
}
설명
derive 매크로를 사용하면 컴파일러가 자동으로 직렬화/역직렬화 코드를 생성해줍니다. 별도의 구현 없이 바로 사용할 수 있습니다.
3. JSON으로 직렬화하기
개요
Rust 구조체를 JSON 문자열로 변환하는 방법입니다. serde_json::to_string 함수를 사용하여 간단하게 변환할 수 있습니다.
코드 예제
let user = User {
name: "김철수".to_string(),
age: 25,
};
let json = serde_json::to_string(&user)?;
println!("{}", json);
// {"name":"김철수","age":25}
설명
to_string 함수는 구조체를 받아 JSON 문자열로 변환합니다. 에러가 발생할 수 있으므로 ? 연산자로 처리합니다.
4. JSON에서 역직렬화하기
개요
JSON 문자열을 다시 Rust 구조체로 변환하는 방법입니다. serde_json::from_str 함수를 사용합니다.
코드 예제
let json_str = r#"{"name":"이영희","age":30}"#;
let user: User = serde_json::from_str(json_str)?;
println!("{} is {} years old", user.name, user.age);
// 이영희 is 30 years old
설명
from_str 함수는 JSON 문자열을 파싱하여 지정한 타입의 구조체로 변환합니다. 타입 추론이 필요하므로 명시적으로 타입을 지정해야 합니다.
5. 필드명 변경하기
개요
JSON의 키 이름과 Rust 구조체의 필드명을 다르게 설정할 수 있습니다. rename 속성을 사용하여 매핑합니다.
코드 예제
#[derive(Serialize, Deserialize)]
struct Product {
#[serde(rename = "product_id")]
id: u32,
#[serde(rename = "product_name")]
name: String,
}
설명
API 응답의 필드명이 snake_case이고 Rust는 camelCase를 사용할 때 유용합니다. rename으로 자동 변환됩니다.
6. 선택적 필드 처리
개요
JSON에 없을 수도 있는 필드는 Option 타입으로 처리합니다. 값이 없으면 자동으로 None이 됩니다.
코드 예제
#[derive(Serialize, Deserialize)]
struct Profile {
username: String,
email: Option<String>,
age: Option<u32>,
}
설명
email이나 age가 JSON에 없어도 에러가 발생하지 않습니다. Option<T>를 사용하면 누락된 필드를 안전하게 처리할 수 있습니다.
7. 기본값 설정하기
개요
JSON에 필드가 없을 때 사용할 기본값을 설정할 수 있습니다. default 속성을 사용합니다.
코드 예제
#[derive(Serialize, Deserialize)]
struct Config {
host: String,
#[serde(default = "default_port")]
port: u16,
}
fn default_port() -> u16 { 8080 }
설명
port 필드가 JSON에 없으면 default_port 함수가 반환하는 8080이 자동으로 사용됩니다.
8. 중첩된 구조체 처리
개요
구조체 안에 다른 구조체가 포함된 경우에도 Serde가 자동으로 처리해줍니다. 모든 구조체에 derive를 추가하면 됩니다.
코드 예제
#[derive(Serialize, Deserialize)]
struct Address {
city: String,
zipcode: String,
}
#[derive(Serialize, Deserialize)]
struct Person {
name: String,
address: Address,
}
설명
중첩된 구조체도 자동으로 직렬화/역직렬화됩니다. 각 구조체에 derive를 추가하는 것만 잊지 않으면 됩니다.
9. 벡터와 배열 처리
개요
Vec나 배열 같은 컬렉션도 Serde가 자동으로 JSON 배열로 변환해줍니다. 복잡한 구현 없이 바로 사용할 수 있습니다.
코드 예제
#[derive(Serialize, Deserialize)]
struct Team {
name: String,
members: Vec<String>,
scores: Vec<u32>,
}
설명
Vec<T>는 JSON 배열로 자동 변환됩니다. 원시 타입뿐만 아니라 구조체의 Vec도 처리할 수 있습니다.
10. Pretty JSON 출력
개요
읽기 쉽게 들여쓰기가 적용된 JSON을 출력하려면 to_string_pretty 함수를 사용합니다. 디버깅이나 로깅에 유용합니다.
코드 예제
let user = User {
name: "박민수".to_string(),
age: 28,
};
let json = serde_json::to_string_pretty(&user)?;
println!("{}", json);
설명
to_string_pretty는 줄바꿈과 들여쓰기가 적용된 JSON을 생성합니다. 사람이 읽기 편한 형식으로 출력됩니다.
마치며
이번 글에서는 Rust Serde 직렬화 역직렬화 완벽가이드에 대해 알아보았습니다. 총 10가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#Rust #Serde #Serialization #Deserialization #JSON
댓글 (0)
함께 보면 좋은 카드 뉴스
Rust로 만드는 나만의 OS 15:println! 매크로 만들기
OS 커널에서 println! 매크로를 직접 구현하는 방법을 다룹니다. VGA 버퍼 출력부터 fmt::Write 트레이트 구현, 매크로 규칙 정의까지 OS 개발자의 필수 지식을 전달합니다.
Rust 주석과 문서화 완벽 가이드
Rust에서 코드를 설명하는 주석부터 자동 문서 생성까지 완벽하게 마스터하세요. 실무에서 바로 활용할 수 있는 문서화 스킬을 이북처럼 술술 읽히게 정리했습니다.
Rust 댕글링 참조 방지하기 완벽 가이드
Rust의 소유권 시스템이 어떻게 댕글링 참조를 컴파일 타임에 방지하는지 알아봅니다. 메모리 안전성을 보장하는 Rust의 핵심 메커니즘을 초보자도 쉽게 이해할 수 있도록 풀어냅니다.
Rust 표현식과 구문 완벽 가이드
Rust에서 표현식과 구문의 차이를 명확히 이해하고, 이를 활용해 더 간결하고 안전한 코드를 작성하는 방법을 배워봅니다. 입문자가 가장 헷갈려하는 개념을 실무 예제와 함께 쉽게 풀어냅니다.
AWS Lambda 출력 형식 제어 완벽 가이드
AWS Lambda와 서버리스 환경에서 다양한 출력 형식을 제어하는 방법을 배웁니다. JSON, 마크다운, 테이블 형식의 응답을 생성하고, 출력을 검증하며, 파싱 에러를 처리하는 실무 노하우를 담았습니다.