๐ ์ฅ๊ณ ํ๋ก์ ํธ ์์ฑ ๋ฐ ํ๊ฒฝ๋ณ์ OPENAI_API_KEY
์ค์ ยถ
๋ณ๊ฒฝ ํ์ผ์ ํ ๋ฒ์ ๋ฎ์ด์ฐ๊ธฐ ํ์ค๋ ค๋ฉด, pyhub-git-commit-apply ์ ํธ๋ฆฌํฐ ์ค์นํ์ ํ์, ํ๋ก์ ํธ ๋ฃจํธ์์ ์๋ ๋ช ๋ น ์คํํ์๋ฉด ์ง์ ์ปค๋ฐ์ ๋ชจ๋ ํ์ผ์ ๋ค์ด๋ฐ์ ํ์ฌ ๊ฒฝ๋ก์ ๋ฎ์ด์ฐ๊ธฐํฉ๋๋ค.
python -m pyhub_git_commit_apply https://github.com/pyhub-kr/django-webchat-rag-langcon2025/commit/d6e9c7567263a1eafcb10a454772e676cf573bb1
uv
๋ฅผ ์ฌ์ฉํ์ค ๊ฒฝ์ฐ
uv run pyhub-git-commit-apply https://github.com/pyhub-kr/django-webchat-rag-langcon2025/commit/d6e9c7567263a1eafcb10a454772e676cf573bb1
1. ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ ์์ฑยถ
์ํ์๋ ๊ฒฝ๋ก์ django-webchat-rag
ํ๋ก์ ํธ ํด๋๋ฅผ ์์ฑํด์ฃผ์ธ์.
2. ๊ฐ์ํ๊ฒฝ ์์ฑ/ํ์ฑํยถ
๋ฐฉ๊ธ ์์ฑํ์ ํ๋ก์ ํธ ํด๋๋ก ์ด๋ํ์ฌ ๊ฐ์ํ๊ฒฝ์ ์์ฑ/ํ์ฑํํด์ฃผ์ธ์.
python -m venv venv
venv\Scripts\activate
python -m venv venv
source ./venv/bin/activate
ํ๋ก์ ํธ ํด๋๋ฅผ ํธํ์ ์๋ํฐ/IDE๋ก ์ด์ด์ฃผ์๊ณ , ์๋ํฐ/IDE์ ๊ฐ์ํ๊ฒฝ๋ ์ง์ ํด์ฃผ์ธ์.
3. ์๋ ๋ด์ญ์ ํ์ผ๋ค์ ํ ๋ฒ์ ์์ฑํ๊ธฐยถ
ํ์ฌ ํ์ด์ง์ ์ต์ข ์ฝ๋๋ https://github.com/pyhub-kr/django-webchat-rag-langcon2025/commit/d6e9c7567263a1eafcb10a454772e676cf573bb1 ์ฃผ์์ ์ปค๋ฐ์ ์์ต๋๋ค.
pyhub-git-commit-apply
๋ช
๋ น์์ ํด๋น ์ปค๋ฐ ์ฃผ์๋ฅผ ์ง์ ํ์๋ฉด, ํด๋น ์ปค๋ฐ์์ ๋ณ๊ฒฝ๋ ํ์ผ๋ค๋ง ํ์ฌ ๊ฒฝ๋ก๋ก ๋ฎ์ด์ฐ๊ธฐ ํฉ๋๋ค.
--all
์ต์
์ ์ ์ฉํ์๋ฉด ํด๋น ์ปค๋ฐ์ ๊ธฐ์ค์ผ๋ก ์ ์ฅ์์ ๋ชจ๋ ํ์ผ๋ค์ ํ์ฌ ๊ฒฝ๋ก๋ก ๋ฎ์ด์ฐ๊ธฐ ํฉ๋๋ค.
๊ฐ์ํ๊ฒฝ์ด ํ์ฑํ๋ ์ํ์์ ๋จผ์ pyhub-git-commit-apply
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ฃผ์๊ตฌ์.
pip install --upgrade pyhub-git-commit-apply
์๋ ๋ช ๋ น์ผ๋ก ์ง์ ์ปค๋ฐ์ ๋ชจ๋ ํ์ผ๋ค์ ํ์ฌ ๊ฒฝ๋ก๋ก ๋ค์ด๋ก๋ํฉ๋๋ค.
python -m pyhub_git_commit_apply --all https://github.com/pyhub-kr/django-webchat-rag-langcon2025/commit/d6e9c7567263a1eafcb10a454772e676cf573bb1
uv run pyhub-git-commit-apply --all https://github.com/pyhub-kr/django-webchat-rag-langcon2025/commit/d6e9c7567263a1eafcb10a454772e676cf573bb1
์ํํ๋ฉด ์๋์ ๊ฐ์ด requirements.txt
ํ์ผ์ ๋น๋กฏํด manage.py
, mysite
, .env.sample
ํ์ผ๋ค์ด ์์ฑ๋ฉ๋๋ค.

