๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ๋ง์ด๋ ์ผ์ ์์ ์กด์ฌํ๋ ๋ชจ๋ ๊ฒ๋ค ์ค ํ์๋กํ๋ ๊ฒ์ ๋ฐ์ดํฐํ ํ์ฌ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ค๋ฃจ๊ธฐ ์ํด ์์ฑ๋ค์ ์ ์ํ๋ฉฐ Databaseํ ์ํค๋ ๊ฒ์ ๋งํ๋ค.
์๋ฅผ๋ค์ด Jobs์ด๋ผ๋ Table์ ์ง์ ์ ์ ๋ณด๋ฅผ ๊ฐ ์์ฑ๋ณ๋ก ์ ์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด๋ ์ ์๋ค.
์์ ์ธ๊ธํ ํ์ ์ธ์๋ ๋ค๋ฅธ ํ์ ๋ค๋ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉํ๋ ์นผ๋ผ๋ค๋ง ๋ค๋ค๋ณด๋ ค๊ณ ํ๋ค.
๋จผ์ ๋ชจ๋ธ๋ง์ ๋ํด์ Django์์์ ๋ชจ๋ธ๋ง์ ๋ฌด์์ด๋ฉฐ ์ด๋ค ์ปฌ๋ผ ํ์ ์ด ์๋์ง ์ค๋ช ํ์ง๋ง, ์ฌ์ค ์ฝ๋๋ฅผ ์ค์ ๋ก ์ฌ์ฉํด ๋ณด์ง ์์ผ๋ฉด ์ ํํ ์๋ฟ์ง ์๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก ์ฝ๋๋ฅผ ๋ง๋ค์ด ๋ณด๋ ค๊ณ ํ๋ค.
์ผ๋ฐ์ ์ธ Django๊ฐ์๋ค์ ์ดํด๋ณด๋ฉด ๋๋ถ๋ถ ์ฒ์ ๋ชจ๋ธ๋ง์ ๋ํด User๋ฅผ ๋ง์ด ์์๋ฅผ ๋ค์ด ์ค๋ช ํ์ง๋ ๋๋ ๊ฒฐ์ ๊ณํ(PayPlan)์ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ธ๋ง์ ์์ํด ๋ณด๊ฒ ๋ค.
๋ชจ๋ธ์ ์์ฑํ๊ธฐ ์ํด ํ๋ก์ ํธ์์ APP์ด ์์ฑ๋์ด ์์ด์ผ ํ๋ค. ์ด APP์ ์์ฑ๋ ๋ชจ๋ธ๋ง ์ฝ๋๋ฅผ ๊ธฐ์ค์ผ๋ก Database์ ํ ์ด๋ธ๊ณผ ์นผ๋ผ๋ค์ด ์์ฑ๋๊ธฐ ๋๋ฌธ์ APP์ ์์ฑ์ด ์ฐ์ ๋์ด์ผ ํ๋ค.
# APP ์์ฑ ๋ช
๋ น์ด
django-admin startapp shortener
์์ ๋ช
๋ น์ด๋ฅผ ์คํํ๋ฉด ์ด๋ฏธ์ง์ ๊ฐ์ด 'shortener'๋ผ๋ ํด๋๊ฐ ์์ฑ๋๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค. ์ด ํด๋์์ ์ดํด๋ณด๋ฉด `models.py`ํ์ผ์ด ์๋๋ฐ ์ฌ๊ธฐ์ ๋ชจ๋ธ๋ง ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
๋ง์ด๊ทธ๋ ์ด์
์ด๋ ๋ชจ๋ธ์ ๋ณ๊ฒฝ ๋ด์ญ์ DB*์คํค๋ง์ ์ ์ฉ์ํค๋ Django์ ๋ฐฉ๋ฒ ์ด๋ผ๊ณ ์ฅ๊ณ ๊ณต์ ๋ฌธ์
์ ์ค๋ช
๋์ด ์๋ค.
Django๋ ORM์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ models.py์ ํด๋์ค๋ฅผ ํตํด DB์คํค๋ง๋ฅผ ์์ฑํ๊ณ ์ปจํธ๋กคํ๊ฒ ๋๋๋ฐ, ์ด๋ DB์คํค๋ง๋ฅผ git ์ฒ๋ผ ๋ฒ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ ์์คํ ์ด๋ผ ๋ณผ ์ ์๋ค.
๋ช ๋ น์ด
python3 manage.py makemigrations [app_name]
python3 manage.py migrate [app_name][migration_name]
python3 manage.py showmigrations [app_name]
python3 manage.py sqlmigrate [app_name][migration_name]
app์ ์ฒ์ ์์ฑํ์๋ค๋ฉด python3 manage.py migrate
๋ก ์ด๊ธฐ ๋ง์ด๊ทธ๋ ์ด์
์ ์งํํ์.
์ํ๋ ๋ชจ๋ธ๋ง ์ฝ๋๋ฅผ ์์ฑํ์๋ค๋ฉด python3 manage.py showmigrations [app_name]
์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
์ ๋ฌด๋ฅผ ํ์ธํ์. 1๋ฒ์ ์งํ์ ์๋ ์ผ์ชฝ๊ณผ ๊ฐ์ด, ์งํ ํ์๋ ์ค๋ฅธ์ชฝ๊ณผ ๊ฐ์ด ๋์จ๋ค.
models.py
from django.db import models
# Create your models here
class PayPlan(models.Model):
name = models.CharField(max_length=20)
price = models.IntegerField()
updated_at = models.DateTimeField(auto_now=True)
create_at = models.DateTimeField(auto_now_add=True)
python3 manage.py makemigrations [app_name]
๋ก ๋ชจ๋ธ๋ง ์ฝ๋์ ๋ํ ๋ง์ด๊ทธ๋ ์ด์
์ ์์ฑํ์. ์๊น์ ๋ค๋ฅด๊ฒ ์์ฑํ app๋ถ๋ถ์ 'no_migrations'ํ๊ธฐ๊ฐ ์ฌ๋ผ์ง๊ณ ์๋ก์ด 001๋ฒํธ๋ฅผ ๊ฐ์ง ๋ง์ด๊ทธ๋ ์ด์
ํ์ผ์ด ์์ฑ๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
python3 manage.py migrate
๋ก ๋ง์ด๊ทธ๋ ์ด์
์ ์งํํ ๋ง์ด๊ทธ๋ ์ด์
์ ํ์ธํด๋ณด์.์ด์ ๋ชจ๋ธ๋งํ ์ฝ๋๊ฐ DB*์คํค๋ง์ ์ ์ฉ๋ ๊ฒ์ด๋ค.
001_initial
์ฌ๊ธฐ์ ์์์ ๋ชจ๋ธ๋ง ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์์ฑํ ๋ง์ด๊ทธ๋ ์ด์
ํ์ผ์ ํ์ธํด ๋ณด์. name, price, updated_at, create_at ์ ์์ฑํ ๋๋ก ์์ฑํ๋ ํญ๋ชฉ์์ ํ์ธ์ด ๋๋ค.
ํ์ง๋ง id๋ ์ฐ๋ฆฌ๊ฐ ์์ฑํ์ง ์์๋๋ฐ ์์ฑํ๋ ํญ๋ชฉ์ผ๋ก ์ถ๊ฐ๋์ด ์๋ ๊ฒ์ด ๋ณด์ผ ๊ฒ์ด๋ค. ์ด๊ฒ์ primary_key๋ก ์นผ๋ผ์ ์์ฑํ์ง ์์ผ๋ฉด ์๋์ผ๋ก ์ฅ๊ณ ์์ ์์ฑํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
Django๊ฐ ์์ ํ์ผ์์ ๋ณด์ด๋ ๊ฒ๊ณผ ๊ฐ์ด 001, 002, 003...๊ณผ ๊ฐ์ด ์์ฑ๋๋ ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ์ด ๋์ ๋์ด ๋ฒ์ ์ ๊ด๋ฆฌํ๊ณ ์๋ ๊ฒ์ด๋ค.(์ ๋ ์ค๊ฐ์ ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ์ ์ญ์ ํ๋ฉด ์๋๋ค.)
Django๋ ๊ด๋ฆฌ์ํ์ด์ง์ ๋ํ ์๋น์ค๊ฐ ๋ฌด์ฒ์ด๋ ๋ง์ด ์ ๊ณต๋๋ค. ๊ทธ ์ค ํ๋๊ฐ ๊ด๋ฆฌ์ ๊ณ์ ์ ์์ฑํ๋ ๊ฒ์ธ๋ฐ ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ์ฌ ๊ด๋ฆฌ์ ์ํผ ์ ์ ๋ฅผ ์์ฑํด ๋ณด์.
python3 manage.py createsuperuser
์์์ ์์ฑํ PayPlan ํ ์ด๋ธ์ ํ์ธํด ๋ณผํ ๋ฐ Django๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ฌด๋ฐ ์ค์ ์ ํ์ง ์๊ณ ๋ง์ด๊ทธ๋ ์ด์ ์ ์งํํ๋ฉด sqlite๋ก ํ์ผ์ด ์์ฑ๋๋ค.
ํ๋ก์ ํธ์์ db.sqlite3๋ฅผ ๋๋ฌ์ ์ด๋ ค๊ณ ์๋ํ๋ฉด ํ์ธํ ์ ์๋ค๊ณ ๋์ฌ ๊ฒ์ด๋ค. EXTENSIONS
์์ SQLite Viewer
๋ผ๋ ํจํค์ง๋ฅผ ์ค์นํ๊ณ ๋ค์ํ๋ฒ sqliteํ์ผ์ ์ด์ด๋ณด์.
์ด์ ๊ฐ์ด ํ์ผ์ด ์ด๋ฆฌ๋ ๊ฒ์ ํ์ธํ๋ค๋ฉด Tablesํญ๋ชฉ๊ณผ ๊ทธ ์์ shortener_payplan์ด๋ผ๋ ํ ์ด๋ธ์ด ์์ ๊ฒ์ด๋ค.
๊ทธ ์์ ์์์ ์์ฑํ 0001_initialํ์ผ์ ๋ด์ฉ id, name, price, updated_at, create_at ์นผ๋ผ์ด ์์ฑ๋ ๊ฒ์ ํ์ธ ํ ์ ์๋ค.
๐ง๐ปโ๐ป ์ด ๋ฐฉ๋ฒ ์ธ์๋ ๊ด๋ฆฌ์ ํ์ด์ง์ ๋ค์ด๊ฐ๊ฑฐ๋ DBํด์ ์ฌ์ฉ ๋ฑ ํ์ธ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ค์ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฐฉ๋ฒ์ด ๋ถํธํ๋ฉด ๊ตฌ๊ธ๋งํ์ฌ Django DB๋ฅผ ํ์ธ ํ ์ ์๋ ๋๋ง์ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด์.