Study Anything ๐ง
ํ๋ก ํธ์ ์ฐ๊ฒฐํ๊ธฐ (1) - ์ฅ๊ณ /๋ฆฌ์กํธ ์ฐ๋ ๋ณธ๋ฌธ
ํ๋ก ํธ์ ์ฐ๊ฒฐํ๊ธฐ (1) - ์ฅ๊ณ /๋ฆฌ์กํธ ์ฐ๋
์ 2022. 1. 18. 16:26์ฐ๋ฆฌ ํ๋ก์ ํธ๋ ๋ฐฑ์๋๋ก ์ฅ๊ณ (Django)๋ฅผ ์ฌ์ฉํ๊ณ ํ๋ก ํธ์๋๋ก ๋ฆฌ์กํธ(React)๋ฅผ ์ฌ์ฉํ๋ค.
๋๋ฌธ์ ๋์ ์ฐ๋ํ๋ ๊ณผ์ ์ด ํ์ํ๋ฐ, ์ด๋ฒ ์ฃผ์ ์์๋ ์ด ๊ณผ์ ์ ๋ค๋ค๋ณด๋ ค๊ณ ํ๋ค.
๋จผ์ ์ฐ๋ฆฌ ํ๋ก์ ํธ์ ์ํฉ์ ์ค๋ช ํด์ผ ํ๊ฒ ๋ค.
์ฐ๋ฆฌ ํ๋ก์ ํธ๋ ํ๋ก ํธ์๋๋ฅผ ๋ด๋นํ๋ ํ์๊ณผ ๋ฐฑ์๋๋ฅผ ๋ด๋นํ๋ ํ์์ด ๋๋ ์ ธ์๋ค.
์ฆ, ํ ๊ฐ๋ฐํ๊ฒฝ์์ ๋ฆฌ์กํธ์ ์ฅ๊ณ ๋ฅผ ๋์์ ์ฌ์ฉํ์ง ์๋๋ค.
๋๋ฌธ์ ๋ฆฌ์กํธ์ ์ฅ๊ณ ๋ฅผ ์ฐ๋ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋จผ์ ์ดํด๋ณด์.
(1) ์ฅ๊ณ -> ๋ฆฌ์กํธ : json ๊ฐ์ฒด๋ก ๋ฐ์ดํฐ ๋ณด๋ด๊ธฐ
์ด ๋ฐฉ๋ฒ์ ์ฅ๊ณ ์ ๋ฆฌ์กํธ ์ฐ๋์ ์์๋ณผ ๋ ๊ฐ์ฅ ๋ง์ด ๋์๋ ๋ด์ฉ์ด๋ค.
์ฅ๊ณ ์ Django REST Framework(DRF) ๋ฅผ ์ด์ฉํด ์ฅ๊ณ ์ ๋ชจ๋ธ์ json ๊ฐ์ฒด๋ก ์ป์ ์ ์๋ค.
์ด ๊ณผ์ ์ ์๋ฃํ๋ฉด ์นํ์ด์ง์์ ๋ค์๊ณผ ๊ฐ์ ํ์ด์ง๋ฅผ ๋ง๋ ์ ์๋ค.
์ด๋ ๊ฒ ์ป์ url ์ ํตํด ๋ฆฌ์กํธ์์ api ๋ก ์ฅ๊ณ ์ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค.
๊ทธ๋ฌ๋ ์ด ๋ฐฉ๋ฒ์ ๋ก์ปฌ์์ ์ํํ ๊ฒฝ์ฐ ์๋ก ๋จ์ด์ ธ ์์ ํ๋ ํ๋ก ํธ์ ๋ฐฑ์ ์ฐ๊ฒฐํ๊ธฐ์ ์ด๋ ค์์ด ์์๋ค.
๊ทธ๋์ ์ฌ๋ฌ ์๋ฃ๋ฅผ ์ฐพ๋ ์ค์ ๋๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋ฐ๊ฒฌํ๋ค.
์ด ๋ฐฉ๋ฒ์ ์งํํ ๊ณผ์ ์ ๋ค์ ๊ธ์ ์์ธํ๊ฒ ๊ธฐ๋กํด๋์๋ค.
(2) ๋ฆฌ์กํธ -> ์ฅ๊ณ : build ๋ฐฐํฌํ์ผ๋ก ์ฅ๊ณ ์ ํ๋ก ํธ ์์ ์ ์ฉํ๊ธฐ
์ด ๋ฐฉ๋ฒ์ ๋ง ๊ทธ๋๋ก ๋ฆฌ์กํธ๋ก ์์ฑํ ๋ด์ฉ์ build ์์ผ์ ์์ฑ๋ ๋ฐฐํฌ ํ์ผ์ ์ฅ๊ณ ์ ๋ณ๋ ํด๋์ ์ ์ฅํ๊ณ ,
๊ทธ ํด๋๋ฅผ template ์ผ๋ก ํ์ฉํด ์ฅ๊ณ ์์ ํ๋ก ํธ ์์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
--- 22/03/01 ์ถ๊ฐ
build ๋ฐฐํฌ ํ์ผ์ ์ฎ๊ฒผ์ผ๋ฉด ์ด์ ์ฅ๊ณ ์์ ์ด ํ์ผ๋ค์ ์ฌ์ฉํ๊ธฐ ์ํ ๊ธฐ๋ณธ ์ธํ ์ ํด์ผ ํ๋ค.
์ฅ๊ณ ์ ํ ํ๋ฆฟ ํ์ผ ๋์ ๋ฆฌ์กํธ์ ๋น๋ ๋ฐฐํฌ ํ์ผ์ ์ฌ์ฉํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ TEMPLATES ๋ถ๋ถ์ DIRS ์ ๋น๋ ํ์ผ๋ค์ด ์๋ ๊ฒฝ๋ก๋ฅผ ์ค์ ํด์ค๋ค.
๊ทธ ๋ค์์ผ๋ก๋ ๊ฐ์ข static ํ์ผ๋ค์ ์ฌ์ฉํ๊ธฐ ์ํด STATICFILES_DIRS ํํธ๋ฅผ ์์ฑํด ์ค ํ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฒฝ๋ก๋ฅผ ์ค์ ํด์ค๋ค.
# Proj/config/settings.py
import os
...
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# ๋ฆฌ์กํธ ๋น๋ํ์ผ ์ฌ์ฉ
'DIRS': [ os.path.join(BASE_DIR, 'frontend', 'build'), ],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
STATICFILES_DIRS = [
# ๋ฆฌ์กํธ static ํ์ผ ์ฐ๊ฒฐ
os.path.join(BASE_DIR, 'frontend', 'build', 'static')
]
๋ค์์ผ๋ก๋ url ์ ์ค์ ํด์ค๋ค. ๋ฆฌ์กํธ์ ์ฐ๊ฒฐํด ์ฌ์ฉํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํ์ด์ง์ ์ด๋์ ๋ฆฌ์กํธ๊ฐ ๋ด๋นํ๊ณ ์ฅ๊ณ ์์๋ ์ด๊ธฐ ํ์ด์ง๋ง ๋ฆฌ์กํธ์ index ํ์ผ๊ณผ ์ฐ๊ฒฐํด์ฃผ๋ฉด ๋๋ค.
# Proj/config/urls.py
...
from django.views.generic import TemplateView
urlpatterns = [
path('', TemplateView.as_view(template_name='index.html')),
... # ๊ธฐ์กด ์์ฑ ๋ถ๋ถ๋ค
]
์ฅ๊ณ ์์ ์ด๋ ๊ฒ ๊ธฐ๋ณธ ์ค์ ์ ๋๋ธ ํ ์๋ฒ๋ฅผ ์๋์์ผ(์ฅ๊ณ ์๋ฒ๋ฅผ ์๋ํ๋ค) ํ์ธํด๋ณด๋ static ํ์ผ ๋ก๋์ ์ ์ธํ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ๋ค์ด ์ ์๋ํ๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค.
๋ค๋ง ๋ฆฌ์กํธ์์ ์ฒ์ ๋น๋๋ฅผ ์งํํ ํ ์๋ฒ์์ ์๋ํด๋ดค์ ๋ ์ผ๋ถ ๊ธฐ๋ฅ๋ค์ด ์๋ํ์ง ์์๋๋ฐ ๊ทธ ๋ถ๋ถ๋ค์ ์ฅ๊ณ ์ ์ฐ๊ฒฐํ ํ์๋ ์ฌ์ ํ ์ ์๋ํ์ง ์์๋ค. (๋ฆฌ์กํธ ๊ฐ๋ฐ์๋ฒ์์๋ ์ ์๋ํ๋ค.)
์๋๋ ์ด ๋ฐฉ๋ฒ์ ๊ฐ๋ฐ์ด ๋๋๊ธฐ ์ ์ ์๋ํ๋ค๊ฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด์ ๊ณ ๋ คํ์ง ์๊ฒ ๋์๋๋ฐ ๊ฐ๋ฐ์ด ๋ชจ๋ ๋๋ ํ ์๋ฒ์ ์ฌ๋ฆฌ๋ ค๊ณ ํ๋ค ๋ณด๋ ํ๋ก ํธ์๋์ธ ๋ฆฌ์กํธ ํ์ผ๋ค์ ์ฅ๊ณ ์ ํจ๊ป ๋ฃ์ด์ ์๋ฒ์ ๋ฑ๋กํด์ผ ํด์ ๋ค์ ์๋ํด๋ณด์๋ค.
์ฌ์ ํ static ํ์ผ์ ๋ถ๋ฌ์ค์ง ๋ชปํ๋ ๋ฌธ์ ๋ ํ์ด์ง ์ด๋์ ๋ฌธ์ ๊ฐ ์๋๋ฐ ์๋ฌด๋๋ ๋ ์๋ฒฝํ ์ฐ๊ฒฐ์ ์ํด์๋ ๋ช ๊ฐ์ง์ ์์ ์ด ๋ ํ์ํ ๋ฏ ์ถ๋ค.
---
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ ํ๋ก์ ํธ์์ static ํ์ผ๋ค์ ์ด์ฉํ๋ ๋ฐ์ ์ด๋ ค์์ด ๋ํ๋ฌ๊ณ (404 not found ์ค๋ฅ ๋ฐ์)
๋ฆฌ์กํธ์ ๊ธฐ๋ฅ์ ์๋ฒฝํ๊ฒ ์ฌ์ฉํ ์ ์์ด์ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋๋ผ๊ณ ํ๋ค.
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ ํ๋ก์ ํธ์ฒ๋ผ ํ๋ก ํธ ๋ก์ปฌ๊ณผ ๋ฐฑ ๋ก์ปฌ์ด ๋๋ ์ง ์ํฉ์์ ์๋ํด๋ณผ๋ง ํ ๋ฐฉ๋ฒ์ผ๋ก,
์์ง ์๋ฒฝํ๊ฒ ํ๋ก์ ํธ์ ์ ์ฉํ์ง ๋ชปํ์ง๋ง ์์ผ๋ก์ ๊ธ์์ ํด๊ฒฐํ๋ ๊ณผ์ ์ ๋ค๋ค๋ณผ ์์ ์ด๋ค.
--- ์ถ๊ฐ
๊ฒฐ๊ตญ static ํ์ผ์ ๋ถ๋ฌ์ค๋ ๊ฒ์ด ํด๊ฒฐ๋์ง ์์์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
---
'ํ๋ก์ ํธ > [Web] ์ํ ์์ฑ ์ฌ์ดํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ํ ์์ฑ (4) - ์ํ์ DB์ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ค๊ธฐ (POST, GET) (0) | 2022.02.04 |
---|---|
ํ๋ก ํธ์ ์ฐ๊ฒฐํ๊ธฐ (2) - Axios ํ์ฉ (0) | 2022.01.25 |
์ํ ์์ฑ (3) - ์ํ ์์ธ๋ณด๊ธฐ (0) | 2022.01.14 |
์ํ ์์ฑ (2) - ์ํ ์ฐ๊ณ ์กฐํํ๊ธฐ (0) | 2022.01.12 |
์ํ ์์ฑ (1) - ์ํ DB ๋ง๋ค๊ณ ๋ชฉ๋ก ์กฐํํ๊ธฐ (0) | 2022.01.10 |