์๋ ๋ด์ฉ ์ฐธ๊ณ ํด์, ๋ค์ 5๊ฐ์ง๋ฅผ ์์๋๋ก ์ํํฉ๋๋ค.
pip install --upgrade -r requirements.txt
๋ช ๋ น์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น (์ด๋ฏธ ์ค์นํ์ จ๋ค๋ฉด PASS).env.sample
ํ์ผ์ ๋ณต์ฌํด์.env
ํ์ผ ์์ฑํ๊ธฐOPENAI_API_KEY
ํ๊ฒฝ๋ณ์ ์ค์ ํ๊ธฐpostgres
๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐDATABASE_URL
ํ๊ฒฝ๋ณ์ ์ค์ ํ๊ธฐ
python manage.py shell -c "from django.conf import settings; print(settings.DATABASES); print(settings.OPENAI_API_KEY);"
๋ช ๋ น์ผ๋ก ํ๊ฒฝ๋ณ์ ๊ฐ์ด ์ ํํ ์ ์ฉ๋์๋ ์ง ํ์ธpython manage.py showmigrations
๋ช ๋ น์ผ๋ก ๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ์ง ์ฌ๋ถ ํ์ธpython manage.py migrate
๋ช ๋ น์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ ์์ฑ
4. ์๋ํฐ๋ก ์ด๊ธฐยถ
VSCode์์๋ ํ
ํ๋ฆฟ ํธ์ง ์์ prettier
ํฌ๋งทํฐ๋ก ์ธํด ํ
ํ๋ฆฟ ๋ฌธ๋ฒ์ด ๋ง๊ฐ์ง๊ณค ํฉ๋๋ค.
๊ฐ์ฅ ์ฐ์ ํด์ผํ๋ ํ์ฅ/์ค์ ์ Glavin001.unibeautify-vscode
ํ์ฅ์
๋๋ค.
์ฅ๊ณ ๋ฅผ ์ํ VSCode ์ค์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ํ์ฅ์ ์ค์นํ์๊ณ ,
django-html
ํ์
์ ๋ํด ๋ํดํธ ํฌ๋งทํฐ๋ก Glavin001.unibeautify-vscode
๋ฅผ ์ง์ ํด์ฃผ์ธ์.
ํ
์๋์ฐ์์๋ ๊ธฐ๋ณธ ๋ช ๋ นํ๋กฌํํธ/ํ์์์ ์ฐ์๊ธฐ๋ณด๋ค, ๋ง์ดํฌ๋ก์ํํธ์ ํ์์ ์ฝ์ด 7์ ์ฐ์๋ฉด, ์ฌ์ฉ์ฑ์ด ๋์ฑ ์ข์ต๋๋ค. ์๋์ฐ ๊ธฐ๋ณธ ํ์์์ ๋ฒ์ 5์ ๋๋ค. (์ฐธ๊ณ : ์๋์ฐ ํฐ๋ฏธ๋)
VSCode์์๋ ๋ช
๋ น ํ๋ ํธ์์ Python: Select Interpreter
๋ช
๋ น์ผ๋ก ํ์ฌ ํ๋ก์ ํธ์์ ์ฌ์ฉํ ๊ฐ์ํ๊ฒฝ์ ์ ํํด์ฃผ์ธ์.
๊ทธ ํ์ Terminal: Create New Terminal
๋ช
๋ น์ผ๋ก ์๋ก์ด ํฐ๋ฏธ๋์ ์ฌ์๋ฉด ์๋์ผ๋ก ์ง์ ๊ฐ์ํ๊ฒฝ์ด ํ์ฑํ๋ฉ๋๋ค.
๊ฐ์ํ๊ฒฝ ํ์ฑํํ ํ์, ํ์์์์๋ Get-Command python | Select-Object Source
๋ช
๋ น์ผ๋ก
ํ์ฌ python
๋ช
๋ น์ ํตํด ์ํ๋๋ ํ์ด์ฌ ๊ฒฝ๋ก๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
django-webchat-rag\venv
๊ฒฝ๋ก๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด ๊ฐ์ํ๊ฒฝ์ด ํ์ฑํ๋ ๊ฒ์
๋๋ค.

