๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • What would life be If we had no courage to attemp anything?
Development/Django

Django

by DevIseo 2022. 3. 7.

Django -์ˆ˜๋ ˆ๋ฐ”ํ€ด๋ฅผ ๋งŒ๋“ค ํ•„์š” ์—†์ด ์•ฑ์„ ์ž‘์„ฑ ๊ฐ€๋Šฅ!

Static web page(์ •์  ์›น ํŽ˜์ด์ง€)

  • ์„œ๋ฒ„์— ๋ฏธ๋ฆฌ ์ €์žฅ๋œ ํŒŒ์ผ์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ๋˜๋Š” ์›น ํŽ˜์ด์ง€
  • ์„œ๋ฒ„๊ฐ€ ์ •์  ์›น ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๋ฐ›์€ ๊ฒฝ์šฐ ์„œ๋ฒ„๋Š” ์ถ”๊ฐ€์ ์ธ ์ฒ˜๋ฆฌ ๊ณผ์ • ์—†์ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์„ ๋ณด๋ƒ„
  • ๋ชจ๋“  ์ƒํ™ฉ์—์„œ ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋™์ผํ•œ ์ •๋ณด๋ฅผ ํ‘œ์‹œ
  • ์ผ๋ฐ˜์ ์œผ๋กœ HTML, CSS, JavaScript๋กœ ์ž‘์„ฑ๋จ
  • flat page๋ผ๊ณ ๋„ ํ•จ
  • ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ๊ณผ์ •์ด ๋”ฐ๋กœ ์—†์Œ
  • ์ •์  ์›นํŽ˜์ด์ง€์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ๋ชจ๋“  ์ƒํ™ฉ์—์„œ ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ๋™์ผํ•œ ์ •๋ณด๋ฅผ ํ‘œ์‹œ!

 

Dynamic web page(๋™์  ์›น ํŽ˜์ด์ง€)

  • ์›น ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๋ฐ›์€ ๊ฒฝ์šฐ ์ถ”๊ฐ€์ ์ธ ์ฒ˜๋ฆฌ ๊ณผ์ •์ด ์žˆ์Œ!
  • ์ถ”๊ฐ€์ ์ธ ์ฒ˜๋ฆฌ ๊ณผ์ • ์ดํ›„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์„ ๋ณด๋ƒ„
  • ๋™์  ์›น ํŽ˜์ด์ง€๋Š” ๋ฐฉ๋ฌธ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŽ˜์ด์ง€ ๋‚ด์šฉ์€ ๊ทธ๋•Œ๊ทธ๋•Œ ๋‹ค๋ฆ„
  • ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์‚ฌ์šฉ๋จ, ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ์ด๋ค„์ง- python,java,c++

Framework

  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํŠน์ • ์šด์˜ ์ฒด์ œ๋ฅผ ์œ„ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํ‘œ์ค€ ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค์™€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ์ž„
  • ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋งŽ์€ ์ฝ”๋“œ๋ฅผ ํ”„๋ ˆ์ž„ ์›Œํฌ๋กœ ํ†ตํ•ฉํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ƒˆ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ํ‘œ์ค€ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์›€
  • application framework๋ผ๊ณ ๋„ ํ•จ

Web framework

  • ์›น ํŽ˜์ด์ง€๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ฒช๋Š” ์–ด๋ ค์›€์„ ์ค„์ด๋Š” ๊ฒƒ์ด ์ฃผ ๋ชฉ์ !

 

Framework Architecture

  • MVC Design Pattern(model - view - controller)
  • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋žจ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹œ๊ฐ์  ์š”์†Œ๋‚˜ ์ด๋ฉด์—์„œ ์‹คํ–‰๋˜๋Š” ๋ถ€๋ถ„์„ ์„œ๋กœ ์˜ํ–ฅ ์—†์ด ์‰ฝ๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ!
  • Django๋Š” MTV Pattern์ด๋ผ๊ณ  ํ•จ

 

  • UI๋ž‘ ๋ณ„๋„๋กœ ์‹œ๊ฐ์ ์ธ ์š”์†Œ๋‚˜ ์ด๋ฉด์—์„œ ์‹คํ–‰๋˜๋Š” ๋ถ€๋ถ„์„ ์„œ๋กœ ์˜ํ–ฅ์—†์ด ์‰ฝ๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ์Œ
  • Django ๋Š” MTV(model-template-view) Pattern์ด๋ผ๊ณ  ํ•จ! mvc๋ž‘ ๊ฐ™์€๋ฐ ์ด๋ฆ„๋งŒ ๋ฐ”๊ฟ”๋ถ€๋ฅด๋Š”

 

