Django - Dstagram part4-아마존 S3 연동하기(이미지 서버)
Web/Django

Django - Dstagram part4-아마존 S3 연동하기(이미지 서버)

뉴비뉴 2019. 7. 23.

이미지 서버는 웹 서버 인프라에서 중요한 역할을 차지한다. 폭발적인 사용자 증가를 감당하려면 필히 웹 서버의 댓수를 늘려야 하는데 이럴 경우 사용자가 업로드한 이미지를 동기화하는데 큰 노력이 필요합니다. 동기화 하는데 가장 간단한 방법은 이미지 서버를 별도로 두고 모든 웹 서버가 같은 이미지 서버를 이용하도록 하는 것 입니다.

 

S3는 이미지 서버로 사용하기에 충분한 파일 서빙 속도를 가지고 있습니다. 그리고 무제한의 용량을 사용할 수 있고 안정성 또한 높아 이미지 서버로 사용하기에 적절합니다.

 

AWS 회원가입이 완료된 상태로 S3 버킷 생성

1. 서비스 메뉴를 클릭하고 스토리지 -> S3 클릭

2. 버킷 만들기

버킷 이름을 설정해준 뒤 다음
기본 값을 유지해두고 다음

버킷 만들기 하면 새로운 버킷이 생성된 걸 확인할 수 있다.

이제 API 권한을 설정하겠습니다.

IAM 설정하기

아마존은 보안 정책이 강력해서 어떤 기능이던지 개별적으로 권한을 부여해서 사용할 수 있다.

S3 를 이용하기 위한 권한을 만들어 보겠습니다.

 

1. 서비스 버튼 클릭 ->보안, 자격 증명 및 규정 준수 -> IAM 클릭

2. 왼쪽에 사용자 버튼 클릭

3. 사용자 추가 버튼 클릭

4. 태그 추가(선택 사항) 이 나오는데 무시하고 다음:검토 클릭

5. [사용자 만들기] 클릭

사용자 생성을 완료했습니다. 마지막 페이지에 나오는 액세스 키는 다시는 확인할 방법이 없습니다.

위 쪽에 csv 다운로드 버튼을 클릭해 파일을 다운로드 해둡시다.

 

이제 파이참에서 소스를 수정해봅시다.

 

S3 연동하기

S3를 프로젝트에 연동하기 위해서는 모듈을 설치해야 한다.

boto3는 아마존 S3를 사용할 수 있도록 하는 모듈입니다.

 

$ pip install boto3

 

django-storages는 장고에서 다양한 저장소를 사용할 수 있게 해주는 모듈입니다.

 

$ pip install django-storages

 

설치한 모듈들을 이용하기 위한 정보를 settings.py 에 입력하겠습니다.

 

settings.py

INSTALLED_APPS = [
    'storages',
]

AWS_ACCESS_KEY_ID = 'user key' # .csv 파일에 있는 내용을 입력 Access key ID
AWS_SECRET_ACCESS_KEY = 'user secretkey' # .csv 파일에 있는 내용을 입력 Secret access key
AWS_REGION = 'ap-northeast-2'
AWS_STORAGE_BUCKET_NAME = 'd-stagram' # 설정한 이름
AWS_S3_CUSTOM_DOMAIN = '%s.s3.%s.amazonaws.com' % (AWS_STORAGE_BUCKET_NAME,AWS_REGION)
AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}

DEFAULT_FILE_STORAGE = 'config.asset_storage.MediaStorage' 
# 다음에 만들 MediaStorage라는 클래스를 통해 파일 저장소를 사용하겠다' 라는 의미

config 폴더에 asset_storage.py 라는 파일을 만들 후 다음 코드를 입력

from storages.backends.s3boto3 import S3Boto3Storage

class MediaStorage(S3Boto3Storage):
    location = 'media'
    file_overwrite = False

boto3 모듈을 사용해서 아마존 S3 이용할 수 있게 됐습니다. 이제 불 필요한 설정은 제거하겠습니다.

 

config/urls.py

from django.conf.urls.static import static
from django.conf import settings

 

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

 

제거 후 새로운 사진을 업로드해주면 잘 동작하는 걸 확인할 수 있고 업로드한 이미지는

S3 서비스 페이지에서도 확인할 수 있습니다.

 

 

댓글

💲 추천 글