Django로 웹사이트 만들기 #2
DJANGO 디렉토리 구조
개발환경 Window / Ubuntu18.04 / Python 3.6.9
classic/
manage.py
templates/
venv-python3.6.9/
Lib/
site-packages/
Django...
allauth...
bin/
activate
djecommerce/
settings/
__init__.py
base.py -----------------------> <1> S3설정
development.py
production.py -----------------------> <2> RDS(mysql)설정
__init__.py
wsgi.py -----------------------> <3> UWSGI설정
storages.py -----------------------> <1> S3설정
urls.py
core/
__init__.py
views.py
urls.py
models.py
admin.py
<1> S3 연동하기
제대로된 서비스를 배포하기 위해선 DJANGO 코드를 잘 작성하는것 뿐만 아니라, 외부 instance를 잘 활용하여 안정적인 배포를 하는것도 매우 중요하다. 이를 위해선 아마존 AWS에서 instance를 빌려와서 구성하겠다.
쉽게 비유하자면 (DJANGO 코드)로 홈페이지를 돌릴건데 각종 aws에서 판매하는 instance(item) 을 붙여서 안정적으로 홈페이지를 돌린다. 이번 게시글에선 S3 라는 ITEM연동을 알아볼것이다.
S3는 aws에서 제공하는 service중 하나로, 데이터베이스 서버 서비스다. 쉽게 말하자면 홈페이지를 돌릴 때 저장할것들(사진, 동영상 등등...)을 어디에 저장할 것인가? 서버컴퓨터 하드디스크? 이때 아마존에서 빌려주는 원격대형 저장소 S3에 저장하면 편하고 쉽다.
아마존에서 S3를 만들기 위해선 여러가지 방법이 있다. cli(command line interface) 또는 GUI(Graphic user interface)
쉽게말하자면
CLI - 현재 코딩중인 환경에서 코드로 만드는 방법
GUI - 인터넷홈페이지 들어가서 마우스로 클릭하면서 만드는 방법
필자는 GUI 방식으로 설명하겠다.
아마존에서 기본적인 S3 인스턴스를 구성한다. 여기서 중요한점은
보안그룹을 명확히 결정하는 것이다. (S3를 만들고 어떤 접근을 허용할지 결정하는게 보안정책, 이를 묶어놓은게 보안그룹) S3로 접근하려는 본인의 IP를 추가한다. (port는 443)
GUI를 통해 S3를 완료했다면 (이때 S3설정 이름을 기억한다)
1.
<STATIC파일 설정>
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
]
<MEDIA파일 설정>
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
<AWS S3 설정>
AWS_ACCESS_KEY_ID = 'ACCESS KEY ID'
AWS_SECRET_ACCESS_KEY = 'Access Secret Key'
AWS_REGION = 'ap-northeast-2(s3버킷을 서울지역으로 만들었다면)'
AWS_STORAGE_BUCKET_NAME = '버킷명'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.%s.amazonaws.com' % (AWS_STORAGE_BUCKET_NAME,AWS_REGION)
DATA_UPLOAD_MAX_MEMORY_SIZE = 1024000000
FILE_UPLOAD_MAX_MEMORY_SIZE = 1024000000
DEFAULT_FILE_STORAGE = 'djecommerce.storages.MediaStorage'
STATICFILES_STORAGE = 'djecommerce.storages.StaticStorage'
MEDIAFILES_LOCATION = 'Media 파일'
STATICFILES_LOCATION = 'Static 파일'
- static_url 이란 정적파일의 가상 최상위 directory다. 쉽게말하자면 이렇게 설정해 놓으면 추후에 배포됐을때 서버에서 static파일 요청할때 url이 /static/... 으로 날라오게 된다. 이를 추후에 nginx 가 location /static/ { alias ... } 등으로 처리해준다.
- aws에서 s3만들때 썼던 사항을 잘 적어넣는다.
- DEFAULT_FILE_STORAGE는 media파일 저장공간을 일컫는다. 이를 어디로 결정할지는 추후에 storages.py 스크립트를 만들어 정해준다.
- STATICFILES_STORAGE도 마찬가지
==> collectstatic 명령어를 쳤을때 모이는 장소를 결정하는 것이다.
- MEDIAFILES_LOCATION, STATICFILES_LOCATION은 추후에 collectstaic 됐을때 모일 폴더 이름을 결정해놓는다.
from django.conf import settings
from storages.backends.s3boto3 import S3Boto3Storage
class MediaStorage(S3Boto3Storage):
location = settings.MEDIAFILES_LOCATION
class StaticStorage(S3Boto3Storage):
location = settings.STATICFILES_LOCATION
프로젝트 root경로에 storages.py 스크립트에 위와같은 class 함수를 만들어준다.
마지막으로 collectstatic 명령어로 s3버킷에 static,media파일이 모이는것을 확인한다.
아마존 AWS S3버킷을 만들고, 여기에 연동하는 작업을 다루어봤다.
'ISSUES > 시사&스터디' 카테고리의 다른 글
|Trouble Shooting| Docker nginx 가 static file 못 가져올때 (0) | 2021.09.10 |
---|---|
|Trouble Shooting| MYSQL 설치 오류날 때? -Elasticbeanstalk- (3) | 2021.09.10 |
Django로 웹사이트 만들기#1 (0) | 2021.09.08 |
아크 인베스트먼트 빅 아이디어로 알아보는 반도체 세계 (0) | 2021.02.24 |
[ETF 열풍] 아크 인베스트먼트와 캐시우드 (0) | 2021.02.22 |