MTV Pattern

  • Model
    • ์‘์šฉํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ธฐ๋ก์„ ๊ด€๋ฆฌ(์ถ”๊ฐ€, ์ˆ˜์ •,์‚ญ์ œ)
  • Template
    • ์‹ค์ œ ๋‚ด์šฉ์„ ๋ณด์—ฌ์ฃผ๋Š”๋ฐ ์‚ฌ์šฉ(presentation)
    • ํŒŒ์ผ์˜ ๊ตฌ์กฐ๋‚˜ ๋ ˆ์ด์•„์›ƒ์„ ์ •์˜
  • View (controller)
    • Model์„ ํ†ตํ•ด ์š”์ฒญ์„ ์ถฉ์กฑ์‹œํ‚ค๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ
    • template์—๊ฒŒ ์‘๋‹ต์˜ ์„œ์‹ ์„ค์ •์„ ๋งก๊น€
    • HTTP์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ณ  HTTP ์‘๋‹ต์„ ๋ฐ˜ํ™˜

 

1)http request - ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›์Œ

2)URLS - ์š”์ฒญ์„ ๋ฐ›์•„ ์ ์ ˆํ•œ view๋ฅผ ์ฐพ์•„ ์š”์ฒญ์„ ์ „๋‹ฌ

3)View

  • ์‘๋‹ต
  • template์ด ์žˆ์œผ๋ฉด ๊ฐ€์ ธ์˜ด (optional)
  • model๊ณผ์˜ ์ƒํ˜ธ์ž‘์šฉ (optional)

4)์‘๋‹ต (HTTP Response - HTML)

 

Project & Application

  • project
    • Project๋Š” ์•ฑ์˜ ์ง‘ํ•ฉ! (collection of apps)
    • ํ”„๋กœ์ ํŠธ์—๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ์•ฑ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Œ!
    • ์•ฑ์€ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์— ์žˆ์„ ์ˆ˜ ์žˆ์Œ
  • application
    • ์•ฑ์€ ์‹ค์ œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ํ•˜๋Š” ๋“ฑ์˜ ์—ญํ• ์„ ๋‹ด๋‹น
    • ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ๋Š” ์—ฌ๋Ÿฌ ์•ฑ์„ ๊ฐ€์ง
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์•ฑ์€ ํ•˜๋‚˜์˜ ์—ญํ•  ๋ฐ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์ž‘์„ฑํ•จ
  •  

์•ฑ๋“ฑ๋ก

  • project์˜ settings.py์—์„œ INSTALLED_APPS์— ๋ฐ˜๋“œ์‹œ ์•ฑ์„ ๋“ฑ๋กํ•ด์ค˜์•ผํ•จ!
  • INSTALLED_APPS
    • Django installation์— ํ™œ์„ฑํ™” ๋œ ๋ชจ๋“  ์•ฑ์„ ์ง€์ •ํ•˜๋Š” ๋ฌธ์ž์—ด ๋ชฉ๋ก
  • ๋ฐ˜๋“œ์‹œ ์ƒ์„ฑ ํ›„ ๋“ฑ๋ก!!
  • ๋จผ์ € ์ž‘์„ฑ(๋“ฑ๋ก)ํ•˜๊ณ  ์ƒ์„ฑํ•˜๋ ค๋ฉด ์•ฑ์ด ์ƒ์„ฑ์ด ์•ˆ๋จ
INSTALLED_APPS = [
	#Local apps
	'articles',

	#Third party apps
	'djangorestframework',

	#Django apps
	'django.contrib.admin',
	'django.contrib.auth',
	'django.contrib.contenttypes',
	'django.contrib.sessions',
	'django.contrib.messages',
	'django.contrib.staticfiles',
]
  • ํ•ด๋‹น ์ˆœ์„œ๋ฅผ advancedํ•œ ๋‚ด์šฉ ๋Œ€๋น„๋ฅผ ์œ„ํ•ด ์ง€ํ‚ค๋Š”๊ฑธ ๊ถŒ์žฅ

 

<์š”์ฒญ๊ณผ ์‘๋‹ต>

URLs

  • HTTP์š”์ฒญ(request)์„ ์•Œ๋งž์€ view๋กœ ์ „๋‹ฌ
  • ์žฅ๊ณ ๋Š” ๋ฐ˜๋“œ์‹œ end slash (/)๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•จ!

