๐Ÿ“Œ Pyenv + Django ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ• ๋ฐ ๊ฐœ๋… ์ •๋ฆฌ

SOCICALยท2025๋…„ 3์›” 16์ผ
post-thumbnail

โœ… pyenv & pyenv-virtualenv๋ž€?

  • pyenv: ์—ฌ๋Ÿฌ ํŒŒ์ด์ฌ ๋ฒ„์ „์„ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ
  • pyenv-virtualenv: ํ”„๋กœ์ ํŠธ๋ณ„ ๊ฐ€์ƒํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌํ•˜๋Š” pyenv ํ”Œ๋Ÿฌ๊ทธ์ธ

์ฆ‰, ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๋‹ค๋ฅธ Python ๋ฒ„์ „๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํ•„์ˆ˜ ๋„๊ตฌ


โœ… pyenv-virtualenv ์žฅ์ 

  • ํ”„๋กœ์ ํŠธ ๋‹จ์œ„๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ/ํ”„๋ ˆ์ž„์›Œํฌ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • venv์™€ ๋‹ฌ๋ฆฌ ํด๋” ์ ‘๊ทผ ์‹œ ์ž๋™์œผ๋กœ ๊ฐ€์ƒํ™˜๊ฒฝ ํ™œ์„ฑํ™”
  • ํด๋”๋ณ„ ํŒŒ์ด์ฌ ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ
  • .python-version ํŒŒ์ผ์„ ํ†ตํ•ด ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋งŒ์˜ ํŒŒ์ด์ฌ ํ™˜๊ฒฝ ์ ์šฉ

๐Ÿ› ๏ธ ์„ค์น˜ ๋ฐ ํ™˜๊ฒฝ ์„ค์ •

  1. pyenv ์„ค์น˜
    brew install pyenv
  2. pyenv-virtual ์„ค์น˜
    brew install pyenv-virtualenv
  3. ์…ธ ํ™˜๊ฒฝ ์„ค์ • (bash or zsh)
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
    echo 'eval "$(pyenv init --path)"' >> ~/.zshrc
    echo 'eval "$(pyenv init -)"' >> ~/.zshrc
    echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc
    source ~/.zshrc

    Which $SHELL๋กœ ๋ณธ์ธ์˜ ์…ธ ํ™•์ธ ํ›„, .bashrc or .zshrc ์„ค์ •

  4. pyenv ์ •์ƒ ์„ค์น˜ ํ™•์ธ
    pyenv --version
    pyenv virtualenv --version
  5. ์„ค์น˜ ๊ฐ€๋Šฅํ•œ Python ๋ฒ„์ „ ํ™•์ธ
    pyenv install --list
  6. ์›ํ•˜๋Š” ํŒŒ์ด์ฌ ๋ฒ„์ „ ์„ค์น˜
    pyenv install 3.10.12
  7. ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ (๋‹‰๋„ค์ž„ ์„ค์ • ๊ฐ€๋Šฅ)
    pyenv virtualenv 3.10.12 myenv310
  8. ํ”„๋กœ์ ํŠธ ํด๋”์—์„œ ๊ฐ€์ƒํ™˜๊ฒฝ ์ ์šฉ
    cd myproject
    pyenv local myenv310 # .python-version ํŒŒ์ผ ์ƒ์„ฑ๋จ

    ํ•ด๋‹น ํด๋”์— ์ง„์ž…ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๊ฐ€์ƒํ™˜๊ฒฝ์ด ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค.


โœ… ํŽธ๋ฆฌํ•œ ํด๋” ์ƒ์„ฑ ํŒ

take myproject

take ๋ช…๋ น์–ด๋Š” ํด๋” ์ƒ์„ฑ + ๋ฐ”๋กœ ์ด๋™๊นŒ์ง€! (brew install coreutils๋กœ ์„ค์น˜ ๊ฐ€๋Šฅ)


๐Ÿ Python ํŒจํ‚ค์ง€ ์„ค์น˜ ์˜ˆ์‹œ

pip install django
cd ..
pip install flask

