Serializable
์ง๋ ฌํ๋?
Serializeable์ด๋ ์๋ฐ ์์คํ ๋ด๋ถ์์ ์ฌ์ฉ๋๋ ๊ฐ์ฒด ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ถ์ ์๋ฐ ์์คํ ์์๋ ์ฌ์ฉํ ์ ์๋๋ก byte ํํ๋ก ๋ฐ์ดํฐ ๋ณํํ๋ ๊ธฐ์ ๊ณผ byte๋ก ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ฐ์ฒด๋ก ๋ณํํ๋ ๊ธฐ์ ์ ํฉ์ณ์ ๋งํ๋ค.
์์คํ ์ ์ผ๋ก ๋งํ๋ฉด, JVM(Java Virtual Machine)์ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผ(ํ/์คํ)๋์ด ์๋ ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ ํํ๋ก ๋ณํํ๋ ๊ธฐ์ ๊ณผ ์ง๋ ฌํ๋ ๋ฐ์ดํธ ํํ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด๋ก ๋ณํํด์ JVM์ผ๋ก ์์ฃผ์ํค๋ ํํ๋ฅผ ๋งํ๋ค.
์ด์ ์ Django์์๋ python ๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ํ์, JSON, XML ํํ๋ก ๋ณํํ๊ธฐ ์ํด ์ฌ์ฉํ์๋ค. Django restframework serializers
์กฐ๊ธ ๋ ์์ธํ ์ดํด๋ณด๋ฉด,
๋๋ถ๋ถ OS์ ํ๋ก์ธ์ค ๊ตฌํ์ ์๋ก ๋ค๋ฅธ ๊ฐ์๋ฉ๋ชจ๋ฆฌ์ฃผ์๊ณต๊ฐ(VAS)๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์ Object ํ์ ์ ์ฐธ์กฐ๊ฐ ๋ฐ์ดํฐ ์ธ์คํด์ค๋ฅผ ์ ๋ฌํ ์ ์๋ค.(์ ๋ฌํ๋๋ผ๋, ์๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์์ ์ ๋ฌ๋ ์ฐธ์กฐ๊ฐ์ด๋ฏ๋ก ๋ฌด์๋ฏธ) ๋๋ฌธ์ ์๋ก ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์ฌ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฃผ์๊ฐ์ด ์๋ Byte ํํ๋ก ์ง๋ ฌํ๋ ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํด ์ฌ์ฉํ๋ ์ชฝ์์ ์ญ์ง๋ ฌํํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
Java ํด๋์ค๋ ๊ฐ์ฒด ์์ ๊ฐ์ฒด๊ฐ ์กด์ฌํ ์ ์๋ค. ๊ฐ์ฒด A์์ ๋ค์ด์๋ ๊ฐ์ฒด B๋ฅผ ์ง๋ ฌํํ๋ฉด, ๊ฐ์ฒด B์์ฒด์ ๋ฐ์ดํฐ๋ฅผ Primitive type(Byte type)์ ๋ฐ์ดํฐ๋ก ๋ณํํ๋ค. ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ ๋ชจ๋ Primitive ํ์ ์ ๋ฐ์ดํฐ ๋ฌถ์์ด๋ฉฐ, ํ์ผ ์ ์ฅ์ด๋ ๋คํธ์ํฌ ์ ์ก ์ ํ์ฑํ ์ ์๋ ์ ์๋ฏธํ ๋ฐ์ดํฐ๊ฐ ๋๋ ๊ฒ์ด๋ค.
JSON, CSV ๋ฑ์ ํฌ๋งท์ ์ง๋ ฌํ/์ญ์ง๋ ฌํ ์์ ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋์ ํ๋ฉด ์ฝ๊ฒ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ฉฐ, ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ง๋ฉด ์ง์ ๋งคํํด์ค์ผํ๋ค.
์ง๋ ฌํ ์กฐ๊ฑด
Java.io.Serializable
์ธํฐํ์ด์ค๋ฅผ ์์ ๋ฐ์ ๊ฐ์ฒด์ Primitive ํ์ ์ ๋ฐ์ดํฐ๊ธฐ๋ณธ์๋ฃํ(Primitive Type)์ ์ ํด์ง Byte ๋ณ์
๊ฐ์ฒด์ ๋ฉค๋ฒ๋ค ์ค Serializable ์ธํฐํ์ด์ค๊ฐ ๊ตฌํ๋์ง ์์ ๊ฒ์ด ์กด์ฌํ๋ฉด ์๋๋ค.
transient
๊ฐ ์ ์ธ๋ ๋ฉค๋ฒ๋ ์ ์กํ์ง ์๋๋ค.transient
์ ์ธ์ ์ง๋ ฌํ ๋์์์ ์ ์ธ๋จ
์ ์ฌ์ฉํ ๊น?

