๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป Programming/programming

[Django] Project์™€ App ๊ตฌ์กฐ & Reusable App

๐Ÿ” Django

์›น ๊ฐœ๋ฐœ์€ ์œ ์ €์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ๋ถ€๋ถ„์ธ ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐ์ดํ„ฐ์™€ ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ๋ฐฑ์—”๋“œ๊ฐ€ ์žˆ์œผ๋ฉฐ, Django๋Š” ๋ชจ๋‘ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•œ ํ’€์Šคํƒ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งํ•จ

๐Ÿ“ Project vs App

  • Project : ์›น ์„œ๋น„์Šค ์ „์ฒด
  • App : ๊ธฐ๋Šฅ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋‹จ์œ„ (example: ํšŒ์›๊ฐ€์ž…, ์žฅ๋ฐ”๊ตฌ๋‹ˆ๋‹ด๊ธฐ, ๊ตฌ๋งคํ•˜๊ธฐ ๋“ฑ)

โ–ช๏ธProject ๊ตฌ์กฐ

  • ์žฅ๊ณ ์—์„œ ํ”„๋กœ์ ํŠธ๋Š” ์›น์‚ฌ์ดํŠธ๋ฅผ ๋งํ•จ

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

1. Project Root

  • ์ตœ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ์ธ ํ”„๋กœ์ ํŠธ ๋ช… ๋””๋ ‰ํ† ๋ฆฌ
  • ํ”„๋กœ์ ํŠธ์˜ ์ „์ฒด ํŒŒ์ผ์ด ๋“ค์–ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ

2. manage.py

  • ํ•˜๋‚˜์˜ Django ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ช…๋ น ์œ ํ‹ธ๋ฆฌํ‹ฐ
  • Django ์•ฑ ์ƒ์„ฑ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰, ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ ๋“ฑ์˜ ์ž„๋ฌด์ˆ˜ํ–‰
  • ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” django-admin์„ ์‚ฌ์šฉํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋ชจ๋“  ๊ธฐ๋Šฅ์€ manage.py๋ฅผ ์‚ฌ์šฉ
  • django-admin and manage.py documentation

3. ProjectApp (Django Root)

  • Project Root ์•ˆ์— ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ๋ช… ๋””๋ ‰ํ† ๋ฆฌ๋กœ, ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ์—ฌ๋Ÿฌ ํŒŒ์ผ์ด ๋‹ด๊ฒจ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ

1) __ init __.py

  • __init__.py ํŒŒ์ผ์ด ํฌํ•จ๋œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ Python์˜ ํŒจํ‚ค์ง€๋กœ ์ธ์‹ํ•˜๊ฒŒ๋” ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ
  • python 3.3 ์ดํ›„ ๋ฒ„์ „๋ถ€ํ„ฐ๋Š” ์ด ํŒŒ์ผ์ด ์—†์–ด๋„ ํŒจํ‚ค์ง€๋กœ ์ธ์‹๋˜์ง€๋งŒ ํ•˜์œ„ ๋ฒ„์ „ ํ˜ธํ™˜์„ ์œ„ํ•ด ์ž‘์„ฑ ๊ถŒ์žฅ

2) settings.py

  • Django ํ”„๋กœ์ ํŠธ์˜ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์„ค์ •์„ ๋‹ด๊ณ  ์žˆ๋Š” ํŒŒ์ผ

3) urls.py

  • Django ํ”„๋กœ์ ํŠธ๋กœ ๋“ค์–ด์˜จ url์„ ๋ณด๊ณ  ์•Œ๋งž์€ ๋กœ์ง(View)์œผ๋กœ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ํŒŒ์ผ
  • Django ํ”„๋กœ์ ํŠธ์˜ ๋ชฉ์ฐจ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Œ

4) wsgi.py

  • WSGI๋Š” WebServer Gateway Interface์˜ ์•ฝ์ž๋กœ ํŒŒ์ด์ฌ์—์„œ ์›น ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์ผ์ข…์˜ ์•ฝ์†(ํ”„๋กœํ† ์ฝœ)
  • ๊ฐ„๋‹จํ•˜๊ฒŒ ์›น ์„œ๋ฒ„์™€ Django ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์—ญํ• 
  • ์œ„ํ‚คํ”ผ๋””์•„ WSGI