๋ช
๋ น ํ๋กฌํํธ์์๋ where python
๋ช
๋ น์ผ๋ก ํ์ฌ python
๋ช
๋ น์ ํตํด ์ํ๋๋ ํ์ด์ฌ ๊ฒฝ๋ก๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
django-webchat-rag\venv
๊ฒฝ๋ก๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด ๊ฐ์ํ๊ฒฝ์ด ํ์ฑํ๋ ๊ฒ์
๋๋ค.

๊ฐ์ํ๊ฒฝ ํ์ฑํํ ํ์, macOS ์์์๋ which python
๋ช
๋ น์ผ๋ก
ํ์ฌ python
๋ช
๋ น์ ํตํด ์ํ๋๋ ํ์ด์ฌ ๊ฒฝ๋ก๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ด๋ฅผ ํตํด ๊ฐ์ํ๊ฒฝ ํ์ฑํ ์ฌ๋ถ๋ฅผ ํ์ธํ์ค ์ ์์ต๋๋ค.
django-webchat-rag/venv
๊ฒฝ๋ก๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด ๊ฐ์ํ๊ฒฝ์ด ํ์ฑํ๋ ๊ฒ์
๋๋ค.

ํ
ํน์ VSCode/PyCharm ํฐ๋ฏธ๋์์ ์๋์ผ๋ก ๊ฐ์ํ๊ฒฝ์ด ํ์ฑํ๋์ง ์๋๋ค๋ฉด ์๋์ผ๋ก ๊ฐ์ํ๊ฒฝ์ ํ์ฑํํด์ฃผ์๊ณ , ์ฌ๋ ์๊ฐ์ ๋ฐ๋ก ์ง๋ฌธ์ฃผ์๋ฉด ์ ํํ ํด๊ฒฐํด๋๋ฆฌ๊ฒ ์ต๋๋ค.
5. .gitignore
ํ์ผ ์์ฑยถ
ํ๋ก์ ํธ ๋ฃจํธ์ .gitignore
ํ์ผ์ ์์ฑํด์ฃผ์ธ์.
.gitignore
ยถ.env
__pycache__
*.sqlite3
.vscode
.idea
.DS_Store
/staticfiles
/mediafiles
/venv
/.venv
6. .env ํ์ผ ์์ฑยถ
์์ค์ฝ๋ ํธ์ง๊ธฐ๋ฅผ ํตํด ํ๋ก์ ํธ ๋ฃจํธ์ ๋ค์ ๋ด์ฉ์ผ๋ก .env
ํ์ผ์ ์์ฑํด์ฃผ์ธ์.
DATABASE_URL
: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ณด๊ฐ์ SQLite/Postgres ํ๊ฒฝ์ ๋ง๊ฒ
DATABASE_URL
ํ๊ฒฝ๋ณ์๋ฅผ ์ค์ ํด์ฃผ์ธ์.
OPENAI_API_KEY
: OpenAI API ํคOPENAI_API_KEY
ํ๊ฒฝ๋ณ์๋ ๋ณธ์ธ์ OpenAI API ํค๋ฅผ ์ ๋ ฅํด์ฃผ์ธ์. OpenAI API Key๋ https://platform.openai.com/api-keys ํ์ด์ง์์ ๋ฐ๊ธ๋ฐ์ผ์ค ์ ์์ต๋๋ค.๋ณธ์ธ์ OpenAI API Key ์์ฑ์ด ์ด๋ ค์ฐ์ ๋ถ์ ํธ์ฆ์จ๋ฉ ์๊ฐ ๋์์๋ง ์ฌ์ฉํ์ค Key๋ฅผ ์ ๊ณตํด๋๋ฆฝ๋๋ค.

