2022. 7. 11. 12:43ใ๐ฅ CS ์ง์
Serialization์ ๋ํด ๋ค์ด๋ณด์ จ๋์?
์ผํ ๋ค์ด๋ง ๋ณธ ๋ง์ฐํ ๋จ์ด์์ ๊ฒ์ ๋๋ค.
์ด๋ฒ ํฌ์คํ ์์ Serialization์ ๊ฐ๋ ๊ณผ ์์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ชฉ์ฐจ
๐ Serialization ๊ฐ๋
๐ Serialization ์์ (python-pickle)
๐ Serialization ์ข ๋ฅ๊ณผ ๊ฐ ์ฅ๋จ์
Serialization ๊ฐ๋
๐ ์ ์
Serializaiton์ ์ง์ญํ๋ฉด '์ง๋ ฌํ'์ ๋๋ค.
๊ฐ๋ฐ์๊ฐ ์์ฑํ ๊ฐ์ฒด(object)๋ฅผ byte ํ์ ์ผ๋ก ๋ณํํ๋ ๊ธฐ์ ์ ๋๋ค.
๐ ์ byte ํ์ ์ผ๋ก ๋ณํํ๋๊ฐ?
ํ ํ๋ก๊ทธ๋จ ๋ด์์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๊ตณ์ด byte ํ์ ์ผ๋ก ๋ณํํ ์ด์ ๊ฐ ์์ต๋๋ค. ํ์ง๋ง ์ํํธ์จ์ด๋ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ๊ณผ ์ธ๋ถ ํต์ ๋ค์ด ์๋ก ์ํธ์์ฉํ๋ฉฐ ์๋ํฉ๋๋ค. ์ํธ์์ฉ์ ์ํด์ ๊ฐ์ฒด๋ฅผ ์ ์ฅ/์ ์กํ ์ ์๊ฒ ํน์ ํฌ๋งท์ผ๋ก ๋ณํํด์ค์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ ํน์ ํฌ๋งท์ผ๋ก ๋ณํํ๋ ๊ฒ์ด Serialization์ ๋๋ค.
๐ Deserialization์ ๋ฌด์์ธ๊ฐ?
Serailization์ ํตํด ํน์ ํฌ๋งท์ผ๋ก ๋ณ๊ฒฝํ๋ค๋ฉด, ๋์ค์ ๋ค์ ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์์ํ๋ก ๋ณต๊ตฌ์์ผ์ผ ํฉ๋๋ค. ์ด ๋ณต๊ตฌ ์์ ์ Deserialization์ด๋ผ๊ณ ํฉ๋๋ค.
Serialization ์์ (python-pickle)
๐ Python์ pickle
Python์ pickle์ด Serialization ์์ ์ค ํ๋์ ๋๋ค.
๋ฐ์ดํฐ์ ํ์ ๋ณ๊ฒฝ ์์ด pickle์ ํตํด ํด๋์ค, ๋ณ์ ๋ฑ ๋ค์ํ ๊ฐ์ฒด๋ค์ ์ ์ฅํ๊ณ , ๋ถ๋ฌ๋ผ ์ ์์ต๋๋ค.
๋ฐ๋ก ์์ ์ฝ๋๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๐ pickle ์์ ์ฝ๋
(1) import pickle
import pickle
(2) ์ํ๋ ๊ฐ์ฒด ์์ฑ
class player:
def __init__(self, name, height, weight):
self.name = name;
self.height = height;
self.weight = weight;
def introduce(self):
print(f"์ ์ ์ด๋ฆ : {self.name}")
print(f"์ ์ ํค : {self.height}")
print(f"์ ์ ๋ชธ๋ฌด๊ฒ : {self.weight}")
nadal = player("๋๋ฌ", 185, 85)
(3) pickle์ ํตํด Serialization(์ ๋ ฅ) - pickle.dump(data, file)
with open("player.txt", 'wb') as f:
pickle.dump(nadal, f)
(4) pickle์ ํตํด Deserialization(๋ก๋) - pickle.load(file)
with open("player.txt", 'rb') as f:
nadal_2 = pickle.load(f)
(5) ํ์ฉํ๊ธฐ
pickle๋ก Serailization ํ๊ธฐ ์ ์ ๊ฐ์ฒด์ ๋๊ฐ์ด ์๋ํจ์ ํ์ธํ ์ ์์ต๋๋ค.
nadal_2.introduce()
์ ์ ์ด๋ฆ : ๋๋ฌ
์ ์ ํค : 185
์ ์ ๋ชธ๋ฌด๊ฒ : 85
๐ pickle๋ก load ํ ๊ฒฝ์ฐ, ๋ฐ๋์ pickle.dump ํ ํ์ผ๋ก ์งํํด์ผ ํฉ๋๋ค.
Serialization ์ข ๋ฅ๊ณผ ๊ฐ ์ฅ๋จ์
Python๊ณผ ์น์ํ ๋ํ์ ์ธ 3๊ฐ์ง Serailization์ ์์๋ณด๊ฒ ์ต๋๋ค.
๐ JSON
JavaScript Object Notation์ ์ค์๋ง๋ก, Javascript ๊ฐ์ฒด ๋ฌธ๋ฒ์ผ๋ก ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ํํํ๊ธฐ ์ํ ๋ฌธ์ ๊ธฐ๋ฐ์ ํ์ค ํฌ๋งท์ ๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ์ฌ์ฉํฉ๋๋ค.
{
"์ด๋ฆ" : "๊ฐ",
"ํค" : ํค๊ฐ,
"๋ชธ๋ฌด๊ฒ" : ๋ชธ๋ฌด๊ฒ๊ฐ
}
์ฅ์
1. ๋ฌธ์์ด ํํ๋ก ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ฝ๊ณ ์ฐ๊ธฐ๊ฐ ์ฝ์ต๋๋ค.
2. ๋ค๋ฅธ ์ธ์ด์์ ๊ตฌํํ๊ธฐ ์ฝ์ต๋๋ค.
๋จ์
1. ์น ๋ธ๋ผ์ฐ์ ๊ฐ ์ฃผ๊ฐ ๋๋ ํ๊ฒฝ, Javascript๊ฐ ์ฐ๋ํ๋ ํ๊ฒฝ ์์ฃผ๋ก ํผ์ง๊ณ ์๋ค.
2. ๊ทธ๋ ์ง ์์ ๊ณณ์์ JSON ์ ์จ๋ ๋ฌธ์ ์์ต๋๋ค.
๐ CSV
ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ํ์ผ ํ์์ ๋๋ค.
ํ๋์ CSV ํ์ผ์ ํ๋์ ๋ ๋ฆฝ๋ 2์ฐจ์ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ ๋๋ค.
๊ฐ ์ค์ ํ๋์ ํ์ ํด๋นํ๊ณ , ๊ฐ ์ด ์ฌ์ด์๋ ์ผํ(,)๋ฅผ ๋ฃ์ด ๊ตฌ๋ถํฉ๋๋ค.
์ด๋ฆ, ํค, ๋ชธ๋ฌด๊ฒ
๋๋ฌ, 185, 85
ํ๋๋ฌ, 184, 78
์ฅ์
1. ์ง๊ด์ ์ผ๋ก ๋ํ๋๊ธฐ์ ์ดํดํ๊ธฐ ์ฝ๋ค.
2. ๋ณ๋ค๋ฅธ parser/encoder๊ฐ ํ์ ์๋ค.
3. ์ฉ๋์ด ์ ๋ค.
๋จ์
1. ๋ฐ์ดํฐ์ ์ผํ๊ฐ ํฌํจ๋์ด ์์ ๊ฒฝ์ฐ ์ทจ๊ธํ๊ธฐ ๊ณค๋ํ๋ค.
2. ๋ฐ์ดํฐ ์ค์ผ์ ๋๋จํ ์ทจ์ฝํ ํฌ๋งท์ด๋ค.
3. ๋ฐ๋ผ์ ๋ฐ์ดํฐ ๊ตํ ํฌ๋งท์ผ๋ก XML, JSON์ ์ด๋ค.
๐ Pickle
python์์๋ง ์ฌ์ฉํ ์ ์๋ ์ง๋ ฌํ์ ๋๋ค.
์ฐ์์ ์ธ ๋ฐ์ดํฐ๋ฅผ binary ํ์์ผ๋ก ์ ์ฅํฉ๋๋ค.
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x03\x00\x00\x00leeq\
์ฅ์
1. ๊ฐ์ฒด(ํด๋์ค, ๋ณ์ ๋ฑ)๋ฅผ ๋ฐ์ดํฐ๋ก ์ ์ฅํ ์ ์์ผ๋ฉฐ, ์๋ณธ ๊ทธ๋๋ก load๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
๋จ์
1. ์ฌ๋์ด ์ฝ์ ์ ์์ต๋๋ค. pickle ํฌ๋งท์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ ์ผ๋ก ์์ ํ ์ ์์ต๋๋ค.
2. python์์๋ง ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ฌ์ฉ ๋ฒ์๊ฐ ์ ํ๋ฉ๋๋ค.
3. ์ ์์ ์ธ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, ์ญ์ง๋ ฌํ๋ฅผ ํ๋ฉด ์์คํ ์ด ํผํด๋ฅผ ์ ์ ์ ์์ต๋๋ค.
๐ pickle ์์ ์์คํ ๋ช ๋ น์ด๋ฅผ ์จ๊ฒจ๋๊ณ ๋ซ์ ๊ธฐ๋ค๋ฆฌ๋ฉด...
๊ฒฐ๋ก
Serailization์ ์ด๋ป๊ฒ ๋ณด๋ฉด ํ๋์ ํ์ผ ํฌ๋งท ๋ฐฉ์์ ๋๋ค.
๊ฐ๋จํ๊ฒ ๋ณด๊ณ ๋์ด๊ฐ ์๋ ์๊ฒ ์ง๋ง, Data ์ฐ์ ์์ ์์ฃผ ์ค์ํ ๋ถ๋ถ์ ๋๋ค. ์ด๋ค Serialization์ ์ฌ์ฉํ๋์ ๋ฐ๋ผ ํ์ผ์ ์ฉ๋, ํธ์์ฑ์ด ํฌ๊ฒ ๋ฌ๋ผ์ง ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด๋ค Serialization์ ์ธ ๊ฒ์ธ์ง ์ถฉ๋ถํ ๊ณ ๋ฏผํ๊ณ ์ฝ๋๋ฅผ ์ง๋ ๊ฒ์ด ํจ์จ์ ์ด๊ณ ๋น ๋ฅธ ํ๋ก๊ทธ๋จ์ ์ค๊ณํ๋๋ฐ ํฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
'๐ฅ CS ์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS ์ง์] ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP) ๊ฐ๋ ๋ฐ ์์ (0) | 2022.06.26 |
---|---|
[CS์ง์] ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ๋ํ์ฌ (0) | 2022.06.12 |