์๋ ํ์ธ์! ์น ๊ฐ๋ฐ์ ์์ํ๋ ค๋ ์ด๋ณด ๊ฐ๋ฐ์๋, ํ์ด์ฌ์ ๊ฐ๋ ฅํ ์น ํ๋ ์์ํฌ **Django(์ฅ๊ณ )**๋ฅผ ๋ง๋๋ณด์ จ๊ตฐ์! Django๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค(DB) ์ฐ๋์ ๋งค์ฐ ์ฝ๊ณ ์ฌ๋ฏธ์๊ฒ ํ ์ ์์ต๋๋ค.
์ด๋ฒ ๋ธ๋ก๊ทธ ๊ธ์์๋ Django์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ SQLite๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค๊ณ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ด๋ณด์ ๋๋์ด์ ๋ง์ถฐ ๋จ๊ณ๋ณ๋ก ์ค๋ช ํด ๋๋ฆด๊ฒ์!
๐ก 1. Django์ ๋ฐ์ดํฐ๋ฒ ์ด์ค: ORM์ ๋ง๋ฒ ✨
Django๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ์์ ์กฐ๊ธ ํน๋ณํฉ๋๋ค. ๋ฐ๋ก **ORM(Object-Relational Mapping)**์ด๋ผ๋ ๊ฐ๋ ๋๋ถ์ธ๋ฐ์.
์ฝ๊ฒ ์ดํดํ๊ธฐ: ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ณดํต SQL์ด๋ผ๋ ์ธ์ด๋ฅผ ์ฌ์ฉํด์ ๋ค๋ฃน๋๋ค. ํ์ง๋ง ORM์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ํ์ด์ฌ **ํด๋์ค(Class)์ ๊ฐ์ฒด(Object)**๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ **ํ ์ด๋ธ(Table)๊ณผ ๋ฐ์ดํฐ(Data)**์ ์ฐ๊ฒฐํด์ฃผ๋ ๋ค๋ฆฌ ์ญํ ์ ํฉ๋๋ค.
์ฅ์ : ๋ณต์กํ SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ ํ์ ์์ด, ํ์ด์ฌ ์ฝ๋๋ง์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐ์ํ ์ ์๊ฒ ๋ฉ๋๋ค. ์ด ํ์ด์ฌ ํด๋์ค๊ฐ ๋ฐ๋ก Django์ **Models(๋ชจ๋ธ)**์ ๋๋ค.
๐ ️ 2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ ํ์ธ (settings.py)
์๋ก์ด Django ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ฉด, ๊ธฐ๋ณธ์ ์ผ๋ก SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ค์ ๋์ด ์์ต๋๋ค. ์ด ์ค์ ์ ํ๋ก์ ํธ ํด๋ ์์ settings.py ํ์ผ์์ ํ์ธํ ์ ์์ด์.
# settings.py ํ์ผ ๋ด์ฉ ์ค
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
'default': ์ด ์ค์ ์ด ํ๋ก์ ํธ์ ์ฃผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ผ๋ ์๋ฏธ์ ๋๋ค.'ENGINE': ์ด๋ค ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ์ง ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์sqlite3์ ๋๋ค.'NAME': ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ์ ์ด๋ฆ๊ณผ ์์น๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ ์ค์ ๋๋ก๋ผ๋ฉด, ํ๋ก์ ํธ ์ต์์ ํด๋์db.sqlite3ํ์ผ์ด ์์ฑ๋ ๊ฑฐ์์.
๐ ํ: ์ด๋ณด์์๊ฒ๋ ๋ณ๋์ ์ค์น ์์ด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ SQLite๊ฐ ๊ฐ์ฅ ์ฝ์ต๋๋ค. ๋์ค์ MySQL, PostgreSQL ๊ฐ์ ๋ค๋ฅธ DB๋ก ๋ณ๊ฒฝํ ์๋ ์์ด์!
๐️ 3. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ(Model) ์์ฑํ๊ธฐ
์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ **๊ตฌ์กฐ(์คํค๋ง)**๋ฅผ ์ ์ํ๋ ๋จ๊ณ์
๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ง๋ ์ฑ ํด๋(์: myapp) ์์ models.py ํ์ผ์ ์์ฑํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๊ฐ๋จํ '๊ฒ์๊ธ' ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ชจ๋ธ์ ๋ง๋ค์ด ๋ด ์๋ค.
# myapp/models.py
from django.db import models
class Post(models.Model): # Post๋ผ๋ ์ด๋ฆ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์ด๋ธ์ ๋ง๋ญ๋๋ค.
title = models.CharField(max_length=100) # ์ ๋ชฉ(์ต๋ 100์ ๋ฌธ์์ด)
content = models.TextField() # ๋ด์ฉ(๊ธด ํ
์คํธ)
created_at = models.DateTimeField(auto_now_add=True) # ์์ฑ ์๊ฐ(์๋ ์ ์ฅ)
def __str__(self):
return self.title # ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅํ ๋ ์ ๋ชฉ์ด ๋ณด์ด๋๋ก ์ค์
models.Model์ ์์: ์ด ํด๋์ค๊ฐ Django์ ORM ๋ชจ๋ธ์์ ์๋ ค์ค๋๋ค.ํ๋ ์ ์:
title,content๋ฑ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ **์ด(Column)**์ด ๋ฉ๋๋ค.์๋ ID: ๋ชจ๋ Django ๋ชจ๋ธ์๋
idํ๋๊ฐ ์๋์ผ๋ก ์์ฑ๋์ด ๊ธฐ๋ณธ ํค(Primary Key) ์ญํ ์ ํฉ๋๋ค.
⚙️ 4. ์ฑ ๋ฑ๋ก ๋ฐ ๋ง์ด๊ทธ๋ ์ด์ ์คํํ๊ธฐ
๋ชจ๋ธ์ ๋ง๋ค์๋ค๊ณ ํด์ ๋ฐ๋ก DB์ ๋ฐ์๋๋ ๊ฒ์ ์๋๋๋ค. ๋ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ผ ํฉ๋๋ค.
4.1. ์ฑ ๋ฑ๋ก (settings.py)
Django ํ๋ก์ ํธ์๊ฒ ์๋ก์ด ์ฑ(์: myapp)์ด ์๊ฒผ๊ณ , ์ด ์ฑ์ ๋ชจ๋ธ์ ์ฌ์ฉํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ ค์ค์ผ ํฉ๋๋ค.
ํ๋ก์ ํธ์ settings.py ํ์ผ๋ก ๋์๊ฐ์ INSTALLED_APPS ๋ฆฌ์คํธ์ ์ฑ ์ด๋ฆ์ ์ถ๊ฐํฉ๋๋ค.
# settings.py ํ์ผ ๋ด์ฉ ์ค
INSTALLED_APPS = [
# ... ๊ธฐ๋ณธ ์ฑ๋ค
'django.contrib.admin',
# ...
# ์ฌ๊ธฐ์ ์ถ๊ฐํฉ๋๋ค
'myapp', # <--- ๋ง๋ ์ฑ์ ์ด๋ฆ์ ์ถ๊ฐ
]
4.2. ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ ์์ฑ (makemigrations)
์ด์ Django์๊ฒ "๋ด๊ฐ ๋ชจ๋ธ์ ๋ณ๊ฒฝํ์ผ๋, DB์ ๋ฐ์ํ ์ค๋น๋ฅผ ํด์ค!"๋ผ๊ณ ๋ช ๋ นํ ์ฐจ๋ก์ ๋๋ค.
๊ฐ์ ํ๊ฒฝ์ด ํ์ฑํ๋ ํฐ๋ฏธ๋์์ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
python manage.py makemigrations myapp
์ด ๋ช ๋ น์
models.py์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์งํ์ฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉํ **์ค๊ณ๋ ํ์ผ(๋ง์ด๊ทธ๋ ์ด์ ํ์ผ)**์myapp/migrationsํด๋์ ์์ฑํฉ๋๋ค.
4.3. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ (migrate)
๋ง์ง๋ง์ผ๋ก, ์์ฑ๋ ์ค๊ณ๋ ํ์ผ์ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค(db.sqlite3 ํ์ผ)์ ์ ์ฉํ์ฌ ํ
์ด๋ธ์ ์์ฑํฉ๋๋ค.
python manage.py migrate
์ด ๋ช ๋ น์ ์คํํ๋ฉด, Django๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ํ ํ ์ด๋ธ(์ธ์ฆ, ์ธ์ ๋ฑ)๊ณผ ์ฐ๋ฆฌ๊ฐ ๋ง๋
Post๋ชจ๋ธ์ ํด๋นํ๋ ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ฑํฉ๋๋ค.
✅ 5. ์์ฑ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ธ
migrate ๋ช
๋ น์ด ์ฑ๊ณต์ ์ผ๋ก ์คํ๋์๋ค๋ฉด, ํ๋ก์ ํธ ํด๋์ db.sqlite3 ํ์ผ์ด ์์ฑ๋์์ ๊ฒ์
๋๋ค.
์ด ํ์ผ์ ์ผ๋ฐ์ ์ธ ํ ์คํธ ํธ์ง๊ธฐ๋ก๋ ์ด์ด๋ณผ ์ ์์ง๋ง, DB Browser for SQLite ๊ฐ์ ์ ์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋ฉด ์ค์ ๋ก ํ ์ด๋ธ์ด ์ ๋ง๋ค์ด์ก๋์ง ํ์ธํ ์ ์์ต๋๋ค.
๐ ๋ง๋ฌด๋ฆฌ
์ถํํฉ๋๋ค! ์ด์ ํ์ด์ฌ ์ฝ๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋ง๋ค๊ณ , ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ผ์ ๋ฐ์ํ๋ ๋ชจ๋ ๊ณผ์ ์ ๋ง์คํฐํ์ จ์ต๋๋ค.
ํต์ฌ ์์ฝ:
๋ชจ๋ธ ์ ์:
models.py์์ ํ์ด์ฌ ํด๋์ค๋ก ๋ฐ์ดํฐ ๊ตฌ์กฐ(ํ ์ด๋ธ)๋ฅผ ์ ์ํฉ๋๋ค.์ฑ ๋ฑ๋ก:
settings.py์INSTALLED_APPS์ ์ฑ์ ์ถ๊ฐํฉ๋๋ค.์ค๊ณ๋ ์์ฑ:
python manage.py makemigrations๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์งํฉ๋๋ค.DB ๋ฐ์:
python manage.py migrate๋ก ์ค์ DB์ ํ ์ด๋ธ์ ๋ง๋ญ๋๋ค.
์ด ๊ณผ์ ์ ํตํด Django์ Models์ Migrations ์์คํ ์ด ์ผ๋ง๋ ํธ๋ฆฌํ์ง ๋๋ผ์ จ์ ๊ฑฐ์์.

๋๊ธ
๋๊ธ ์ฐ๊ธฐ