sqlite
์์๋ DATABASE_URL
ํ๊ฒฝ๋ณ์๋ ์ง์ ํ์ง ์๊ณ , ์ฅ๊ณ ํ๋ก์ ํธ ๋ด์์ ๋ํดํธ ๊ฒฝ๋ก๋ฅผ ์์ฑํด์ ํ์ฉํ๊ฒ ์ต๋๋ค.
OPENAI_API_KEY=sk-...
DATABASE_URL=postgresql://postgres.euvmdqdkpiseywirljvs:์ํธ@aws-0-ap-northeast-2.pooler.supabase.com:5432/postgres
OPENAI_API_KEY=sk-...
๊ฒฝ๊ณ
๋ฉ๋ชจ์ฅ์ ํตํด ์์ฑํ์ค ๊ฒฝ์ฐ, ํ์ฅ์๊ฐ
.txt
๋ก์.env.txt
ํ์ผ๋ช ์ผ๋ก ์์ฑ๋์ค ์ ์์ต๋๋ค. ๋ฐ๋์ ํ์ฅ์์์ด.env
ํ์ผ๋ช ์ผ๋ก ์์ฑํด์ฃผ์ธ์..env
ํ์ผ์key=value
ํ์์ผ๋ก ์์ฑํ์๋, ๋ฑํธ ์์ชฝ์ ๊ณต๋ฐฑ์ด ์์ผ๋ฉด ์๋ฉ๋๋ค. ๊ณต๋ฐฑ์ด ์์ผ๋ฉด ํด๋น ์ค์ ์ ๋ฌด์๋๋ ์ฃผ์ํด์ฃผ์ธ์.
7. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์นยถ
ํ๋ก์ ํธ ๋ฃจํธ ๊ฒฝ๋ก์ requirements.txt
ํ์ผ์ ์๋ ๋ด์ฉ์ผ๋ก ์์ฑํด์ฃผ์ธ์.
ํ์ด์ฌ์์๋ sqlite
๋๋ผ์ด๋ฒ๋ฅผ ๊ธฐ๋ณธ ์ง์ํฉ๋๋ค.
requirements.txt
ยถdjango-pyhub-rag
django-environ
django-debug-toolbar
django-extensions
django-lifecycle
openai
sqlite-vec
numpy
ipython
psycopg2-binary
๋๋ผ์ด๋ฒ๋ฅผ ์ค์นํฉ๋๋ค.
requirements.txt
ยถdjango-pyhub-rag
django-environ
django-debug-toolbar
django-extensions
django-lifecycle
openai
psycopg2-binary
pgvector
ipython
๋ค์ ๋ช ๋ น์ผ๋ก ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ ๋ฒ์ ์ค์นํฉ๋๋ค.
python -m pip install --upgrade -r requirements.txt

