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

CodeDeck AI
2025. 11. 8. · 23 Views
Rust Serde 직렬화 역직렬화 완벽 가이드
Rust의 Serde 라이브러리를 사용하여 데이터를 JSON, TOML 등 다양한 형식으로 변환하는 방법을 학습합니다. 초급자도 쉽게 따라할 수 있도록 기본 개념부터 실전 예제까지 단계별로 설명합니다.
들어가며
이 글에서는 Rust Serde 직렬화 역직렬화 완벽 가이드에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- Serde_기본_설정
- 기본_구조체_직렬화
- 구조체를_JSON으로_변환
- JSON을_구조체로_변환
- 예쁜_JSON_출력
- 필드명_변경하기
- 옵셔널_필드_처리
- 기본값_설정하기
- 중첩_구조체_직렬화
- 벡터_직렬화
- HashMap_직렬화
- 파일로_저장하고_읽기
1. Serde 기본 설정
개요
Serde를 사용하기 위해 Cargo.toml에 필요한 의존성을 추가합니다. serde와 serde_json 크레이트가 기본적으로 필요합니다.
코드 예제
[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
설명
derive 기능을 활성화하면 구조체에 자동으로 직렬화/역직렬화 기능을 추가할 수 있습니다. serde_json은 JSON 형식 변환을 위한 크레이트입니다.
2. 기본 구조체 직렬화
개요
Serialize와 Deserialize 트레이트를 자동으로 구현하여 구조체를 JSON으로 변환합니다.
코드 예제
use serde::{Serialize, Deserialize};
#[derive(Serialize, Deserialize)]
struct User {
name: String,
age: u32,
}
설명
derive 매크로를 사용하면 별도의 코드 작성 없이 User 구조체를 JSON으로 변환하거나 JSON에서 User 구조체로 변환할 수 있습니다.
3. 구조체를 JSON으로 변환
개요
to_string 함수를 사용하여 Rust 구조체를 JSON 문자열로 직렬화합니다.
코드 예제
let user = User {
name: String::from("김철수"),
age: 25,
};
let json = serde_json::to_string(&user).unwrap();
println!("{}", json);
설명
to_string 함수는 구조체를 받아서 JSON 형식의 문자열로 변환합니다. 결과는 {"name":"김철수","age":25} 형태가 됩니다.
4. JSON을 구조체로 변환
개요
from_str 함수를 사용하여 JSON 문자열을 Rust 구조체로 역직렬화합니다.
코드 예제
let json_data = r#"{"name":"이영희","age":30}"#;
let user: User = serde_json::from_str(json_data)
.unwrap();
println!("{}", user.name);
설명
JSON 문자열을 파싱하여 User 타입의 구조체로 변환합니다. 변환 실패 시 에러를 반환하므로 unwrap으로 처리합니다.
5. 예쁜 JSON 출력
개요
to_string_pretty 함수를 사용하면 들여쓰기가 적용된 읽기 쉬운 JSON을 생성할 수 있습니다.
코드 예제
let user = User {
name: String::from("박민수"),
age: 28,
};
let pretty_json = serde_json::to_string_pretty(&user)
.unwrap();
println!("{}", pretty_json);
설명
개발 중 디버깅이나 로그 출력 시 가독성 좋은 JSON이 필요할 때 유용합니다. 줄바꿈과 들여쓰기가 자동으로 추가됩니다.
6. 필드명 변경하기
개요
rename 속성을 사용하여 Rust 구조체 필드명과 JSON 키 이름을 다르게 매핑할 수 있습니다.
코드 예제
#[derive(Serialize, Deserialize)]
struct Product {
#[serde(rename = "productName")]
name: String,
#[serde(rename = "productPrice")]
price: f64,
}
설명
API가 camelCase를 사용하지만 Rust는 snake_case를 선호할 때 유용합니다. JSON에서는 productName으로 표시되지만 코드에서는 name으로 사용합니다.
7. 옵셔널 필드 처리
개요
Option 타입을 사용하면 JSON에 없을 수 있는 필드를 안전하게 처리할 수 있습니다.
코드 예제
#[derive(Serialize, Deserialize)]
struct Profile {
username: String,
email: Option<String>,
phone: Option<String>,
}
설명
email이나 phone이 JSON에 없어도 에러가 발생하지 않고 None으로 처리됩니다. 필드가 있으면 Some(값) 형태로 저장됩니다.
8. 기본값 설정하기
개요
default 속성을 사용하여 JSON에 필드가 없을 때 사용할 기본값을 지정합니다.
코드 예제
#[derive(Serialize, Deserialize)]
struct Config {
host: String,
#[serde(default = "default_port")]
port: u16,
}
fn default_port() -> u16 { 8080 }
설명
JSON에 port 필드가 없으면 자동으로 8080 값이 사용됩니다. 설정 파일 파싱 시 유용한 패턴입니다.
9. 중첩 구조체 직렬화
개요
구조체 안에 다른 구조체를 포함하는 경우에도 자동으로 직렬화됩니다.
코드 예제
#[derive(Serialize, Deserialize)]
struct Address {
city: String,
street: String,
}
#[derive(Serialize, Deserialize)]
struct Person {
name: String,
address: Address,
}
설명
내부의 Address 구조체도 Serialize/Deserialize를 구현하면 자동으로 중첩된 JSON 객체로 변환됩니다.
10. 벡터 직렬화
개요
Vec나 배열 같은 컬렉션 타입도 자동으로 JSON 배열로 변환됩니다.
코드 예제
#[derive(Serialize, Deserialize)]
struct Team {
name: String,
members: Vec<String>,
}
let team = Team {
name: String::from("개발팀"),
members: vec!["철수".into(), "영희".into()],
};
설명
members 필드는 JSON에서 배열 형태로 표현됩니다. 모든 표준 컬렉션 타입이 지원됩니다.
11. HashMap 직렬화
개요
HashMap을 사용하면 동적인 키-값 쌍을 JSON 객체로 변환할 수 있습니다.
코드 예제
use std::collections::HashMap;
#[derive(Serialize, Deserialize)]
struct Settings {
values: HashMap<String, String>,
}
설명
HashMap의 각 엔트리가 JSON 객체의 키-값 쌍으로 변환됩니다. 동적인 설정값 저장에 유용합니다.
12. 파일로 저장하고 읽기
개요
직렬화된 데이터를 파일에 저장하고 다시 읽어올 수 있습니다.
코드 예제
use std::fs::File;
// 저장
let file = File::create("user.json").unwrap();
serde_json::to_writer_pretty(&file, &user).unwrap();
// 읽기
let file = File::open("user.json").unwrap();
let user: User = serde_json::from_reader(file).unwrap();
설명
to_writer와 from_reader를 사용하면 메모리를 효율적으로 사용하면서 파일 입출력을 수행할 수 있습니다.
마치며
이번 글에서는 Rust Serde 직렬화 역직렬화 완벽 가이드에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#Rust #Serde #Serialization #Deserialization #JSON
댓글 (0)
함께 보면 좋은 카드 뉴스
AWS Lambda 출력 형식 제어 완벽 가이드
AWS Lambda와 서버리스 환경에서 다양한 출력 형식을 제어하는 방법을 배웁니다. JSON, 마크다운, 테이블 형식의 응답을 생성하고, 출력을 검증하며, 파싱 에러를 처리하는 실무 노하우를 담았습니다.
JSON 파싱과 DataFrame 변환 완벽 가이드
API에서 받은 복잡한 JSON 데이터를 Pandas DataFrame으로 변환하는 실전 기술을 배웁니다. 중첩된 JSON 구조를 평탄화하고, 여러 API 결과를 하나로 합치는 방법까지 초급자도 쉽게 따라할 수 있도록 설명합니다.
API 개념과 JSON 데이터 완벽 가이드
초급 개발자를 위한 API와 JSON 데이터 기초부터 실전 활용까지. REST API 개념, HTTP 메서드, JSON 데이터 구조를 실무 스토리로 쉽게 배웁니다.
공공데이터 다운로드와 파일 읽기 완벽 가이드
공공데이터 포털에서 기상청 데이터를 다운로드하고, CSV, Excel, JSON 파일을 Python으로 읽는 방법을 배웁니다. 인코딩 문제 해결부터 대용량 파일 처리까지 실무에 필요한 모든 내용을 담았습니다.
Grafana 시각화 & 대시보드 자동화 완벽 가이드
모니터링 대시보드를 Git으로 관리하고 자동 배포하는 방법을 배웁니다. JSON 모델 기반으로 대시보드를 코드처럼 버전 관리하고, PR merge 즉시 30초 내 반영되는 파이프라인을 구축합니다.