Server/Django issue

[Django] AWS S3 연동

개발자킹콩 2022. 9. 14. 00:12

우선 AWS S3를 장고에서 사용하기 위한 기본 셋팅을 포스팅 해두었다.

https://yeongwoo-cho.tistory.com/309

 

[AWS] S3(Simple Storage Service)

일반적으로 API 서버에서 이미지 서버를 따로 두고 사용하며, 대표적으로 AWS S3 Service를 사용한다. AWS S3를 이미지 서버로 구축하고 연동하는 방법에 대해 알아보자. AWS S3의 단위: Burket 미디어, 정

yeongwoo-cho.tistory.com

 

 


 

 

Django Setting

 

django에서 S3를 연동 시키기 위해서는 두가지 라이브러리가 필요하다.

django-storages를 통해 boto3를 사용한다.

이렇게 설치된 라이브러리를 django에서 사용하기 위해 settings.py에 추가해야 한다.

 

 

Settings.py

 

그럼 이제 설치된 라이브러리를 이용해 S3와 연결 시키기 위해 settings.py를 설정해봅시다!

 

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

# media file (as a upload file)
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'
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 # value in bytes 1GB here
FILE_UPLOAD_MAX_MEMORY_SIZE = 1024000000

DEFAULT_FILE_STORAGE = '프로젝트명.storages.S3DefaultStorage'
STATICFILES_STORAGE = '프로젝트명.storages.S3StaticStorage'

 

 

 

 

 

 

Django 정적 파일 관련 설정

 

 

static & media files

Django에서 처리하는 데이터의 종류는 두 가지가 존재한다. 바로 정적파일과 동적 파일이다.

정적파일: 준비해둔 파일을 보여주는 static 파일

동적파일: 외부에서 사용자가 업로드 하는 media파일 (media파일이란 프로젝트에 업로드 되는 파일을 말한다.)

 

즉, media파일(동적파일)을 다루기 위해서는 세팅 해줄 것이 있다.

1. 업로드될 파일을 저장할 디렉토리 경로 지정해주기

2. url 지정

 

config > asset_storage.py

작업하고 있는 django project 폴더 config 폴더 안에 asset_storage.py 파일을 만든다.

config/asset_storage.py
models.py

public media file과 private media file을 각 다른 방법으로 관리하도록 구현되어 있다.

각자의 모델에 맞게 views.py 파일을 설정하면 끝이다.

 

 

 

 

 

 

 

 

 

 

 

 

이 후 storages 패키지 용 파일을 하나 만들어 준다.

$ vi storages.py

from storages.backends.s3boto3 import S3Boto3Storage

__all__ = (
    'S3StaticStorage',
    'S3DefaultStorage',
)

# for media
class S3DefaultStorage(S3Boto3Storage):
    default_acl = 'private'
    location = 'media'
    
# for static
class S3StaticStorage(S3Boto3Storage):
    default_acl = 'public-read'
    location = 'static'

 

마지막으로 nginx, wsgi 연동까지 해두었다면 nginx 설정도 해주어야 한다.

지난번글을 그대로 이어서 설명하자면, 

server {
	...
    
	client_max_body_size 128M;
        charset UTF-8;
        
        ...

        location /static/ {
             alias https://버킷명.s3.northeast.amazonaws.com/static/;
        }

        location /media/ {
             alias https://버킷명.s3.northeast.amazonaws.com/media/;
        }

위와 같이, 업로드 허용 용량을 설정해주고, 기존에 설정해두었던 static과 media 경로를 s3 경로로 바꾸어 주면 된다.

해당 버킷 내에 media나 static 폴더가 없어도 데이터가 들어가는 순간 만들어 지므로 걱정할 필요 없다.

 

 

 

마지막으로 기존 django 서버에 urls.py에 static 용 설정을 해주었다면 해제 시켜 준다.

이후 collectstatics 명령어를 실행시켜서 s3에 static과 media 파일을 저장한다.

 

 

 

 


 

 

 


 

Reference

 

https://kdharchive.tistory.com/830

 

[django] AWS S3와 연동하기

기본적으로 AWS S3 bucket을 만들어 두었다고 가정하고 진행한다. AWS S3 Simple Storage Service로, 미디어, 정적 파일을 공유할 수 있는 서비스이다. 적용하기 1. django 설정하기 django에서 S3를 연동시키기..

kdharchive.tistory.com

https://zladnrms.tistory.com/85

 

[Django] AWS S3와 연동하기

Django, AWS S3와 연동하기 AWS에 입장하여, 서비스 -> S3를 눌러 S3 Manage Console에 진입한다. 1. 버킷 만들기를 클릭 2. 버킷 이름을 적어주고 '다음' 3. 옵션 구성 페이지. 현재는 필요 없다. 바로 '다음'..

zladnrms.tistory.com

https://velog.io/@hwang-eunji/aws-s3-미디어-서버-설정-django-설정

 

aws s3 미디어 서버 설정 & django 설정

미디어, 정적파일을 공유할 수 있도록 아마존 S3(simple storage service)를 설정해봅시다~! s3는 버킷이란 단위를 사용한다! (RDS=인스턴스)aws 서비스 선택에서 s3를 찾아 클릭하면 버킷만들기 버튼을 찾

velog.io

https://richone.tistory.com/7

 

[Django] AWS S3 Storage Connect(장고 S3 연결 이미지 업로드)

API 서버에서 이미지 서버를 따로 두고 싶어서 생각을 하던 중에 AWS S3 클라우드 스토리지를 이미지 서버로 구축하고 연동하여 사용하는 방법에 대하여 심플하게 적어 보도록 하겠다 환경 서버 

richone.tistory.com

 

 

 

 

 

 

 

 

 

 

 

 

'Server > Django issue' 카테고리의 다른 글

[Django] TextChoices  (0) 2022.11.24
[Django] 인증 인가 참고자료  (0) 2022.08.08
[Django] Custom User  (0) 2022.08.05
[Django] MySQL 테이블 전체 삭제  (0) 2022.08.05
[Django] User model 확장  (0) 2022.08.04