์ฐธ๊ณ
django-pyhub-rag
: pgvector/sqlite-vec ๋ฒกํฐ์คํ ์ด๋ฅผ ๋์ผํ ๋ชจ๋ธ ์ฝ๋๋ก ์ง์django-environ
:.env
ํ์ผ ๋ก๋ฉ ๋ฐ ํ๊ฒฝ๋ณ์ ๊ฐ ํ์ฑdjango-debug-toolbar
: ์ฅ๊ณ ๋๋ฒ๊ทธ ํด๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌdjango-extensions
: ๋ค์ํ ์ฅ๊ณ ํ์ฅ ํธ์ ๊ธฐ๋ฅ ์ ๊ณตdjango-lifecycle
: ์ฅ๊ณ ๋ชจ๋ธ ๋ ์ฝ๋ ์์ฑ/์์ /์ญ์ ์์ ํธ์ถํ ํจ์๋ฅผ ์ง๊ด์ ์ผ๋ก ์์ฑopenai
: OpenAI API ๋ผ์ด๋ธ๋ดsqlite-vec
: SQLite ๋ฒกํฐ์คํ ์ด ํ์ฅnumpy
: ๋ฒกํฐ ๋ฐฐ์ด ๋ฐ์ดํฐ ๋ณํ์ ํ์ฉpsycopg2-binary
: PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ผ์ด๋ฒpgvector
: PostgreSQL ๋ฒกํฐ์คํ ์ด ํ์ฅipython
: ํฅ์๋ ํ์ด์ฌ ์
8. ํ๋ก์ ํธ ์์ฑยถ
์ฅ๊ณ ์์๋ django-admin startproject
๋ช
๋ น์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉฐ, python -m django startproject
๋ช
๋ น์ผ๋ก๋ ๋์ผํ๊ฒ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
python -m django startproject mysite .
์ฐธ๊ณ
๋ช
๋ น ๋์ .
๊น์ง ๊ผญ ํฌํจํด์ฃผ์ธ์. ํ์ฌ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.

