๐ธ Django ํํ ๋ฆฌ์ผ: ๋ฌด๋ฃ ๋ฐฐํฌ ์ ๋ฏธ๋์ด ํ์ผ ์ค์
์ด ํํ ๋ฆฌ์ผ์์ ...
๋ฐฐํฌ(๋ฐ ํ๋ก๋์
๐ค) ๋์ ๋ฌด๋ฃ๋ก ๋ฏธ๋์ด ํ์ผ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๊ฒ ๋ฉ๋๋ค.
ํ๋ฆผ
์ด๋ฅผ ์ํด cloudinary ์ ์ฌ์ฉํฉ๋๋ค. settings
ํ์ผ์์ ๋ช ๊ฐ์ง๋ง ์์ ํ๋ฉด Django์์ ๋ฏธ๋์ด(์
๋ก๋๋ ํ์ผ)๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์ ์ ํ์ผ๊ณผ ๋ฏธ๋์ด ํ์ผ์ ์ฐจ์ด์
์น ๊ฐ๋ฐ์์ ์ ์ ํ์ผ์ "์ ์ "์ํ๋ฅผ ์ ์งํ๋ ํ์ผ์
๋๋ค. ์ฆ, ์ฌ์ฉ์๊ฐ ์ฌ์ดํธ์ ์ํธ ์์ฉํ๋ ์๊ฐ์๋ ํด๋น ํ์ผ์ด ์์ ๋์ง ์์ต๋๋ค.
๊ธฐ๋ณธ ์ธ ๊ฐ์ง ์ ์ ํ์ผ์ ํ
ํ๋ฆฟ์์ ์ ๊ณต๋๋ CSS
, Javascript
๋ฐ images
์
๋๋ค.
Django ์ฑ ๋ฐฐํฌ์์๋ ์ ์ ํ์ผ์ ๊ด๋ฆฌํ๊ธฐ ์ํด whitenoise์ ์ฌ์ฉํฉ๋๋ค. Django ์์ฒด๋ ๊ฐ๋ฐ ์ค์ ์ ์ ํ์ผ์ ๊ด๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์(์ฑ๋ฅ ๋ฌธ์ ๋๋ฌธ์).
heroku์ Django ์ฑ์ ๋ฐฐํฌํ๊ธฐ ์ํ ๊ธฐ๋ณธ ํํ ๋ฆฌ์ผ์ ๋ณด๋ ค๋ฉด ์ด ํํ ๋ฆฌ์ผ์ ๋ณด์ญ์์ค.
๐ฏ ์์ต์: Heroku์ Django ์ฑ ๋ฐฐํฌ
Developer Road์ Daniel Diaz ใป 2์ 18์ผ ใป 6๋ถ ์ฝ๊ธฐ
#heroku
#deploy
#devops
#django
๋ฏธ๋์ด ํ์ผ
๋ฐ๋ฉด ๋ฏธ๋์ด ํ์ผ์ ์ ํ๋ฆฌ์ผ์ด์
์ฌ์ฉ์๊ฐ ์
๋ก๋ํ ํ์ผ์
๋๋ค. ์ฆ, ์ง์์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ ํ์ผ์ด๋ฏ๋ก ์ ๊ณต๋๋ ์์ฒด ๋ฐฉ์์ด ํ์ํฉ๋๋ค.
ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง
Cloudinary Storage API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ฌด๋ฃ ๊ณ์ ์ ์์ฑํ๊ฒ ์ต๋๋ค. here.
๊ณ์ ๋ง๋ค๊ธฐ๋ฅผ ๋๋ฅด๊ณ ์ด๋ฉ์ผ๋ก ๊ณ์ ์ ํ์ธํ์ญ์์ค.
์๊ฒฉ ์ฆ๋ช
์ด ํฌํจ๋ ๋์๋ณด๋๋ฅผ ๋ฐ๊ฒ ๋ฉ๋๋ค. ๋์ค์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค ๐.
์ค์ ์์ :
์ฐ์ ๋ฏธ๋์ด ๊ด๋ฆฌ์๋ก ์ฌ์ฉํ๋ ค๋ฉด ํด๋ผ์ฐ๋ ํจํค์ง๊ฐ ํ์ํฉ๋๋ค. ์ด์ ๋ช ๊ฐ์ง ํจํค์ง๋ฅผ ์ค์นํด ๋ด
์๋ค.
pip install cloudinary django-cloudinary-storage
์ด์ ๋ช ๊ฐ์ง ๋ชจ๋์ ๊ฐ์ ธ์ค๊ฒ ์ต๋๋ค.
# At the top of the settings
import cloudinary
import cloudinary_storage
๊ทธ๋ฆฌ๊ณ ์ค์น๋ ์ฑ ์์
INSTALLED_APPS = [
# Other apps ...
# Media Cloudinary
'cloudinary',
'cloudinary_storage',
]
๋ง์ง๋ง์ผ๋ก ์ด ์ฃผ์ ๋ค์ ๋ค์ ์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ์ต๋๋ค.
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/
# Cloudinary stuff
CLOUDINARY_STORAGE = {
'CLOUD_NAME': <your cloud name>,
'API_KEY': <your api key>,
'API_SECRET': <your secret api>,
}
DEFAULT_FILE_STORAGE = 'cloudinary_storage.storage.MediaCloudinaryStorage'
๊ทธ๋ฌ๋ ๋๊ตฐ๊ฐ๋ ์ ์๊ฒ ์ด๋ ๊ฒ ๋งํ ๊ฒ์
๋๋ค. ๋ค๋์, ๋ฏธ์ณค์ด?
๊ทธ๋ฆฌ๊ณ ๋ค, ๋ง์ต๋๋ค!
๋ฐ๋ผ์ ์์ด๋์ด๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฒฉ ์ฆ๋ช
์ ๋ณดํธํ๋ ๊ฒ์
๋๋ค. ์ฆ, ๋ชจ๋ ํค๋ฅผ ์๋ฒ์ ๋ฃ๊ณ ์์ค ํ์ผ์ด ์๋ ์ฝ๋๋ฅผ ๋ฐฐํฌํ ๊ฒ์
๋๋ค.
settings.py
๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ๋ด ์ฑ์ keroku์ ๋ฐฐํฌํ ๊ฒ์ด๋ฏ๋ก Python Decouple ์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
heroku์์ Python decouple์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๊ณ ์ถ๋ค๋ฉด .
์ด ๊ฒฝ์ฐ Cloudinary ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
from decouple import config
CLOUDINARY_STORAGE = {
'CLOUD_NAME': config('CLOUD_NAME', default=""),
'API_KEY': config('API_KEY', default=""),
'API_SECRET': config('API_SECRET', default=""),
}
DEFAULT_FILE_STORAGE = 'cloudinary_storage.storage.MediaCloudinaryStorage'
์์ฌ์ด๋ ๋ฌธ์ ๊ฐ ์์ต๋๊น? ์๊ฒฌ์ ์๋ ค์ฃผ์ญ์์ค.
์๊ฐ ๋ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ์ด ํํ ๋ฆฌ์ผ์ด ์ ์ฉํ ๊ฒ์
๋๋ค ๐ค.
Follow me in My blog,
to get more awesome tutorials like this one.
Please consider supporting me on Ko-fi you help me a lot to
continue building this tutorials!.
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ธ Django ํํ ๋ฆฌ์ผ: ๋ฌด๋ฃ ๋ฐฐํฌ ์ ๋ฏธ๋์ด ํ์ผ ์ค์ ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค
https://dev.to/developerroad/django-tutorial-set-up-media-files-in-deployment-for-free-41hn
ํ
์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ
์ธ ๋ฐ๊ฒฌ์ ์ ๋
(Collection and Share based on the CC Protocol.)
๐ฏ ์์ต์: Heroku์ Django ์ฑ ๋ฐฐํฌ
Developer Road์ Daniel Diaz ใป 2์ 18์ผ ใป 6๋ถ ์ฝ๊ธฐ
์ฐ์ ๋ฏธ๋์ด ๊ด๋ฆฌ์๋ก ์ฌ์ฉํ๋ ค๋ฉด ํด๋ผ์ฐ๋ ํจํค์ง๊ฐ ํ์ํฉ๋๋ค. ์ด์ ๋ช ๊ฐ์ง ํจํค์ง๋ฅผ ์ค์นํด ๋ด ์๋ค.
pip install cloudinary django-cloudinary-storage
์ด์ ๋ช ๊ฐ์ง ๋ชจ๋์ ๊ฐ์ ธ์ค๊ฒ ์ต๋๋ค.
# At the top of the settings
import cloudinary
import cloudinary_storage
๊ทธ๋ฆฌ๊ณ ์ค์น๋ ์ฑ ์์
INSTALLED_APPS = [
# Other apps ...
# Media Cloudinary
'cloudinary',
'cloudinary_storage',
]
๋ง์ง๋ง์ผ๋ก ์ด ์ฃผ์ ๋ค์ ๋ค์ ์ฝ๋๋ฅผ ๋ถ์ฌ๋ฃ์ต๋๋ค.
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.1/howto/static-files/
# Cloudinary stuff
CLOUDINARY_STORAGE = {
'CLOUD_NAME': <your cloud name>,
'API_KEY': <your api key>,
'API_SECRET': <your secret api>,
}
DEFAULT_FILE_STORAGE = 'cloudinary_storage.storage.MediaCloudinaryStorage'
๊ทธ๋ฌ๋ ๋๊ตฐ๊ฐ๋ ์ ์๊ฒ ์ด๋ ๊ฒ ๋งํ ๊ฒ์ ๋๋ค. ๋ค๋์, ๋ฏธ์ณค์ด?
๊ทธ๋ฆฌ๊ณ ๋ค, ๋ง์ต๋๋ค!
๋ฐ๋ผ์ ์์ด๋์ด๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฒฉ ์ฆ๋ช ์ ๋ณดํธํ๋ ๊ฒ์ ๋๋ค. ์ฆ, ๋ชจ๋ ํค๋ฅผ ์๋ฒ์ ๋ฃ๊ณ ์์ค ํ์ผ์ด ์๋ ์ฝ๋๋ฅผ ๋ฐฐํฌํ ๊ฒ์ ๋๋ค.
settings.py
๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ๋ด ์ฑ์ keroku์ ๋ฐฐํฌํ ๊ฒ์ด๋ฏ๋ก Python Decouple ์ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.heroku์์ Python decouple์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๊ณ ์ถ๋ค๋ฉด .
์ด ๊ฒฝ์ฐ Cloudinary ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
from decouple import config
CLOUDINARY_STORAGE = {
'CLOUD_NAME': config('CLOUD_NAME', default=""),
'API_KEY': config('API_KEY', default=""),
'API_SECRET': config('API_SECRET', default=""),
}
DEFAULT_FILE_STORAGE = 'cloudinary_storage.storage.MediaCloudinaryStorage'
์์ฌ์ด๋ ๋ฌธ์ ๊ฐ ์์ต๋๊น? ์๊ฒฌ์ ์๋ ค์ฃผ์ญ์์ค.
์๊ฐ ๋ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ด ํํ ๋ฆฌ์ผ์ด ์ ์ฉํ ๊ฒ์ ๋๋ค ๐ค.
Follow me in My blog,
to get more awesome tutorials like this one.
Please consider supporting me on Ko-fi you help me a lot to
continue building this tutorials!.
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ธ Django ํํ ๋ฆฌ์ผ: ๋ฌด๋ฃ ๋ฐฐํฌ ์ ๋ฏธ๋์ด ํ์ผ ์ค์ ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/developerroad/django-tutorial-set-up-media-files-in-deployment-for-free-41hnํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค