Study Anything ๐Ÿง

ํ”„๋ก ํŠธ์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ (1) - ์žฅ๊ณ /๋ฆฌ์•กํŠธ ์—ฐ๋™ ๋ณธ๋ฌธ

ํ”„๋กœ์ ํŠธ/[Web] ์„œํ‰ ์ž‘์„ฑ ์‚ฌ์ดํŠธ

ํ”„๋ก ํŠธ์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ (1) - ์žฅ๊ณ /๋ฆฌ์•กํŠธ ์—ฐ๋™

์†” 2022. 1. 18. 16:26

์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” ๋ฐฑ์—”๋“œ๋กœ ์žฅ๊ณ (Django)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํ”„๋ก ํŠธ์—”๋“œ๋กœ ๋ฆฌ์•กํŠธ(React)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋•Œ๋ฌธ์— ๋‘˜์„ ์—ฐ๋™ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•œ๋ฐ, ์ด๋ฒˆ ์ฃผ์ œ์—์„œ๋Š” ์ด ๊ณผ์ •์„ ๋‹ค๋ค„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

๋จผ์ € ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์˜ ์ƒํ™ฉ์„ ์„ค๋ช…ํ•ด์•ผ ํ•˜๊ฒ ๋‹ค.

์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํŒ€์›๊ณผ ๋ฐฑ์—”๋“œ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ํŒ€์›์ด ๋‚˜๋ˆ ์ ธ์žˆ๋‹ค.

์ฆ‰, ํ•œ ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ ๋ฆฌ์•กํŠธ์™€ ์žฅ๊ณ ๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋•Œ๋ฌธ์— ๋ฆฌ์•กํŠธ์™€ ์žฅ๊ณ ๋ฅผ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋จผ์ € ์‚ดํŽด๋ณด์ž.

 

 

 

(1) ์žฅ๊ณ  -> ๋ฆฌ์•กํŠธ : json ๊ฐ์ฒด๋กœ ๋ฐ์ดํ„ฐ ๋ณด๋‚ด๊ธฐ

์ด ๋ฐฉ๋ฒ•์€ ์žฅ๊ณ ์™€ ๋ฆฌ์•กํŠธ ์—ฐ๋™์„ ์•Œ์•„๋ณผ ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ๋‚˜์™”๋˜ ๋‚ด์šฉ์ด๋‹ค.

์žฅ๊ณ ์˜ Django REST Framework(DRF) ๋ฅผ ์ด์šฉํ•ด ์žฅ๊ณ ์˜ ๋ชจ๋ธ์„ json ๊ฐ์ฒด๋กœ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

์ด ๊ณผ์ •์„ ์™„๋ฃŒํ•˜๋ฉด ์›นํŽ˜์ด์ง€์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋‚  ์ˆ˜ ์žˆ๋‹ค.

 

์žฅ๊ณ  ๋ชจ๋ธ json ๊ฐ์ฒด๋กœ GET ํ•˜๊ธฐ

์ด๋ ‡๊ฒŒ ์–ป์€ url ์„ ํ†ตํ•ด ๋ฆฌ์•กํŠธ์—์„œ api ๋กœ ์žฅ๊ณ ์˜ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฐฉ๋ฒ•์€ ๋กœ์ปฌ์—์„œ ์ˆ˜ํ–‰ํ•  ๊ฒฝ์šฐ ์„œ๋กœ ๋–จ์–ด์ ธ ์ž‘์—…ํ•˜๋Š” ํ”„๋ก ํŠธ์™€ ๋ฐฑ์„ ์—ฐ๊ฒฐํ•˜๊ธฐ์— ์–ด๋ ค์›€์ด ์žˆ์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์—ฌ๋Ÿฌ ์ž๋ฃŒ๋ฅผ ์ฐพ๋˜ ์ค‘์— ๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

 

์ด ๋ฐฉ๋ฒ•์„ ์ง„ํ–‰ํ•œ ๊ณผ์ •์€ ๋‹ค์Œ ๊ธ€์— ์ž์„ธํ•˜๊ฒŒ ๊ธฐ๋กํ•ด๋†“์•˜๋‹ค.

https://edorrr.tistory.com/19

 

์žฅ๊ณ  ๋ชจ๋ธ์„ json ๊ฐ์ฒด๋กœ ์ถ”์ถœํ•˜๊ธฐ (DRF)

์žฅ๊ณ ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค ๋ณด๋ฉด ํ”„๋ก ํŠธ์™€ ์—ฐ๋™ํ•˜๊ฒŒ ๋  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•๋“ค์€ ์ด์ „ ํฌ์ŠคํŠธ(link)์—์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ–ˆ๊ณ , ์ด ํฌ์ŠคํŠธ์—์„œ๋Š” ๊ทธ ์ค‘ ์žฅ๊ณ ์—์„œ ๋งŒ๋“  ๋ชจ๋ธ์„ json ๊ฐ์ฒด๋กœ ์ถ”์ถœํ•ด์„œ ์ ‘๊ทผ

edorrr.tistory.com

 

 

 

 

(2) ๋ฆฌ์•กํŠธ -> ์žฅ๊ณ  : build ๋ฐฐํฌํŒŒ์ผ๋กœ ์žฅ๊ณ ์— ํ”„๋ก ํŠธ ์š”์†Œ ์ ์šฉํ•˜๊ธฐ

์ด ๋ฐฉ๋ฒ•์€ ๋ง ๊ทธ๋Œ€๋กœ ๋ฆฌ์•กํŠธ๋กœ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์„ build ์‹œ์ผœ์„œ ์ƒ์„ฑ๋œ ๋ฐฐํฌ ํŒŒ์ผ์„ ์žฅ๊ณ ์˜ ๋ณ„๋„ ํด๋”์— ์ €์žฅํ•˜๊ณ ,

๊ทธ ํด๋”๋ฅผ template ์œผ๋กœ ํ™œ์šฉํ•ด ์žฅ๊ณ ์—์„œ ํ”„๋ก ํŠธ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

์žฅ๊ณ  ํ”„๋กœ์ ํŠธ์— build ํด๋” ์ถ”๊ฐ€

 

 

--- 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 ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์ด ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•„์„œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

---

 

 

 

 

728x90
Comments