โ–ช๏ธApp ๊ตฌ์กฐ

  • ์•ฑ์„ ๋งŒ๋“ค๋ฉด ์ž๋™์œผ๋กœ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ

์•ฑ ๊ตฌ์กฐ

  1. __int__.py : ํ•ด๋‹น ํŒŒ์ผ์ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํŒŒ์ด์ฌ ํŒจํ‚ค์ง€๋กœ ์ธ์‹ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”
  2. admin.py : ์•ฑ์„ django ๊ด€๋ฆฌ์ž์™€ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์„ค์ • ํŒŒ์ผ
  3. apps.py : ์•ฑ์— ๋Œ€ํ•œ ์„ค์ •์„ ๋„ฃ์–ด๋‘๋Š” ํŒŒ์ผ, ๊ฐ App๋งˆ๋‹ค ์ถ”๊ฐ€์ ์ธ ๊ธฐ๋Šฅ ๋ฐ ์„ค์ •์„ ๋„ฃ์–ด์ฃผ๊ธฐ ์œ„ํ•จ
  4. migrations ๋””๋ ‰ํ† ๋ฆฌ : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ํžˆ์Šคํ† ๋ฆฌ ๋ˆ„์ 
  5. models.py : django app์—์„œ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์ •์˜ · ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์—ฐ๋™๊ณผ ๊ด€๋ จ๋œ ํŒŒ์ผ (ํ•ต์‹ฌ)
  6. tests.py : ์•ฑ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ํŒŒ์ผ
  7. views.py : django app์˜ ๋ฉ”์ธ ๋กœ์ง ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ ํŒŒ์ผ (ํ•ต์‹ฌ)

  • [ํ•„์ˆ˜ ์‚ฌํ•ญ] ์žฅ๊ณ ์—์„œ ์ƒˆ๋กœ์šด ์•ฑ์„ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด ์žฅ๊ณ ์—๊ฒŒ ์ƒˆ๋กœ์šด ์•ฑ์„ ๋งŒ๋“ค์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๋ ค ์ค˜์•ผ ํ•จ!
    • โ“how? settings.py์— INSTALLED_APPS ๋ฆฌ์ŠคํŠธ ์•ˆ์— {‘์ƒˆ๋กœ์šด ์•ฑ ์ด๋ฆ„'}์„ ๋„ฃ์–ด์ฃผ์–ด์•ผํ•œ๋‹ค.

ProjectApp ๋””๋ ‰ํ† ๋ฆฌ -> settings.py

๐Ÿ” ์•ฑ ์ƒ์„ฑ ๋ช…๋ น์–ด

python manage.py startapp {์ƒ์„ฑํ•  App ์ด๋ฆ„}

#์˜ˆ์‹œ
python manage.py startapp foods

โ–ช๏ธReusable App

Reusable App(์žฌ์‚ฌ์šฉ์„ฑ์ด ์žˆ๋Š” App) : ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ง„ App

๐Ÿ” Reusable App์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•?

  • ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ ๋‹จ์œ„ : ์ฒ˜์Œ๋ถ€ํ„ฐ ์ž‘์€ ๋‹จ์œ„์˜ App์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์€ ์–ด๋ ต๋‹ค
  • ์„ธ๊ณ„์ ์ธ Django ๋ ˆํผ๋Ÿฐ์Šค์ธ DjangoCon ์ฐธ๊ณ  : DjangoCon 2008: Reusable Apps

๐Ÿ” DjangoCon

  • ํ•œ ๊ฐ€์ง€ ์•ฑ์€ ํ•œ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ํ•˜๊ณ , ๊ทธ ๊ธฐ๋Šฅ์„ ์ž˜ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
  • ์žฅ๊ณ  ๊ฐœ๋ฐœ์ž๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŽ์€ ์•ฑ์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋‘๋ ค์›Œํ•˜๋ฉด ์•ˆ ๋œ๋‹ค.
  • ๊ฐ๊ฐ์˜ ์•ฑ์„ ์œ ์—ฐํ•˜๊ฒŒ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
  • ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

๐Ÿ™ Reference