ํ๋ฐํ ์ด์ง์ ํ๋ฉด์,
๊ด์ฌ ์๋ Django์ ๋ํด ๋ค์ ๊ณต๋ถํด๋ณด์๋ค.
Django๋ฅผ ์ฌ์ฉํ๋ฉด์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ์ด
serialize์ด๋ค.
Django์ Python์ Serialize์ ๊ธฐ์ด
์๋ฆฌ์ผ๋ผ์ด์ ์ด์
(serialization)์ ๊ฐ์ฒด๋ฅผ
ํน์ ํ์์ผ๋ก ๋ณํํ์ฌ ์ ์ฅํ๊ฑฐ๋
๋คํธ์ํฌ๋ฅผ ํตํด ์ ์กํ ์ ์๊ฒ ํ๋ ๊ณผ์ ์ด๋ค.
deserialization์ ๊ทธ ๋ฐ๋์ ๊ณผ์ ์ ์๋ฏธํ๋ค.
Django์์๋ ์ด๋ฌํ ๊ณผ์ ์ ์ํํ๋๋ฐ
python์ ๋ด์ฅ ๋ชจ๋์ธ pickle ๋๋ json์ ์ฌ์ฉํด
๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํ ํ ์ ์๋ค
python์ pickle ๋ชจ๋์ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ๋ฐ์ด๋๋ฆฌ ํ์์ผ๋ก ์ ์ฅํ๋ฉฐ,
๋๋ถ๋ถ์ python ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ ํ ์ ์๋ค.
์ฌ๊ธฐ์ ์ง๋ ฌํ๋ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๊ทธ๋ฌ๋, ๋ณด์์์ ์ด์ ๋ก ์ ๋ขฐํ ์ ์๋ ์์ค์์ ๋ฐ์
pickle ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ๊ฒ์ ์ํํ๋ค.
๋ฐ๋ฉด, json์ ์ฌ๋์ด ์ฝ์ ์ ์๋ ํ
์คํธ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
๋์
๋๋ฆฌ, ๋ฆฌ์คํธ, ๋ฌธ์์ด, ์ซ์ ๋ฑ์ ๊ฐ๋จํ python ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ
JSON ํ์์ผ๋ก ์ง๋ ฌํ ํ ์ ์๋ค.
Django์์๋ models.py์ ์ ์ ๋ ๋ชจ๋ธ ํด๋์ค์
์ธ์คํด์ค๋ฅผ ์ง๋ ฌํํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ฑฐ๋
HTTP requests/response ๋ฉ์์ง์ ํฌํจ์์ผ ์ ์กํ ์ ์๋ค.
Django๋ ๋ชจ๋ธ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ง๋ ฌํ ํ ๋
๋ชจ๋ธ ํด๋์ค์ ํ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ง๋ ฌํ๋ฅผ ์ํํ๋ค.
์ด ๋, Django๋ serialize ๋ฉ์๋๋ฅผ ์ฌ์ฉํด
๋ชจ๋ธ ์ธ์คํด์ค๋ฅผ ์ฌ์ ํํ๋ก ๋ณํํ๊ณ ,
deserialize ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ฌ์ ์ ๋ชจ๋ธ ์ธ์คํด์ค๋ก ๋ณํํ๋ค.
from django.core import serializers
post = Post.objects.get(pk=1)
data = serializers.serialize('json', [post])
์ ์ฝ๋์์ โjsonโ์ ์ง๋ ฌํ ํ์์ ์๋ฏธํ๋ฉฐ,
๋ ๋ฒ์งธ ์ธ์๋ ์ง๋ ฌํ ํ ๊ฐ์ฒด๋ฅผ ๋ํ๋ธ๋ค.
์ด๋ ๊ฒ ์ง๋ ฌํ ๋ ๋ฐ์ดํฐ๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ผ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋๋ค.
์ง๋ ฌํ ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๋ชจ๋ธ ์ธ์คํด์ค๋ก ๋ณํํ๋ ค๋ฉด
์ฆ, ์ญ์ง๋ ฌํํ๋ ค๋ฉด deserialize ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
ํ์ด์ฌ์์ ๋ฐ์ดํฐ ์๋ฆฌ์ผ๋ผ์ด์ฆ ์ดํดํ๊ธฐ
์๋ฆฌ์ผ๋ผ์ด์ ์ด์
(serialization)์ ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ
๋จ์ํ ํ์์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ด๋ค.
์ด ๊ณผ์ ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋
๋คํธ์ํฌ๋ฅผ ํตํด ์ ์กํ ์ ์๊ฒ ๋๋ค.
๋ํ์ ์ธ ์์๊ฐ ๋ฐ๋ก JSON์ด๋ค.
python์์๋ JSON ๋ชจ๋์ ์ฌ์ฉํ์ฌ
์๋ฆฌ์ผ๋ผ์ด์ฆ ๋ฐ ๋์๋ฆฌ์ผ๋ผ์ด์ฆ๋ฅผ ์ํํ ์ ์๋ค.
JSON ๋ชจ๋์ Dictionary์ List๋ฅผ JSON ํ์์ผ๋ก ๋ณํํ๊ฑฐ๋
JSON ํ์์ Dictionary์ List๋ก ๋ณํํ ์ ์๋ค.
import json
data = {
'name': 'Sam',
'age': 25,
'city': 'Seoul'
}
sam_data = json.dumps(data)
print(sam_data)
new_data = json.loads(sam_data)
print(new_data)
์ ์ฝ๋๋ python์ Dictionary๋ฅผ JSON ํ์์ผ๋ก ๋ณํํ๋ ์ฝ๋์ด๋ค.
dumps() ๋ฉ์๋๋ Dictionary๋ฅผ JSON ํ์์ ๋ฌธ์์ด๋ก ๋ณํํ๋ค.
loads() ๋ฉ์๋๋ JSON ํ์์ ๋ฌธ์์ด์ Dictionary๋ก ๋ณํํ๋ค.
์ ์ฝ๋๋ ๋์
๋๋ฆฌ๋ฅผ JSON ํ์์ผ๋ก ๋ณํํ๊ณ ,
๋ค์ JSON ํ์์ ๋์
๋๋ฆฌ๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋ณด์ฌ์ค๋ค.
๊ฐ์ฒด ์ง๋ ฌํ๋ ๊ฐ์ฒด๋ฅผ ๋ฉ๋ชจ๋ฆฌ ์์ ์ํ์์
์ธ๋ถ ํ์์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ด๋ค.
์ฆ, ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ํ๋ด๋ ๊ฐ๋ค์ ๋ชจ์์
์ธ๋ถ ํ์์ผ๋ก ํํํ๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ๊ฐ์ฒด ์ง๋ ฌํ๋ ์ฃผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ์ผ ์์คํ
์
๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ฑฐ๋ ๋คํธ์ํฌ๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์ ์กํ ๋ ์ฌ์ฉ๋๋ค.
python์์๋ pickle ๋ชจ๋์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ์ง๋ ฌํ ํ ์ ์๋ค.
๊ทธ๋ฌ๋, ์ฃผ์ํ ์ ์ pickle ๋ชจ๋์ ๋ณด์์์ ์ด์ ๋ก
์
์์ ์ธ ๋ชฉ์ ์ ๊ฐ์ง ์ฌ์ฉ์๊ฐ pickle ํ์์ผ๋ก ์ธ์ฝ๋ฉ ๋ ๋ฐ์ดํฐ๋ฅผ
์์ ํ์ฌ ์์ํ์ง ๋ชปํ ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค.
๋ฐ๋ผ์, pickle ๋ชจ๋์ ์ฌ์ฉํ ๋๋ ์ ๋ขฐํ ์ ์๋ ๋ฐ์ดํฐ๋ง
pickle ํ์์ผ๋ก ์ธ์ฝ๋ฉํ๊ณ ๋์ฝ๋ฉํด์ผ ํ๋ค.
Django ๋ชจ๋ธ ์ธ์คํด์ค์ ์๋ฆฌ์ผ๋ผ์ด์ง ๊ณผ์
์ฅ๊ณ ์์๋ ๋ชจ๋ธ์ ํ๋ ๊ฐ๋ค์
JSON ํ์์ผ๋ก ๋ณํํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ค.
์ด๋, ๊ฐ ํ๋๋ ํด๋น ํ์
์ ๋ฐ๋ผ ์ ์ ํ ๋ฐฉ์์ผ๋ก ์๋ฆฌ์ผ๋ผ์ด์ฆ ๋๋ค.
์๋ฅผ ๋ค์ด, CharField๋ ๋ฌธ์์ด๋ก, IntegerField๋ ์ ์๋ก ๋ณํ๋๋ค.
๋ง์ฝ, ๋ชจ๋ธ์ ํ๋๊ฐ ๋ค๋ฅธ ๋ชจ๋ธ์ ์ฐธ์กฐํ๋
ForeignKey๋ ManyToManyField์ธ ๊ฒฝ์ฐ,
ํด๋น ๋ชจ๋ธ์ ๊ธฐ๋ณธ ํค ๊ฐ์ด JSON ํ์์ผ๋ก ๋ณํ๋๋ค.
์ด๋ฌํ Django์ ์๋ฆฌ์ผ๋ผ์ด์ง ๊ณผ์ ๋๋ถ์
๊ฐ๋ฐ์๋ ๋ณต์กํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ง์ ํ์ง ์์๋ ๋๋ค.
ํ์ง๋ง, ํน์ ํ๋๋ฅผ ์ง์ ์ ์ดํด์ผํ๋ ๊ฒฝ์ฐ๋
serializer ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ์๋ฆฌ์ผ๋ผ์ด์ฆ ํ ์ ์๋ค.
serializer ํด๋์ค๋ ModelSerializer ํด๋์ค๋ฅผ ์์๋ฐ์
ํ๋ ๋จ์๋ก ์ ์ดํ ์ ์๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๋ค.
์๋ฅผ ๋ค์ด ํ๋๋ฅผ ์จ๊ธฐ๊ฑฐ๋, ํน์ ํ๋๋ง ์๋ฆฌ์ผ๋ผ์ด์ฆ ํ ์ ์๋ค.
์ด๋ฌํ ๊ณผ์ ์ API๊ฐ ์ ์ฐํ๊ฒ ๋์ํ๋๋ก ํ๋๋ฐ ๋์์ด ๋๋ค.