[CS ์ง€์‹] Serialization์˜ ๊ฐœ๋…๊ณผ ์˜ˆ์ œ

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์„ ์“ธ ๊ฒƒ์ธ์ง€ ์ถฉ๋ถ„ํžˆ ๊ณ ๋ฏผํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๊ณ  ๋น ๋ฅธ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค๊ณ„ํ•˜๋Š”๋ฐ ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.