์๋ฐ ์ง๋ ฌํ ํํ์ ๋ฐ์ดํฐ ๊ตํ์ ์๋ฐ ์์คํ ๊ฐ์ ๋ฐ์ดํฐ ๊ตํ์ ์ํด ์กด์ฌํ๋ค.
์ฅ์
์๋ฐ ์์คํ ์์์ ๊ฐ๋ฐ์ ์ต์ ํ ๋์ด์๋ค. ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ํด๋์ค ๊ฐ์ฒด์ผ์ง๋ผ๋, ์ง๋ ฌํ์ ๊ธฐ๋ณธ๋ง ์งํค๋ฉด ํฐ ์์ ์์ด ์ง๋ ฌํ/์ญ์ง๋ ฌํ๊ฐ ๊ฐ๋ฅํ๋ค.
๋ฐ์ดํฐ ํ์ ์ด ์๋์ผ๋ก ๋ง์ถฐ์ง๊ธฐ ๋๋ฌธ์ ๊ด๋ จ ๋ถ๋ถ์ ํฌ๊ฒ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ค.
์ธ์ ์ด๋์ ์ฌ์ฉํด์ผํ ๊น?
JVM์ ๋ฉ๋ชจ๋ฆฌ์์๋ง ์์ฃผ๋์ด์๋ ๊ฐ์ฒด๋ฅผ ๊ทธ๋๋ก ์์ํ(Persistence)๊ฐ ํ์ํ ๋ ์ฌ์ฉ๋๋ค.
์์คํ ์ด ์ข ๋ฃ๋๋๋ผ๋ ์์ด์ง์ง ์๋ ์ฅ์ ์ ๊ฐ์ง๋ฉฐ, ์์ํ๋ ๋ฐ์ดํฐ์ด๊ธฐ ๋๋ฌธ์ ๋คํธ์ํฌ๋ก ์ ์ก์ด ๊ฐ๋ฅํ๋ค.
Servlet Session
Servlet ๊ธฐ๋ฐ WAS(ํฐ์บฃ, ์น๋ก์ง ๋ฑ)๋ค์ ๋๋ถ๋ถ ์ธ์ ์ ์๋ฐ ์ง๋ ฌํ๋ฅผ ์ง์ํ๊ณ ์๋ค. ๋จ์ํ ์ธ์ ์ ์๋ธ๋ฆฟ ๋ฉ๋ชจ๋ฆฌ ์์์ ์ด์ฉํ๋ค๋ฉด, ์ง๋ ฌํ๊ฐ ํ์ํ์ง ์์ง๋ง, ํ์ผ๋ก ์ ์ฅํ๊ฑฐ๋ ์ธ์ ํด๋ฌ์คํฐ๋ง, DB ์ ์ฅํ๋ ์ต์ ๋ฑ์ ์ ํํ๋ฉด ์ธ์ ์์ฒด๊ฐ ์ง๋ ฌํ๋์ด ์ ๋ฌ๋๋ค. ์ฆ, ์ธ์ ์ ํ์ํ ๊ฐ์ฒด๋
java.io.Serializable
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.
Cache
์๋ฐ ์์คํ ์์ ํผํฌ๋จผ์ค๋ฅผ ์ํด ์บ์(Ehcache, Redis, Memcached) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค. ์บ์ํ ๋ถ๋ถ์ ์๋ฐ ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ ์ฌ์ฉ๋๋ค. ์๋ฐ ์ง๋ ฌ ํ๋ง ์ด์ฉํด์๋ง ์บ์๋ฅผ ์ ์ฉํ์ง ์์ง๋ง, ๊ฐ์ฅ ๊ฐํธํ๊ธฐ ๋๋ฌธ์ ๋ง์ด ์ฌ์ฉํ๋ค.
Remote Method Inovation
RMI๋ ์๊ฒฉ ์์คํ ๊ฐ์ ๋ฉ์ธ์ง ๊ตํ์ ์ํด์ ์ฌ์ฉํ๋ ๊ธฐ์ ์ด๋ค. ๋ณดํต ์๊ฒฉ ์์คํ ๊ณผ ํต์ ์ ์ํด IP์ ํฌํธ๋ฅผ ์ด์ฉํด ์์ผํต์ ์ ํ์ง๋ง, RMI๋ ๊ทธ ๋ถ๋ถ์ ์ถ์ํํด ์๊ฒฉ์ ์๋ ์์คํ ์ ๋ฉ์๋๋ฅผ ๋ก์ปฌ ์์คํ ์ ๋ฉ์๋์ธ ๊ฒ์ฒ๋ผ ํธ์ถํ ์ ์๋ค. ์๊ฒฉ ์์คํ ์ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ์ ๋ฌํ๋ ๋ฉ์ธ์ง๋ฅผ ์๋์ผ๋ก ์ง๋ ฌํํ์ฌ ์ฌ์ฉํ๊ณ , ์ ๋ฌ๋ฐ์ ์๊ฒฉ ์์คํ ์์ ํด๋น ๋ฉ์ธ์ง๋ฅผ ์ญ์ง๋ ฌํํ์ฌ ์ฌ์ฉํ๋ค.
๊ฐ์ฒด๊ฐ ์ธ์ ์ ์ ์ฅํ์ง ์๋ ๋จ์ํ ๋ฐ์ดํฐ ์งํฉ์ด๊ณ , ์ปจํธ๋กค๋ฌ์์ ์์ฑ๋์ด ๋ทฐ์์ ์๋ฉธํ๋ ๋ฐ์ดํฐ์ ์ ๋ฌ์ฒด๋ผ๋ฉด ๊ฐ์ฒด ์ง๋ ฌํ๋ ๊ณ ๋ คํ์ง ์์๋๋๋ค.
์ธ์ ๊ด๋ฆฌ๋ฅผ ์คํ ๋ฆฌ์ง๋ ๋คํธ์ํฌ ์์์ ์ด์ฉํ๋ค๋ฉด ๊ฐ์ฒด ์ง๋ ฌํ๋ฅผ ํด์ผํ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ์์๋ง ๊ด๋ฆฌํ๋ค๋ฉด ๊ฐ์ฒด ์ง๋ ฌํ๋ฅผ ํ ํ์๊ฐ ์๋ค.
์ค์ ๋ก ์ํ์์ธ ๊ฐ๋ฐ์ Dto๋ฅผ ์๋ฐ ์ง๋ ฌํ๋ฅผ ํ์ฌ ์์ฑํ์๋ค. ์ ์ ์๋ฒ - ํ๋ก ํธ ์๋ฒ ๊ฐ ์ง๋ ฌํ๋ฅผ ํตํด ๋ณ๋ ์์ ์์ด ๋ฐ๋ก ๋ฐ์ดํฐ ํ์ ์ ๋ง์ถฐ์ฃผ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ค.
์์
import java.io.Serializable;
import lombok.Data;
@Entity
@Getter
@Setter
@toString
public class AllnItem implements Serializable {
private static final long serialVersionUID = 4140042043347990835L;
private String chnlId;
private String salestrNo;
private String itemId;
private String siteNo;
private String applyYn;
}
AllnItem allnItem = new AllnItem("0000000","1234", "1000000001", "1001", "Y");
byte[] selializedAllnItem;
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
try (ObjectOutputStream oos = new ObjectOutputStream(baos)) {
oos.writeObject(allnItem);
// ์ง๋ ฌํ๋ AllnItem ๊ฐ์ฒด
selializedAllnItem = baos.toByteArray();
}
}
try (ByteArrayInputStream bais = new ByteArrayInputStream(selializedAllnItem)) {
try (ObjectInputStream ois = new ObjectInputStream(bais)) {
// ์ญ์ง๋ ฌํ๋ AllnItem ๊ฐ์ฒด๋ฅผ ์ฝ์ด์จ๋ค.
Object obj = ois.readObject();
AllnItem allnItem = (AllnItem) obj;
}
}
serialVersionUID
Java ์ง๋ ฌํ ๋์ ๊ฐ์ฒด๋ ๋์ผํ serialVersionUID
๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผํ๋ค. ํ์ง๋ง, ์ง์ ์ ์ธํ์ง ์๋๋ผ๋, ๋ด๋ถ์ ์ผ๋ก ํด๋์ค์ ๊ตฌ์กฐ ์ ๋ณด๋ฅผ ์ด์ฉํด ์๋์ผ๋ก ์์ฑ๋ ํด์ฌ๊ฐ์ด ํ ๋น๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์๊ฐ ์ถ๊ฐ๋๊ฑฐ๋ ์ญ์ ๋๋ฉด serialVersionUID
๊ฐ์ด ๋ฌ๋ผ์ง๊ฒ ๋๋๋ฐ, ๊ธฐ์กด serialVersionUID
๊ฐ ๋ณ๊ฒฝ๋๋ฉด java.io.InvalidCalssException
์ด ๋ฐ์ํ๊ฒ๋๋ค.
private static final long serialVersionUID = 1L;
์ฆ, ์์ ๊ฐ์ด ์ง์ ๊ด๋ฆฌ๋ฅผ ํด์ผ ํด๋์ค๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๋ฌธ์ ์์ด ์ง๋ ฌํ/์ญ์ง๋ ฌํ๊ฐ ๊ฐ๋ฅํ๋ค.
์ด๋, serialVersionUID
๊ฐ ๊ฐ๋ค๊ณ ๋ฌธ์ ์์ด ์ง๋ ฌํ/์ญ์ง๋ ฌํ๋ฅผ ํ ์ ์๋ ๊ฒ์ ์๋๋ค. ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์ ํ์
์ด ๊ฐ์์ผํ๋ฉฐ, ๋ฉค๋ฒ ๋ณ์๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ ๋ณ์๋ช
์ ๋ฐ๊พธ๋ฉด ์์ธ๋ ๋ฐ์ํ์ง ์์ง๋ง ๋ฐ์ดํฐ๋ ๋๋ฝ๋๋ค.
์ง๋ ฌํ ์ฌ์ฉ์ ์ฃผ์์ฌํญ
ํน๋ณํ ๋ฌธ์ ๊ฐ ์์ผ๋ฉด
serialVersionUID
๊ฐ์ ์ง์ ๊ด๋ฆฌํ๋ค.์ธ๋ถ(DB, ์บ์์๋ฒ, NoSQL ์๋ฒ)์ ์ฅ๊ธฐ๊ฐ ์ ์ฅ๋ ์ ๋ณด๋ ์๋ฐ ์ง๋ ฌํ์ฌ์ฉ์ ์ง์ํด์ผํ๋ค. ์ญ์ง๋ ฌํ ๋์ ํด๋์ค๊ฐ ์ธ์ ๋ณ๊ฒฝ์ด ์ผ์ด๋ ์ง ๋ชจ๋ฅด๋ ํ๊ฒฝ์์ ๊ธด ์๊ฐ๋์ ์ธ๋ถ์ ์กด์ฌํ๋ ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ Garbage๊ฐ ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
์์ฃผ ๋ณ๊ฒฝ๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฐ ์ง๋ ฌํ๋ฅผ ์ฌ์ฉํ์ง ๋ง์
๊ฐ๋ฐ์๊ฐ ์ง์ ์ปจํธ๋กค ๊ฐ๋ฅํ ํด๋์ค์ ๊ฐ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์ง๋ ฌํ๋ฅผ ์ง์ํด์ผํ๋ค. ๊ฐ๋ฐ์๊ฐ ์ง์ ์ปจํธ๋กคํ๊ธฐ ํ๋ ๊ฐ์ฒด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ๋ ์ ์ํฌ์์ ์ ๊ณตํ๋ ํด๋์ค ๊ฐ์ฒด๋ฅผ ๋งํ๋ค. ์ด๋ฌํ ๊ฐ์ฒด๊ฐ ์ง์
serialVersionUID
๋ฅผ ๊ฐ๊ณ ์๊ธฐ๋ํด, ๊ฐ๋ฐ์ ํธ์์ ์ง๋ ฌํ ํ์ฌ DB๋๋ ์บ์์ ๋ฐ๋ก ์ ์ฅํ๋ค๋ฉด ๊ทธ๋ก ์ธํด ๋ง์ ๋ฌธ์ ๊ฐ ์ผ๊ธฐ๋๋ค.ํ๋ ์์ํฌ/๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ ์ ํ๋ฉด์
serialVersionUID
๋ณ๊ฒฝ
์ฆ, ๋ณ๊ฒฝ์ ์ทจ์ฝํ๋ฏ๋ก ์๋ฐ ์ง๋ ฌํ ์ฌ์ฉ์์๋ ์์ฃผ ๋ณ๊ฒฝ๋๋ ํด๋์ค์ ๊ฐ์ฒด๋ ์ฌ์ฉ ์ํ๋ ๊ฒ์ด ์ข๋ค. ์ญ์ง๋ ฌํ๊ฐ ๋์ง ์์ ๋ ์์ธ์ฒ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ํ๋ค.
์ฉ๋ ๋ฌธ์
์๋ฐ ์ง๋ ฌํ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ ์ ๋ํ ์ ๋ณด ๋ฑ ํด๋์ค์ ๋ฉํ์ ๋ณด๋ ๊ฐ์ง๊ณ ์์ด ์๋์ ์ผ๋ก ๋ค๋ฅธ ํฌ๋งท์ ๋นํด ์ฉ๋์ ๋ํ ๋ฌธ์ ๊ฐ ์๋ค. ํนํ ํด๋์ค์ ๊ตฌ์กฐ๊ฐ ๊ฑฐ๋ํด์ง ์๋ก ์ฉ๋์ฐจ์ด๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
์ฐํํ ํ์ ๋ค ๊ธฐ์ ๋ธ๋ก๊ทธ ์์ ์ฝ๋
String base64Member = "rO0ABXNyABp3b293YWhhbi5ibG9nLmV4YW0xLk1lbWJlcgAAAAAAAAABAgAESQADYWdlSQAEYWdlMkwABWVtYWlsdAASTGphdmEvbGFuZy9TdHJpbmc7TAAEbmFtZXEAfgABeHAAAAAZAAAAAHQAFmRlbGl2ZXJ5a2ltQGJhZW1pbi5jb210AAnquYDrsLDrr7w="; byte[] serializedMember = Base64.getDecoder().decode(base64Member); System.out.printf("serializedMember (byte size = %s) \n", serializedMember.length); try (ByteArrayInputStream bais = new ByteArrayInputStream(serializedMember)) { try (ObjectInputStream ois = new ObjectInputStream(bais)) { // ์ญ์ง๋ ฌํ๋ Member ๊ฐ์ฒด๋ฅผ ์ฝ์ด์จ๋ค. Object objectMember = ois.readObject(); Member member = (Member) objectMember; // JSON์ผ๋ก ์ง๋ ฌํ ํ์ ๋ ์ฉ๋ ์ฒดํฌ String memberJson = objectMapper.writeValueAsString(member); System.out.println(memberJson); System.out.printf("json (byte size = %s)\n", memberJson.getBytes("utf-8").length); } }
serializedMember (byte size = 146) {"name":"๊น๋ฐฐ๋ฏผ","email":"deliverykim@baemin.com","age":25} json (byte size = 62)
๊ฐ๋จํ ๋ฐ์ดํฐ์ด์ง๋ง JSON์ผ๋ก ์ง๋ ฌํ ํ์๋ ๋ณด๋ค ๋๋ฐฐ ์ด์์ ์ฉ๋ ํฌ๊ธฐ๊ฐ ์ฐจ์ด๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ง๋ ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ ์๋ฒ(Redis, Memcached)์ ์ ์ฅํ๋ ํํ๋ฅผ ๊ฐ์ง ์์คํ ์์ ๋์ฑ ๋๋๋ฌ์ง๋ค. ๋ฉ๋ชจ๋ฆฌ ์๋ฒ ํน์ฑ์ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ด ํฌ์ง ์๊ธฐ ๋๋ฌธ์ ํต์ฌ๋ง ์์ฝํด ์ฌ์ฉํ๋ ํํ๊ฐ ํจ์จ์ ์ด๋ค.
์คํ๋ง ํ๋ ์์ํฌ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ ์บ์ ๋ชจ๋(Spring Data Redis, Spring Session) ์ค ์ธ๋ถ ์์คํ ์ ์ ์ฅํ๋ ํํ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฐ ์ง๋ ฌํ ํํ๋ก ์ ๊ณต๋๊ธฐ ๋๋ฌธ์ ์ด๋ถ๋ถ์ ๊ผญ ์ฃผ์ํด์ผํ๋ค.
ํธํ์ฑ
์๋ฐ ์ง๋ ฌํ๋ฅผ ์ด์ฉํด ์ธ๋ถ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ฉด, ์๋ฐ์์๋ง ์ฝ์ ์ ์๋ ์ ์ด ๊ฐ์ฅ ์์ฌ์ด ์ ์ด๋ค. JSON ํํ๋ก ์ ์ฅ๋์ด์๋ค๋ฉด, ๋ค๋ฅธ ์ธ์ด์์๋ ์กฐ์์ด ๊ฐ๋ฅํ๋ค.
์ฐธ๊ณ
Last updated
Was this helpful?