Study Anything ๐ง
[Django] ๋ชจ๋ธ ์์ ํ๊ณ ์ญ์ ํ๊ธฐ ๋ณธ๋ฌธ
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค๊ฐ ์ด๊ธฐ์ ์์ฑํ๋ ๋ชจ๋ธ ๋ด์ฉ์ ์์ ํ๊ณ ,
๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ญ์ ํด์ผ ํ ์ด์๊ฐ ๋ฐ์ํด์ ๊ด๋ จ ๋ด์ฉ์ ์ํํ๊ณ ๊ธ๋ก ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
(1) ๋ชจ๋ธ ์์ ํ๊ธฐ
๊ธฐ์กด์ ์์ฑํ๋ ๋ชจ๋ธ์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค.
# app/models.py
class Review(models.Model):
reviewId = models.IntegerField(primary_key=True) # ์ญ์ ํ ๋ด์ฉ
userId = models.ForeignKey(User, on_delete=models.CASCADE)
bookId = models.CharField(max_length=30)
reviewTxt = models.TextField()
์ด ๋ด์ฉ์์ ์ํ ์ ๋ชฉ, ์ํ ํ์ , ์ํ ์์ฑ๋ ์ง ํ๋๋ฅผ ์ถ๊ฐํ๊ณ
PK์ธ reviewId ํ๋๋ฅผ ์ญ์ ํ์ฌ ์ฅ๊ณ ๋ชจ๋ธ์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ id๋ฅผ PK๋ก ์ฌ์ฉํ๋ ค๊ณ ํ๋ค.
๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ์ฌ ํ์ผ์ ๋จผ์ ์์ ํ๋ค.
# app/models.py
class Review(models.Model):
userId = models.ForeignKey(User, on_delete=models.CASCADE)
bookId = models.CharField(max_length=30)
reviewTitle = models.CharField(max_length=200) # ์ถ๊ฐํ ๋ด์ฉ
reviewDate = models.DateField(auto_now_add=True) # ์ถ๊ฐํ ๋ด์ฉ
reviewRate = models.IntegerField() # ์ถ๊ฐํ ๋ด์ฉ
reviewTxt = models.TextField()
์ํ ๋ ์ง(reviewDate) ํ๋๋ฅผ models.DateField() ๋ก ์ค์ ํ๊ณ , ์์ฑ์ auto_now_add=True ๋ฅผ ์ฃผ์ด์
๋ฐ์ดํฐ๊ฐ ์์ฑ๋ ๋ ์ง๋ฅผ ํ๋ ๋ด์ฉ์ผ๋ก ์ค์ ํ๊ณ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๋ ์ง๊ฐ ๋ณํ์ง ์๋๋ก ์ค์ ํ๋ค.
* models.DateField() ์์ auto_now ์์ฑ์ True ๋ก ์ค์ ํ๋ฉด ์ ๋ฐ์ดํธ ๋ ๋ ์ง๋ก ๋ฐ์๋๋ค.
(2) DB ์์ ํ๊ธฐ
models.py ํ์ผ์ ์์ ํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก๋ migrate ๋ช ๋ น์ ์ํํด์ผ ํ์ง๋ง,
PK ํ๋๊ฐ ์ญ์ ๋์๊ณ ๊ธฐ์กด์ ๋ฐ์ดํฐ๋ ์ ๋ถ ์ญ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ ์ด๋ธ ์์ฒด๋ฅผ ์ญ์ ํ๊ณ
์๋ก ์์ฑํ ๋ด์ฉ์ผ๋ก ํ ์ด๋ธ์ ๋ค์ ์์ฑํ๊ธฐ๋ก ํ์๋ค.
๊ทธ๋ฌ๋ migration ํ์ผ์ด ๊ณ์ํด์ ๋จ์์์ผ๋ฉด ์ํํ๊ฒ DB์ ๋ฐ์๋์ง ์๊ธฐ ๋๋ฌธ์
ํ ์ด๋ธ ์ญ์ ๋ ๋ค์์ ์์๋ฅผ ๋ฐ๋ผ์ ์ํํ๋ค.
<1> migration ํ์ผ ์ญ์
๋ชจ๋ธ์ ์์ฑํ๊ณ ๋์ migrate ๋ฅผ ํ ๋ฒ์ด๋ผ๋ ์ํํ๋ค๋ฉด migrations ํด๋๊ฐ ์์ฑ๋๋๋ฐ,
ํด๋น ํด๋ ์์ ์๋ ํ์ผ๋ค ์ค __init__.py ํ์ผ์ ์ ์ธํ ๋ชจ๋ ํ์ผ์ ์ญ์ ํ๋ค.
migration ํ์ผ ์์๋ ๊ธฐ์กด์ ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ธ์ ์ ๋ณด๊ฐ ๋ค์ด์๊ธฐ ๋๋ฌธ์
ํด๋น ํ์ผ๋ค์ ์ญ์ ํด์ผ ์๋กญ๊ฒ ๋ชจ๋ธ์ ์์ฑํ ๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
<2> migrations ํ ์ด๋ธ ๋ฐ์ดํฐ ์ญ์
django_migrations ํ ์ด๋ธ ์์ ํด๋น ์ฑ์ migrations ๋ด์ฉ์ด ์๊ธฐ ๋๋ฌธ์ ํด๋น ๋ ์ฝ๋๋ ์ญ์ ํ๋ค.
ํ๋ก๊ทธ๋จ์ SQLite ์ GUI ๋๊ตฌ์ธ DB Brower for SQLite ๋ฅผ ์ฌ์ฉํ๋ค.
<3> ํ ์ด๋ธ ์ญ์
๋ง์ง๋ง์ผ๋ก๋ ํ ์ด๋ธ์ ์ญ์ ํ๋ค.
(3) ๋ณ๊ฒฝ์ฌํญ ์ ์ฉํ๊ธฐ
ํ์ผ์ ๋ด์ฉ์ ์์ ํ๊ณ DB ์์๋ ๊ด๋ จ ๋ด์ฉ์ ๋ชจ๋ ์ญ์ ํ๋ค๋ฉด
๋ง์ง๋ง ๋จ๊ณ๋ ๋ณ๊ฒฝํ ๋ด์ฉ์ ํ๋ก์ ํธ์ ์ ์ฉํ๋ ๋จ๊ณ์ด๋ค.
cmd ์ฐฝ์ ์ด์ด์ ๋ค์ ๋ช ๋ น์ด๋ค์ ์ฐจ๋ก๋๋ก ์ ๋ ฅํ๋ค.
makemigrations ๋ช ๋ น์ด๋ migrate ๋ช ๋ น์ ์ํํ๊ธฐ์ ์์
๋ชจ๋ธ๊ณผ ๊ด๋ จํ SQL ๋ด์ฉ์ ๋ด์ migrations ํ์ผ์ ์์ฑํด์ฃผ๋ ๋ช ๋ น์ด์ด๋ค.
์ฆ, ์ฐ๋ฆฌ๊ฐ (2)-<1> ๋จ๊ณ์์ ์ญ์ ํ๋ ํ์ผ์ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ ๋ง์ถฐ์ ๋ค์ ์์ฑํ๋ ๊ฒ์ด๋ค.
(venv) C:\์๋ต\Project> python manage.py makemigrations
sqlmigrate ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด migrate ๋ฅผ ์ํํ ๋ ์ด๋ค SQL ๊ตฌ๋ฌธ์ด ์ํ๋๋์ง ์์ธํ ๋ณผ ์ ์๋ค.
app ๋ค์ ์ซ์๋ migrations ํ์ผ์ ๋ฒํธ๋ก, ํด๋น ํ์ผ์ด ๋ด๊ณ ์๋ SQL ๊ตฌ๋ฌธ์ ๋ณด์ฌ์ฃผ๊ฒ ๋๋ค.
(venv) C:\์๋ต\Project> python manage.py sqlmigrate app 0001
migrate ๋ช ๋ น์ ์ํํ๋ฉด ๋ชจ๋ธ์ ๋ณ๊ฒฝํ ๋ด์ฉ์ด ํ๋ก์ ํธ์ ์ ์ฉ๋๋ค.
(venv) C:\์๋ต\Project> python manage.py migrate
์ ๊ณผ์ ์ ๊ฑฐ์ณ ์ฅ๊ณ ํ๋ก์ ํธ์ ์ฑ ๋ชจ๋ธ์ ๋ณ๊ฒฝํ๊ณ ์ญ์ ํ๋ ์์ ์ ์๋ฃํ๋ค.
์๋กญ๊ฒ ํ ์ด๋ธ์ ๋ง๋ค๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํด๋ณด์๋ค.
์๋ ํ์ด์ง๋ REST API ๋ฅผ ์ฌ์ฉํ๊ณ , ๊ด๋ จ ๋ด์ฉ์ ๋ค๋ฅธ ํฌ์คํธ์์ ์์ธํ ๋ค๋ฃจ์๋ค.