View

  • HTTP์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๊ณ  HTTP ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ ์ž‘์„ฑ
  • Model์„ ํ†ตํ•ด ์š”์ฒญ์— ๋งž๋Š” ํ•„์š” ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผ
  • Template์—๊ฒŒ HTTP ์‘๋‹ต ์„œ์‹์„ ๋งก๊น€
  • view๋Š” app์— ์žˆ์Œ! -views.py๋Š” ์ผ์ข…์˜ ๋ชจ๋“ˆ
  • django - trailing comma์žฅ๊ณ ์—์„œ๋Š” trailing comma๋ฅผ ์ž‘์„ฑ! -์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ!
  • ํŒŒ์ด์ฌ์€ ๋ฆฌ์ŠคํŠธ์— ์š”์†Œ ํ•˜๋‚˜์ผ ๋•Œ ‘ ,’๋ฅผ ์•ˆ์“ฐ์ง€๋งŒ
  • *****view ํ•จ์ˆ˜๊ฐ€ ๋ฌด์กฐ๊ฑด ๋ฐ›์•„์•ผ ํ•˜๋Š” ์ธ์ž : requesturls.py์—์„œ์˜ ์š”์ฒญ์ด ๋„˜์–ด์˜ด
  • request ์ž‘์„ฑ ์•ˆ ํ•˜๋ฉด ์˜ค๋ฅ˜๋‚จ!! ์ฒซ๋ฒˆ์งธ ํ•„์ˆ˜ ์ธ์ž์ž„.

Templates

  • ์‹ค์ œ ๋‚ด์šฉ์„ ๋ณด์—ฌ์ฃผ๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํŒŒ์ผ
  • ํŒŒ์ผ์˜ ๊ตฌ์กฐ๋‚˜ ๋ ˆ์ด์•„์›ƒ์„ ์ •์˜ ( ex.HTML)
  • Template ํŒŒ์ผ ๊ฒฝ๋กœ์˜ ๊ธฐ๋ณธ ๊ฐ’์€ app ํด๋” ์•ˆ์˜ templates ํด๋”๋กœ ์ง€์ •๋จ!
  • app์— templates ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  OOOO.html์ƒ์„ฑ

์ถ”๊ฐ€์„ค์ •

#settings.py

  • LANGUAGE_CODE
    • ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ์ œ๊ณต๋˜๋Š” ๋ฒˆ์—ญ์„ ๊ฒฐ์ •
    • ์ด ์„ค์ •์ด ์ ์šฉ๋˜๋ ค๋ฉด USE_I18N์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์–ด์•ผ ํ•จ
    • language-identifiers
  • TIME_ZONE
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์˜ ์‹œ๊ฐ„๋Œ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด ์ง€์ •
    • USE_TZ๊ฐ€ True์ด๊ณ  ์ด ์˜ต์…˜์ด ์„ค์ •๋œ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์—์„œ ๋‚ ์งœ ์‹œ๊ฐ„์„ ์ฝ์œผ๋ฉด, UTC๋Œ€์‹  ์ƒˆ๋กœ ์„ค์ •ํ•œ ์‹œ๊ฐ„๋Œ€์˜ ์ธ์‹ ๋‚ ์งœ & ์‹œ๊ฐ„์ด ๋ฐ˜ํ™˜ ๋จ
    • USE_TZ์ด False์ธ ์ƒํƒœ๋กœ ์ด ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ error๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์ฃผ์˜!
    • List of tz database time zones
  • USE_I18N
    • Django์˜ ๋ฒˆ์—ญ ์‹œ์Šคํ…œ์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •
  • USE_L10N
    • ๋ฐ์ดํ„ฐ์˜ ์ง€์—ญํ™” ๋œ ํ˜•์‹(localized formatting)์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •
    • True์ผ ๊ฒฝ์šฐ, Django๋Š” ํ˜„์žฌ locale์˜ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆซ์ž์™€ ๋‚ ์งœ๋ฅผ ํ‘œ์‹œ
  • USE_TZ
    • datetimes๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹œ๊ฐ„๋Œ€๋ฅผ ์ธ์‹ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •
    • True์ผ ๊ฒฝ์šฐ Django๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์‹œ๊ฐ„๋Œ€ ์ธ์‹ ๋‚ ์งœ/์‹œ๊ฐ„์„ ์‚ฌ์šฉ

'Development > Django' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Django ํ™˜๊ฒฝ ํ™œ์„ฑํ™”  (0) 2022.03.06

๋Œ“๊ธ€