🎧

007. Database Seeding

1. λ°μ΄ν„°λ² μ΄μŠ€ μ‹œλ”©(database seeding)μ΄λž€?

λ°μ΄ν„°λ² μ΄μŠ€μ˜ 초기 데이터λ₯Ό μ„€μ •ν•˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€.
λͺ¨λΈμ— μš”μ†Œλ₯Ό μΆ”κ°€ν•˜λŠ” λ°©λ²•μœΌλ‘œ μš°λ¦¬λŠ” 두 가지 방법을 μ‚¬μš©ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  • κ΄€λ¦¬μž νŽ˜μ΄μ§€
  • μž₯κ³  Shell
κ·Έλ ‡μ§€λ§Œ μ•„μ£Ό λ§Žμ€ 데이터λ₯Ό μ΄λŸ¬ν•œ λ°©λ²•μœΌλ‘œ 일일이 μ €μž₯ν•˜κΈ°μ—λŠ” 무리가 μžˆμŠ΅λ‹ˆλ‹€. 이럴 λ•Œ loaddata와 dumpdata λͺ…λ Ήμ–΄λ₯Ό ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Β 

2. dumpdata

dumpdata λͺ…λ Ήμ–΄λŠ” ν˜„μž¬ DB에 μžˆλŠ” 데이터λ₯Ό ν…μŠ€νŠΈ ν˜•μ‹μ˜ 파일둜 μ €μž₯ν•˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€. 좔후에 이 νŒŒμΌμ€ loaddata λͺ…λ Ήμ–΄λ₯Ό 톡해 μ½μ–΄μ„œ μ›ν•˜λŠ” DB에 μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
python manage.py dumpdata main --output data.json
  • main : main μ΄λΌλŠ” μ•±μ˜ λͺ¨λΈλ“€μ˜ 데이터λ₯Ό μ €μž₯
  • --output data.json : data.jsonμ΄λΌλŠ” 파일둜 μ €μž₯
Β 
λͺ…λ Ή μˆ˜ν–‰ 결과둜 λ§Œλ“€μ–΄μ§„ data.json νŒŒμΌμ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
[{"model": "main.developer", "pk": 1, "fields": {"name": "ν”„λ‘ νŠΈ μ—”λ“œ"}}, {"model": "main.developer", "pk": 2, "fields": {"name": "λ°±μ—”λ“œ 개발"}}, {"model": "main.developer", "pk": 3, "fields": {"name": "κ²Œμž„ 개발"}}, {"model": "main.developer", "pk": 4, "fields": {"name": "데이터 뢄석과 인곡지λŠ₯"}}, {"model": "main.developer", "pk": 5, "fields": {"name": "μ •λ³΄λ³΄μ•ˆ"}}, {"model": "main.question", "pk": 1, "fields": {"number": 1, "content": "당신이 κ°€μž₯ μž¬λ°Œμ—ˆλ˜ μˆ˜μ—…μ€?"}}, {"model": "main.choice", "pk": 1, "fields": {"content": "ν”„λ‘ νŠΈμ—”λ“œ(HTML, CSS, Javascript, etc)", "question": 1, "developer": 1}}]
Β 
ν•˜μ§€λ§Œ ν•œ μ€„λ‘œ 좜λ ₯λ˜μ–΄ μ•Œμ•„λ³΄κΈ°κ°€ 쉽지 μ•ŠμŠ΅λ‹ˆλ‹€. 그럴 λ•Œμ—λŠ” --indent 4 μ˜΅μ…˜μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.
python manage.py dumpdata main --output data.json --indent 4
Β 
그러면 μ•„λž˜μ™€ 같이 μ•Œμ•„λ³΄κΈ° μ‰½κ²Œ λ“€μ—¬μ“°κΈ°κ°€ λ˜μ–΄μ„œ 좜λ ₯λ©λ‹ˆλ‹€.
[ { "model": "main.developer", "pk": 1, "fields": { "name": "ν”„λ‘ νŠΈ μ—”λ“œ" } }, { "model": "main.developer", "pk": 2, "fields": { "name": "λ°±μ—”λ“œ 개발" } }, { "model": "main.developer", "pk": 3, "fields": { "name": "κ²Œμž„ 개발" } }, { "model": "main.developer", "pk": 4, "fields": { "name": "데이터 뢄석과 인곡지λŠ₯" } }, { "model": "main.developer", "pk": 5, "fields": { "name": "μ •λ³΄λ³΄μ•ˆ" } }, { "model": "main.question", "pk": 1, "fields": { "number": 1, "content": "당신이 κ°€μž₯ μž¬λ°Œμ—ˆλ˜ μˆ˜μ—…μ€?" } }, { "model": "main.choice", "pk": 1, "fields": { "content": "ν”„λ‘ νŠΈμ—”λ“œ(HTML, CSS, Javascript, etc)", "question": 1, "developer": 1 } } ]
Β 

3. loaddata

dumpdataμ—μ„œ μ„€λͺ…ν–ˆλ“―이, loaddataλŠ” dumpdata둜 μƒμ„±λœ 데이터 νŒŒμΌμ„ μ½μ–΄μ„œ DB에 μ €μž₯ν•˜λŠ” λͺ…λ Ήμ–΄μž…λ‹ˆλ‹€. loaddata λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•΄ μš°λ¦¬κ°€ 미리 μ€€λΉ„ν•œ μ„€λ¬Έ 데이터λ₯Ό DB에 μ €μž₯ν•΄λ΄…μ‹œλ‹€.
ν”„λ‘œμ νŠΈ 폴더에 data.json νŒŒμΌμ„ λ§Œλ“€κ³  ν•΄λ‹Ή λ‚΄μš©μ„ λͺ¨λ‘ λ³΅μ‚¬ν•΄μ„œ λΆ™μ—¬λ„£μŠ΅λ‹ˆλ‹€.
notion imagenotion image
Β 
이제 loaddata λͺ…λ Ήμ–΄λ‘œ DB에 μ €μž₯ν•©λ‹ˆλ‹€.
python manage.py loaddata data.json
Β 
notion imagenotion image
사진 처럼 λ‚˜μ˜¨λ‹€λ©΄ μ €μž₯에 μ„±κ³΅ν•œ κ²ƒμž…λ‹ˆλ‹€.
Β 
이제 μ„€λ¬Έ νŽ˜μ΄μ§€λ‘œ μ ‘μ†ν•˜λ©΄ μ €μž₯된 데이터듀이 λͺ¨λ‘ 잘 λ‚˜μ˜€λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
notion imagenotion image