9. mysite/settings.py ํ์ผ ์์ ยถ
django-environ
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ ยถ
.env
ํ์ผ ๋ก๋ฉ์ ์ํด django-environ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํ๋ก์ ํธ ๋ฃจํธ์ .env
ํ์ผ์ด ์๋ค๋ฉด ํ๊ฒฝ๋ณ์๋ก์ ๋ก๋ฉํฉ๋๋ค.
mysite/settings.py
ยถ 1from pathlib import Path
2from environ import Env
3
4BASE_DIR = Path(__file__).resolve().parent.parent
5
6env = Env()
7ENV_PATH = BASE_DIR / ".env"
8if ENV_PATH.is_file():
9 # ์ง์ ๊ฒฝ๋ก์ ํ์ผ ์ฝ๊ธฐ์ ์คํจํด๋, ์์ธ ๋ฐ์์์ด ๋ฌด์๋ฉ๋๋ค.
10 env.read_env(ENV_PATH, overwrite=True)
11
12# ...
"django_extensions"
์ฑ๊ณผ "pyhub.rag"
์ฑ์ ํ์ฑํํด์ฃผ์ธ์.
mysite/settings.py
ยถINSTALLED_APPS = [
# ...
"django_extensions", # ํ์ดํ(-)์ด ์๋ ์ธ๋๋ฐ(_)์์ ์ ์
"pyhub.rag",
]
DATABASE_URL
ํ๊ฒฝ๋ณ์ ์ค์ ยถ
DATABASE_URL
ํ๊ฒฝ๋ณ์ ๊ฐ์ ์ฝ์ด default
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์ค์ ํฉ๋๋ค.
DATABASE_URL
ํ๊ฒฝ๋ณ์๊ฐ ์๋ค๋ฉด ํ๋ก์ ํธ ๋ฃจํธ์ db.sqlite3
๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํฉ๋๋ค.
sqlite-vec
ํ์ฅ์ ๊ฐ์ ํ
์ด๋ธ (CREATE VIRTUAL TABLE ...
) ๋ฐฉ์์ผ๋ก๋ง ๋์ํฉ๋๋ค.
๊ฐ์ ํ
์ด๋ธ์ ์ฅ๊ณ ๊ธฐ๋ณธ์์ ์ง์ํ์ง ์๊ธฐ์, ๊ฐ์ ํ
์ด๋ธ ์ง์์ ์ํด pyhub.db.backends.sqlite3
์์ง์ ์ฌ์ฉํฉ๋๋ค.
mysite/settings.py
ยถDATABASES = {
"default": env.db("DATABASE_URL", default=f"sqlite:///{BASE_DIR / 'db.sqlite3'}"),
}
if DATABASES["default"]["ENGINE"] == "django.db.backends.sqlite3":
DATABASES["default"]["ENGINE"] = "pyhub.db.backends.sqlite3"
๋ก๊น ์ค์ ยถ
pyhub.rag
์ฑ์ ๋ก๊น
์ค์ ์ ์ถ๊ฐํ์ฌ, ๋๋ฒ๊ทธ ๋ชจ๋์์๋ง ๋ก๊น
์ด ํ์ฑํ๋๋๋ก ํฉ๋๋ค.
pyhub.rag
์ฑ ๋ด์์๋ sqlite-vec extension loaded
์ ๊ฐ์ ๋๋ฒ๊ทธ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
mysite/settings.py
ยถ# https://docs.djangoproject.com/en/5.1/topics/logging/
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"filters": {
"require_debug_true": {
"()": "django.utils.log.RequireDebugTrue",
},
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"filters": ["require_debug_true"],
},
},
"loggers": {
"pyhub": {
"handlers": ["console"],
"level": "DEBUG",
},
},
}
django-debug-toolbar
์ฑ ์ค์ ยถ
django-debug-toolbar
์ฑ์ ๊ฐ๋ฐ๋ชจ๋(DEBUG=True
)์์๋ง ํ์ฑํ๋๋๋ก ํฉ๋๋ค.
mysite/settings.py
ยถ# https://django-debug-toolbar.readthedocs.io
if DEBUG:
INSTALLED_APPS += [
"debug_toolbar",
]
# ๋ฏธ๋ค์จ์ด ์ฒ์์ ์์นํด์ผ๋ง, ๋ค๋ฅธ ๋ฏธ๋ค์จ์ด/View ๋จ์์ ์ํ๋ ๋ด์ญ์ ์์งํ ์ ์์ต๋๋ค.
MIDDLEWARE = [
"debug_toolbar.middleware.DebugToolbarMiddleware",
] + MIDDLEWARE
# ์ฅ๊ณ ๋๋ฒ๊ทธ ํด๋ฐ๋ฅผ ๋ณด์ฌ์ค ์ฃผ์๋ฅผ ์ง์
# ํน์ ์ง์ ํจ์๋ฅผ ์ง์ ํ์ฌ ํน์ ์กฐ๊ฑด์์๋ง ํ์ฑํ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์๋ ์์ต๋๋ค.
INTERNAL_IPS = env.list("INTERNAL_IPS", default=["127.0.0.1"])
mysite/urls.py
๋ฎ์ด์ฐ๊ธฐยถ 1from django.apps import apps
2from django.contrib import admin
3from django.urls import include, path
4
5urlpatterns = [
6 path("admin/", admin.site.urls),
7]
8
9if apps.is_installed("debug_toolbar"):
10 urlpatterns = [
11 path("__debug__/", include("debug_toolbar.urls")),
12 ] + urlpatterns
OpenAI API Key ํ๊ฒฝ๋ณ์ ์ค์ ยถ
์ฅ๊ณ ํ๋ก์ ํธ ๋ด์์ OpenAI API Key ์ฐธ์กฐ๋ฅผ ์ํด OPENAI_API_KEY
ํ๊ฒฝ๋ณ์ ๊ฐ์ ์ฝ์ด OPENAI_API_KEY
์ค์ ์ ์ถ๊ฐํฉ๋๋ค.
ํ๊ฒฝ๋ณ์ ํ์ฑ์ settings.py
๋ด์์๋ง ์ํํ๊ณ , ์ฅ๊ณ ํ๋ก์ ํธ ๋ด์์๋ ํ๊ฒฝ๋ณ์ ์ฐธ์กฐ์์ด settings
๊ฐ ์ฐธ์กฐ๋ฅผ ์ถ์ฒ๋๋ฆฝ๋๋ค.
mysite/settings.py
ยถ# OpenAI API Key
# default ๊ฐ์ ์ง์ ํ์ง ์์๊ธฐ์ ์ง์ ํ๊ฒฝ๋ณ์๊ฐ ์๋ค๋ฉด
# ImproperlyConfigured: Set the OPENAI_API_KEY environment variable ์์ธ ๋ฐ์
# ์์ธ๋ฅผ ํตํด ํ์ ํ๊ฒฝ๋ณ์ ๋ก๋ฉ ์ฌ๋ถ๋ฅผ ๋ช
ํํ๊ฒ ์ธ์งํ ์ ์์ต๋๋ค.
# ํ์ ์ค์ ์ด ๋๋ฝ๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ด ๊ตฌ๋๋์ง ์์์ผ ํฉ๋๋ค.
OPENAI_API_KEY = env.str("OPENAI_API_KEY")
settings ํ๊ฒฝ๋ณ์ ์ ์ฉ ํํฉ ํ์ธยถ
๋ค์ ๋ช
๋ น์ผ๋ก ์ฅ๊ณ settings ๋ด์์ ํ๊ฒฝ๋ณ์ ๊ฐ์ settings
์ค์ ์ ์ ํํ ๋ฐ์๋์๋ ์ง ํ์ธํฉ๋๋ค.
print(settings.DATABASES)
: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ณด ํ์ธprint(settings.OPENAI_API_KEY)
: OpenAI API Key ํ์ธ
python manage.py shell -c "from django.conf import settings; print(settings.DATABASES); print(settings.OPENAI_API_KEY);"
๊ฒฝ๊ณ
ํ์ฌ ์ฅ๊ณ ํ๋ก์ธ์ค์์ OPENAI_API_KEY
ํ๊ฒฝ๋ณ์๊ฐ ์๋ค๋ฉด ์๋์ ๊ฐ์ด ImproperlyConfigured
์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ด ์์ธ๊ฐ ๋ฐ์ํ์ ๋ค๋ฉด .env
ํ์ผ์์ OPENAI_API_KEY
ํ๊ฒฝ๋ณ์๋ฅผ ์ง์ ์ ํ์ธํด์ฃผ์๊ณ , ํ๊ฒฝ๋ณ์๋ช
์คํ๋ ํ์ธํด์ฃผ์ธ์.
๊ทธ๋๋ ์์ธ๊ฐ ๋ฐ์ํ๋ค๋ฉด .env
ํ์ผ ๊ฒฝ๋ก๊ฐ ์ ํํ์ง ํ์ธํด์ฃผ์ธ์.

