[CS] Json์ ์ง๋ ฌํ(Serialization), ์ญ์ง๋ ฌํ(Deserialization)
by rlaehddnd0422Json
- Json์ Java-Script Object Notation์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด ๋ฌธ๋ฒ์ผ๋ก ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ๊ตํ ํ์
- ์๋ฐ๋ ํ์ด์ฌ, ์๋ฐ์คํฌ๋ฆฝํธ ๋ฑ ์ฌ๋ฌ ์ธ์ด์์ ๋ฐ์ดํฐ ๊ตํ ํ์์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
JavaScript ๊ฐ์ฒด ๋ฌธ๋ฒ
ํค(key)์ ๊ฐ(value)๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
ex) {"name" : "kim", "age" : 26}
์ฃผ์ํด์ผ ํ ์ ์ ์ด๋ฏธ ์กด์ฌํ๋ ํค์ ๋ํด ์ค๋ณต์ผ๋ก ๊ฐ์ ์ ์ธํ๋ฉด ๋ง์ง๋ง์ ์ฐ์ธ ๊ฐ์ผ๋ก ๋ฎ์ด ์์ด๋ค๋ ์ ์ ๋๋ค.
// file.json
{
"name" : "kim",
"name" : "choi"
}
const fs = require('fs')
const path = require('path')
const file = fs.readFileSync(path.join(__dirname, "file.json"))
console.log(file)
console.log(JSON.parse(file))
- ์ file.json ํ์ผ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ง์์์ ๋ถ๋ฌ์ "name"์ ์ถ๋ ฅํด๋ณด๋ฉด "choi"๊ฐ ์ฐํ๋ค๋ ๊ฒ.
Json ์ง๋ ฌํ, ์ญ์ง๋ ฌํ
- ์ง๋ ฌํ(Serialization)๋ ์ธ๋ถ ์์คํ ์์ ์ฌ์ฉํ ์ ์๋๋ก ๋ฐ์ดํธ ํํ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ ๊ธฐ์ ๋ก, ์ฝ๊ฒ ๋งํด ์ฌ์ฉํ๋ ์ธ์ด์ ์ฝ๋๋ด์ ๊ฐ์ฒด๋, ํด์ ํ ์ด๋ธ, ๋์ ๋๋ฆฌ ๋ฑ์ JSON ํ์ผ๋ก ๋ง๋๋ ๊ณผ์ ์ ์ง๋ ฌํ(Serialization)๋ผ๊ณ ํฉ๋๋ค.
- ๋ฐ๋๋ก ์ญ์ง๋ ฌํ(Deserialization)๋ JSON ํ์ผ์ ์ธ๋ถ ์์คํ ์ ๋ฐ์ดํธ ํํ์ ๋ฐ์ดํฐ(JSON)์ ๊ฐ์ฒด๋ ํด์ ํ ์ด๋ธ, ๋์ ๋๋ฆฌ ๋ฑ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ๋งํฉ๋๋ค.
{
"letterId" : 1,
"reportType" : "ABUSE",
"reportContent" : "์ ๊ณ ๋ด์ฉ์
๋๋ค."
}
@Data
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class ReportSendRequest {
@Null
private Long memberId;
@NotBlank(message = "์ ๊ณ ํ ํธ์ง ๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.")
private Long letterId;
@NotBlank(message = "์ ๊ณ ์ ํ์ ์
๋ ฅํด์ฃผ์ธ์.")
private String reportType;
@NotBlank(message = "์ ๊ณ ๋ด์ฉ์ ์
๋ ฅํด์ฃผ์ธ์.")
private String reportContent;
}
์ ์์๋ก, ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ ฅํ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก JSON ํ์ผ๋ก ๋ณํํ๊ณ JSON ํ์ผ์ ๊ฐ์ฒด๋ก ๋ณํํ๋ ๊ณผ์ ์ด ์ญ์ง๋ ฌํ๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ ฅํ ๊ฐ์ JSON ํ์ผ๋ก ๋ณํํ๋ ์์ ์ ํ๋ก ํธ์๋์์ ์ํํ๊ณ , JSON ํ์ผ์ ์ฝ์ด ๊ฐ์ฒด๋ก ๋ณํํ๋ ์์ ์ธ ์ญ์ง๋ ฌํ ๊ณผ์ ์ ๋ฐฑ์๋์์ ์ํ๋ฉ๋๋ค.
JSON์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(์๋ฐ, ํ์ด์ฌ) ํ๋ ์์ํฌ ๋ฑ์ ๋ ๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์,
- ์๋ก ๋ค๋ฅธ ์์คํ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ๊ธฐ์ ์ข๋ค๋ ์ ์์ ์์ฃผ ์ฌ์ฉ๋๋ฉฐ, ์ฃผ๋ก API์ ๋ฐํ ํํ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- (yml, xml์ ๋ ์ ํธํ๊ธด ํ์ง๋ง) ์์คํ ์ ๊ตฌ์ฑํ๋ ์ค์ ํ์ผ์ ํ์ฉ๋๊ธฐ๋ ํ๋ค๊ณ ํฉ๋๋ค.
Java์ Serializable ์ธํฐํ์ด์ค
public class Student implements Serializable {
public static final long serialVersionUID = 1234L;
private long studentId;
private String name;
private transient int age; // transient ๋ณ์๋ ์ง๋ ฌํ์์ ์ ์ธ
public Student(long studentId, String name, int age) {
this.studentId = studentId;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return String.format("%d - %s - %d", studentId, name, age);
}
}
// ์ถ์ฒ: https://code-lab1.tistory.com/289 [์ฝ๋ ์ฐ๊ตฌ์:ํฐ์คํ ๋ฆฌ]
- ์๋ฐ๋ Serializable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก ์ง๋ ฌํ/์ญ์ง๋ ฌํ ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ์น๋ช ์ ์ธ ๋ณด์ ์ด์์ ์๊ฒฉํ ํ์ ์ฒดํฌ, ๊ฐ์ฒด ๊ตฌ์กฐ ๋ณ๊ฒฝ์ ์ด๋ ค์ ๋ฑ ๋จ์ ์ด ๋ง๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ๋์ง๋ ์์ง๋ง, ์ด๋ฐ ๊ธฐ๋ฅ๋ ์ ๊ณตํ๋ค๋ ์ ์ ์์๋ก์๋ค!
- ์ค์ํ ์ ๋ณด๋ ๋ฐฉ์ด์ ์ผ๋ก transient ํค์๋๋ฅผ ๋ฃ์ด ์ง๋ ฌํ ๊ณผ์ ์์ ํ๋์ ์ํ๊ฐ ์ ์ก์ ๋ง์ ์ญ์ง๋ ฌํ ๊ณผ์ ์์ ๋ณต์ฌํ ๊ฐ ์์ฒด๋ฅผ ์์ ๋ณด๋ด์ง ์๋๋ก ์ค์ ํ ์๋ ์๊ฒ ์ต๋๋ค.
์ฐธ๊ณ ์๋ฃ
'๐ CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS] ํด๋ผ์ฐ๋ ์ปดํจํ ์๋น์ค์ ์ข ๋ฅ - Iaas, Paas, Saas (0) | 2024.04.01 |
---|---|
[CS] ํด๋ผ์ฐ๋ ์๋น์ค ๋ฐฐํฌ ๋ฐฉ์์ ๋ณํ ๊ณผ์ (0) | 2024.03.28 |
[CS] API(Application Programming Interface)๋? (1) | 2024.03.27 |
[CS] XML(eXtensible MarkUp Language)์ด๋? (0) | 2024.03.26 |
[์ด์์ฒด์ /์ปดํจํฐ ๊ตฌ์กฐ] ์ปดํจํฐ ํ๋์จ์ด์ ๊ตฌ์ฑ์์ (0) | 2023.08.14 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422