๊ฐ๊ฐ์˜ ํด๋”์— ๋”ฐ๋ผ ๋…๋ฆฝ์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.


๐Ÿง  PyCharm ์„ค์ • (Django ํ”„๋กœ์ ํŠธ)

  • Settings > Languages & Frameworks > Django
    • Enable Django Supprot โœ…
    • Django project root: manage.py ์œ„์น˜
    • Settings.py / manage.py ๊ฒฝ๋กœ ์„ค์ •

๐Ÿ“ฆ Django ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

django-admin startproject config .
  • django-admin์€ Django ์„ค์น˜ ์‹œ ํ•จ๊ป˜ ์ œ๊ณต
  • .์ ์„ ๋ถ™์ด๋ฉด ํ˜„์žฌ ํด๋”์— ์ƒ์„ฑ๋จ

๐Ÿš€ ์„œ๋ฒ„ ์‹คํ–‰

python manage.py runserver

manage.py๋Š” Django์—์„œ ํ•ต์‹ฌ ๊ด€๋ฆฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค (Java์˜ main()๊ณผ ์œ ์‚ฌ)


โœ… Poetry ํ™˜๊ฒฝ ๊ตฌ์„ฑ (ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋„๊ตฌ)

poetry init # pyproject.toml ์ƒ์„ฑ
  • pyproject.toml: ์„ค์น˜ํ•ด์•ผ ํ•  ํŒจํ‚ค์ง€ ๋ชฉ๋ก
  • poetry.lock: ์‹ค์ œ ์„ค์น˜๋œ ์ •ํ™•ํ•œ ํŒจํ‚ค์ง€ ๋ฒ„์ „ ๊ธฐ๋ก
poetry add django
poetry install

ํ”„๋กœ์ ํŠธ๋ฅผ ์žฌํ˜„ํ•˜๊ณ  ์‹ถ์„ ๋•, .toml๊ณผ .lock ํŒŒ์ผ๋งŒ ๋ณต์‚ฌํ•˜๋ฉด ๋!


โš ๏ธ Poetry์—์„œ Python ๋ฒ„์ „ ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ

Current Python version (3.12.2) is not allowed by the project (>=3.13)

ํ•ด๊ฒฐ

poetry env use 3.13

๐Ÿ“ Django App ์ƒ์„ฑ

python manage.py startapp myapp

์ƒ์„ฑ๋˜๋Š” ๊ตฌ์กฐ:

myapp/

์ƒ์„ฑ๋˜๋Š” ๊ตฌ์กฐ:

myapp/
 โ”œโ”€ models.py        # DB ๋ชจ๋ธ ์ •์˜
 โ”œโ”€ views.py         # ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ฒ˜๋ฆฌ
 โ”œโ”€ admin.py         # ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€ ์„ค์ •
 โ”œโ”€ apps.py          # ์•ฑ ์„ค์ •
 โ”œโ”€ tests.py         # ํ…Œ์ŠคํŠธ ์ฝ”๋“œ
 โ”œโ”€ migrations/      # DB ๋ณ€๊ฒฝ ๊ธฐ๋ก
 โ””โ”€ __init__.py      # ํŒจํ‚ค์ง€ ์ธ์‹์šฉ

๐Ÿ“Œ ์•ฑ ๋“ฑ๋ก

settings.py > INSTALLED_APPS์— ์ถ”๊ฐ€ํ•ด์•ผ Django์—์„œ ์ธ์‹ํ•จ


๐Ÿ—ƒ๏ธ ORM ๋ฐ DB ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

  1. ๋ชจ๋ธ ์ •์˜ ํ›„
    python manage.py makemigrations myapp
    python manage.py migrate
  2. Superuser ์ƒ์„ฑ
    python manage.py createsuperuser
  3. SQLite DB ํ™•์ธ: db.sqlite3 -> DB Browser for SQLite๋กœ ํ™•์ธ ๊ฐ€๋Šฅ

๐Ÿงช ORM ์ฟผ๋ฆฌ ์˜ˆ์‹œ