sqlite
์ ๊ฒฝ์ฐ ENGINE
์ค์ ์ ๋ฐ๋์ django.db.backends.sqlite3
๊ฐ ์๋ pyhub.db.backends.sqlite3
์์ง์ผ๋ก ์ค์ ๋์ด์ผ ํฉ๋๋ค.

showmigrations
๋ช
๋ น์ ์ํํด๋ณด์๋ฉด sqlite-vec extension loaded
๋ฉ์์ง๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ด ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋์ง ์๋๋ค๋ฉด ๋ค์ 2๊ฐ์ง๋ฅผ ํ์ธํด์ฃผ์ธ์.
settings.DATABASES
์ค์ ์ENGINE
์ค์ ์ดpyhub.db.backends.sqlite3
์์ง์ผ๋ก ์ค์ ๋์ด ์๋์ง ํ์ธsettings.INSTALLED_APPS
์ค์ ์pyhub.rag
์ฑ์ด ํฌํจ๋์ด ์๋์ง ํ์ธ

postgres
์ ๊ฒฝ์ฐ HOST
, PORT
, USER
, PASSWORD
, NAME
์ค์ ์ ๊ผญ ํ์ธํด์ฃผ์ธ์.


10. ๊ธฐ๋ณธ ํ ์ด๋ธ ์์ฑยถ
ํ์ฌ ํ๋ก์ ํธ์ ๋ฑ๋ก๋ ์ฅ๊ณ ์ฑ์ ๋ํ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ํํ์ฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์์ฑํด์ฃผ์ธ์.
python manage.py migrate
