๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

๐ŸŒ Django์—์„œ์˜ HTTP ๋™์ž‘ ์›๋ฆฌ์™€ HTML, CSS ์—ฐ๋™ ๊ตฌ์กฐ

by Mandy's 2025. 7. 30.

1. ๐Ÿ” HTTP ์š”์ฒญ๋ถ€ํ„ฐ ์‘๋‹ต๊นŒ์ง€์˜ ํ๋ฆ„

์›น์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๋ชจ๋ธ์— ๋”ฐ๋ผ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“ฆ ์š”์ฒญ → ์ฒ˜๋ฆฌ → ์‘๋‹ต ์ˆœ์„œ

๋ธŒ๋ผ์šฐ์ €
  |
  | (1) ์š”์ฒญ: URL ํด๋ฆญ, form ์ œ์ถœ ๋“ฑ
  ↓
Django ์›น ์„œ๋ฒ„ (views.py)
  |
  | (2) ์š”์ฒญ ์ฒ˜๋ฆฌ ๋ฐ ๋กœ์ง ์‹คํ–‰
  ↓
ํ…œํ”Œ๋ฆฟ ๋ Œ๋”๋ง (HTML)
  |
  | (3) HTML ์‘๋‹ต ์ƒ์„ฑ
  ↓
๋ธŒ๋ผ์šฐ์ €
  |
  | (4) ํ™”๋ฉด ๋ Œ๋”๋ง + CSS/JS ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

2. โš™ Django์˜ ๋‚ด๋ถ€ ๋™์ž‘ ๊ตฌ์กฐ

โœ… 1) URL ์š”์ฒญ

  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ https://example.com/posts/๋ฅผ ์š”์ฒญํ•˜๋ฉด,
  • urls.py์—์„œ ํ•ด๋‹น URL ํŒจํ„ด์„ ์ฐพ์•„ views.py์˜ ํŠน์ • ํ•จ์ˆ˜(๋˜๋Š” ํด๋ž˜์Šค)๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
# urls.py
path("posts/", views.posts_list, name="posts-list")
 

โœ… 2) View์—์„œ ๋กœ์ง ์ฒ˜๋ฆฌ

  • View๋Š” DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ๊ณ„์‚ฐํ•œ ํ›„,
  • ํ…œํ”Œ๋ฆฟ ํŒŒ์ผ(HTML)๊ณผ ํ•จ๊ป˜ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.
# views.py
def posts_list(request):
    posts = Post.objects.all()
    return render(request, "blog/posts.html", {"posts": posts})

โœ… 3) Template ๋ Œ๋”๋ง

  • Django์˜ ํ…œํ”Œ๋ฆฟ ์—”์ง„์€ .html ํŒŒ์ผ์„ ์ฝ๊ณ ,
  • ์ „๋‹ฌ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜์˜ํ•ด HTML ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
<!-- posts.html -->
{% for post in posts %}
  <h2>{{ post.title }}</h2>
{% endfor %}

3. ๐ŸŽจ HTML & CSS์˜ ์—ญํ• 

๐Ÿ“„ HTML

  • ๊ตฌ์กฐ๋ฅผ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. (<div>, <h1>, <p>, <form> ๋“ฑ)
  • Django๊ฐ€ render()๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฃผ๋œ ์ฝ˜ํ…์ธ ๋Š” HTML์ž…๋‹ˆ๋‹ค.

๐ŸŽจ CSS

  • ์Šคํƒ€์ผ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • Django์—์„œ๋Š” ๋ณดํ†ต static ํด๋”๋ฅผ ๋งŒ๋“ค์–ด .css ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
<!-- HTML ์˜ˆ์‹œ -->
<link rel="stylesheet" href="{% static 'styles/main.css' %}">

๐Ÿ” ๋ธŒ๋ผ์šฐ์ €๋Š” HTML์„ ๋จผ์ € ๋ฐ›๊ณ , ๊ทธ ์•ˆ์— ์—ฐ๊ฒฐ๋œ CSS/JS๋„ ์ถ”๊ฐ€ ์š”์ฒญํ•จ

(1) HTML ๋ฐ›์Œ → (2) CSS/JS ๊ฒฝ๋กœ ํƒ์ƒ‰ → (3) ์ •์  ํŒŒ์ผ ์š”์ฒญ → (4) ํ™”๋ฉด ์™„์„ฑ

4. ๐Ÿงฑ ์ •์  ํŒŒ์ผ (Static files)์˜ ์ฒ˜๋ฆฌ

  • ๊ฐœ๋ฐœ ์ค‘์—” runserver๊ฐ€ CSS ํŒŒ์ผ๋„ ์ž๋™์œผ๋กœ ์„œ๋น™ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐฐํฌ ์‹œ์—” ์›น ์„œ๋ฒ„(Nginx ๋“ฑ)๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋ณ„๋„ ์ •์  ํŒŒ์ผ ์„œ๋ฒ„๋ฅผ ๋‘ก๋‹ˆ๋‹ค.
# settings.py
STATIC_URL = "/static/"
STATICFILES_DIRS = [BASE_DIR / "static"]

๐Ÿ“Œ ์ •๋ฆฌ

๋‹จ๊ณ„๋‚ด์šฉ๊ด€๋ จ ํŒŒ์ผ
๋‹จ๊ณ„ ๋‚ด์šฉ ๊ด€๋ จ ํŒŒ์ผ
์š”์ฒญ ์‚ฌ์šฉ์ž๊ฐ€ URL์„ ์š”์ฒญ urls.py
์ฒ˜๋ฆฌ View์—์„œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ views.py
๋ Œ๋”๋ง HTML ํ…œํ”Œ๋ฆฟ ๋ Œ๋”๋ง templates/*.html
์Šคํƒ€์ผ CSS ํŒŒ์ผ๋กœ ๊พธ๋ฐˆ static/*.css
 

๐Ÿ“ท ๋‹ค์ด์–ด๊ทธ๋žจ ์ด๋ฏธ์ง€ ์ฒจ๋ถ€