# ํฌํ•จ๋œ ๋‹จ์–ด ๊ฒ€์ƒ‰
Bookmark.objects.filter(name__icontains='๋„ค')
# ์‹œ์ž‘ํ•˜๋Š” ๋‹จ์–ด ๊ฒ€์ƒ‰
Bookmark.objects.filter(name__startswith='๋‹ค')
# ํŠน์ • ๋ฆฌ์ŠคํŠธ ์•ˆ์— ์žˆ๋Š” ๊ฐ’ ๊ฒ€์ƒ‰
Bookmark.objects.filter(name__in=['๊ตฌ๊ธ€','๋„ค์ด๋ฒ„'])
# ์ˆซ์ž ์กฐ๊ฑด ๊ฒ€์ƒ‰
Bookmark.objects.filter(id__gte=2) # gte, gt, lte, lt

โœ… ๊ฐ์ฒด ์ถ”๊ฐ€

Bookmark.objects.create(name='์•ผํ›„', url='https://yahoo.com')

bookmark = Bookmark(name='์•ผํ›„2', url='https://yahoo.com')
bookmark.save()

โœ… id ๋ณ€๊ฒฝํ•˜์—ฌ ์ƒˆ ๊ฐ์ฒด๋กœ ์ €์žฅ

b = Bookmark.objects.first()
b.id = None
b.name = '๋„ค์ด๋ฒ„2'
b.save()

โœ… Django ๊ตฌ์กฐ ์ •๋ฆฌ: MVT ํŒจํ„ด

  • Model: DB ์„ค๊ณ„, ORM ์ฒ˜๋ฆฌ
  • View: ๋กœ์ง/์ฒ˜๋ฆฌ
  • Template: ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” HTML ํ™”๋ฉด

์ฐธ๊ณ : Django๋Š” MVC ํ”„๋ ˆ์ž„์›Œํฌ๋ณด๋‹ค ๋จผ์ € ๋‚˜์™€์„œ ์ด๋ฆ„๋งŒ ๋‹ค๋ฅด๊ณ  ๊ตฌ์กฐ๋Š” ๊ฑฐ์˜ ๊ฐ™์Œ


๐Ÿ’Ž Django ์žฅ์ 

  • ๋น ๋ฅธ ๊ฐœ๋ฐœ ์†๋„ (๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€๋ฅผ admin.site.register(Model) ํ•œ์ค„๋กœ ์ƒ์„ฑ)
  • ๋ณด์•ˆ ๊ฐ•ํ™” (ORM ์‚ฌ์šฉ์œผ๋กœ ์ž๋™ ๋ฐฉ์–ด)
  • ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ํ™•์žฅ์„ฑ
  • ๊ฐ•๋ ฅํ•œ Admin ํŽ˜์ด์ง€
  • ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ ํŒจํ‚ค์ง€ ํ’๋ถ€

โš ๏ธ Django ๋‹จ์ 

  • ๋Ÿฌ๋‹์ปค๋ธŒ ์กด์žฌ (์ดˆ๋ฐ˜ ์ง„์ž…์žฅ๋ฒฝ)
  • Django์Šค๋Ÿฌ์šด ๊ฐœ๋ฐœ ๋ฐฉ์‹ ์š”๊ตฌ
  • ๋ณต์žกํ•œ ์„ค์ •๊ณผ ๊ตฌ์กฐ ์ดํ•ด ํ•„์š”

๐Ÿ’ฌ ๋งˆ๋ฌด๋ฆฌ Tip

  • Flask/FastAPI๋Š” ๊ฐ€๋ณ๊ณ  ์ž์œ ๋กญ์ง€๋งŒ Django๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ชจ๋“  ๊ฒŒ ๊ฐ–์ถฐ์ง„ ํ’€์Šคํƒ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.
  • ํŒ€ ํ”„๋กœ์ ํŠธ๋‚˜ ๋น ๋ฅด๊ฒŒ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ์„œ๋น„์Šค์—๋Š” Django๊ฐ€ ํ›จ์”ฌ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€