๐ Django ํ๋ก์ ํธ ๊ตฌ์กฐ, ์ด๋ ๊ฒ ์ง๋ฉด ํ์ ์ด ํธํด์ง๋ค (์ค๋ฌด ์์ ํฌํจ)
๐ ์๋ก : ๊ตฌ์กฐ๊ฐ ์๋ง์ด๋ฉด ํ์ ๋ ์๋ง์ ๋๋ค
Django๋ก ๊ฐ๋ฐ์ ์์ํ์ ๋ ๋ค ๊ด์ฐฎ์์ต๋๋ค [1].
views.py
, models.py
, settings.py
์์์ ์์ ๊ธฐ๋ฅ๋ค์ ์ฐจ๊ณก์ฐจ๊ณก ์์๊ฐ์ฃ [1].
ํ์ง๋ง ํ๋ก์ ํธ๊ฐ ์ปค์ง๊ณ ํ์์ด ๋์ด๋๋ฉด ์ฝ๋๊ฐ ์๋ก ๊ผฌ์ด๊ณ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค [1].
๋ฌด์ธ๊ฐ ๋ฐ๊ฟ ๋๋ง๋ค ์์์น ๋ชปํ ๋ฒ๊ทธ๊ฐ ํฐ์ง๊ณ , ๋ฆฌ๋ทฐ ์๊ฐ์ ๊ธธ์ด์ง๊ณ … [1]
๊ทธ ์์ธ ์ค ํ๋๋ ๋ฐ๋ก “์ ๋ฆฌ๋์ง ์์ ํ๋ก์ ํธ ๊ตฌ์กฐ”์ ๋๋ค [1].
์ด๋ฒ ๊ธ์์๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ํ์ ํ ๋ ์ฐ๋ฉด ์ข์ Django ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ์ค๋ฌด ์์ ์ ํจ๊ป ์ ๋ฆฌํด ๋ณด๊ฒ ์ต๋๋ค [1].
๐งฑ ๊ธฐ๋ณธ Django ๊ตฌ์กฐ์ ๋ฌธ์ ์
๊ธฐ๋ณธ Django ๊ตฌ์กฐ๋ ์๊ณ ๋จ์ํ ํ๋ก์ ํธ์ ์ ํฉํ์ง๋ง, ํ์ ํ๊ฒฝ์์ ํ๊ณ๊ฐ ์์ต๋๋ค [2].
์๋ฅผ ๋ค์ด users/views.py
, users/models.py
์ ๋ชจ๋ ๋ก์ง์ด ๋ชฐ๋ ค ์์ผ๋ฉด [2]
- git ์ถฉ๋ ๋ฐ์๋ฅ ↑ [2]
- ๊ธฐ๋ฅ ๋ถ๋ฆฌ ์ด๋ ค์ [2]
- ๊ณตํต ๋ก์ง ์ฌ์ฌ์ฉ ์ด๋ ค์ [2]
- ํ ์คํธ ์ฝ๋ ์์ฑ ์ด๋ ค์ [2]
๊ฒฐ๊ตญ ํ์ ์์ฐ์ฑ์ด ๋จ์ด์ง๊ณ , ์ ์ง๋ณด์๊ฐ ํ๋ค์ด์ง๋๋ค [2].
๐ ํ์ ์ ์ ํฉํ Django ๊ตฌ์กฐ๋?
๋ค์ ์์๋ค์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค [2]:
- ๊ธฐ๋ฅ ๋จ์๋ก ๋ถ๋ฆฌ๋ ๊ตฌ์กฐ (views, services, usecases ๋ฑ) [2]
- ์ค์ ํ์ผ ๋ถ๋ฆฌ (dev/prod/base) [2]
- ๊ณตํต ๋ก์ง/์ ํธ๋ฆฌํฐ ๋ถ๋ฆฌ [2]
- ์ญํ ๊ธฐ๋ฐ์ ๋ชจ๋ ์ค๊ณ (DB → ์๋น์ค → API ํ๋ฆ) [2]
๐ ์ค๋ฌด์์ ์์ฃผ ์ฐ๋ Django ํ๋ก์ ํธ ๊ตฌ์กฐ
myproject/
├── apps/
│ ├── users/
│ │ ├── models/
│ │ ├── services/
│ │ ├── views/
│ │ ├── urls.py
│ │ └── serializers.py
│ └── posts/
│ ├── models/
│ ├── views/
│ └── ...
├── config/
│ ├── settings/
│ │ ├── base.py
│ │ ├── dev.py
│ │ └── prod.py
│ └── urls.py
├── utils/
│ ├── logger.py
│ └── common.py
└── manage.py
๐ ํต์ฌ ํฌ์ธํธ
apps/
ํด๋๋ฅผ ๋ง๋ค์ด ์ฑ๋ค์ ์ ๋ฆฌ [3]- ๊ฐ ์ฑ ์์์ ๋๋ฉ์ธ ๊ธฐ์ค์ผ๋ก
services
,models
,views
๋ฑ ์ญํ ๋ณ ๋ถ๋ฆฌ [3] config/settings
์์base/dev/prod
์ค์ ํ์ผ์ ๋๋ ํ๊ฒฝ๋ณ ์ค์ ์ ๊ตฌ๋ถ [3]- ๊ณตํต ์ ํธ์
utils/
ํด๋์ ๋ฐ๋ก ๊ด๋ฆฌ [3]
๐ง ์ค๋ฌด ํ: ํ์ ์ ์ฃผ์ํ ์
✅ 1. ์ฝ๋ ๊ตฌ์กฐ ๊ท์น ๋ช ์
README.md
๋CONTRIBUTING.md
์ ํด๋ ๊ตฌ์กฐ ์ค๋ช [4]- ์ด๋์ ์ด๋ค ์ฝ๋๋ฅผ ๋ฃ์ด์ผ ํ๋์ง ๋ช ํํ๊ฒ! [4]
✅ 2. ํ์ ํํธ ์ ๊ทน ์ฌ์ฉ
- Python 3.10+์์๋ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ ํ๊ธฐ ์ํด ํ์ ํํธ ํ์ [4]
mypy
,pyright
๋ก ์ ์ ๋ถ์ ์ถ๊ฐ [4]
✅ 3. ๋ฆฐํฐ & ํฌ๋งทํฐ ์ฌ์ฉ
black
,isort
,flake8
์ Git hook ๋๋ CI์ ์ฐ๋ [4]- ์ผ๊ด๋ ์ฝ๋ ์คํ์ผ๋ก ๋ฆฌ๋ทฐ ์๊ฐ ์ ์ฝ [4]
✅ 4. ํ ์คํธ ์๋ํ
pytest
,factory_boy
๋ฑ์ผ๋ก ๋จ์ ํ ์คํธ ์์ฑ [4]GitHub Actions
๋ก ํธ์ ์ ์๋ ํ ์คํธ ์คํ [4]
๐ฏ ๋ง๋ฌด๋ฆฌ: ๊ตฌ์กฐ๊ฐ ํ ์์ฐ์ฑ์ ๋ฐ๊พผ๋ค
ํ์ ์ ๊ฐํ Django ํ๋ก์ ํธ ๊ตฌ์กฐ๋ [4]
- ✔️ ์ฝ๋ ๊ด๋ฆฌ๊ฐ ์ฌ์์ง๊ณ [4]
- ✔️ ๋ฆฌ๋ทฐ ํจ์จ์ด ์ฌ๋ผ๊ฐ๋ฉฐ [4]
- ✔️ ์๋ก ๋ค์ด์จ ๊ฐ๋ฐ์๋ ๋น ๋ฅด๊ฒ ์ ์ํ ์ ์์ต๋๋ค [4].
๋น์ฅ ์ง๊ธ ๊ตฌ์กฐ๊ฐ ์ด์ง๋ฝ๋ค๊ณ ๋๊ปด์ง๋ค๋ฉด, ์ด ๊ธ์ ์ฐธ๊ณ ํด์ ๋ฆฌํฉํ ๋ง์ ์์ํด๋ณด์ธ์! [4]
๐ ๋ค์ ๊ธ์์๋ ์ ๊ตฌ์กฐ ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค ๋ ์ด์ด
์ ๋น์ฆ๋์ค ๋ก์ง ๋ถ๋ฆฌ
์ ๋ํด ๋ค๋ค๋ณผ ์์ ์
๋๋ค [5].
๊ถ๊ธํ ์ ์ด๋ ์์ฒญํ๊ณ ์ถ์ ์ฃผ์ ๊ฐ ์๋ค๋ฉด ๋๊ธ์ด๋ ์ด๋ฉ์ผ๋ก ๋จ๊ฒจ์ฃผ์ธ์! [5]
๋๊ธ
๋๊ธ ์ฐ๊ธฐ