장고 이미지 외부사이트 연동

Sam (토론 | 기여)님의 2023년 2월 6일 (월) 17:39 판 (새 문서: =외부서비스 연결[어째서인지, 나는 잘 안된다;;]= 많은 사용자를 감당하려면 웹 서버를 늘려야 하는데, 이미지를 관리하는 가장 간단한...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

1 외부서비스 연결[어째서인지, 나는 잘 안된다;;]편집

많은 사용자를 감당하려면 웹 서버를 늘려야 하는데, 이미지를 관리하는 가장 간단한 방법은 별도의 서버를 두고 모두가 같은 이미지서버를 사용하게 하는 것이다.

1.1 AWS 연동편집

아마존에서 지원하는 서버이다. 여기에 가입하자. https://aws.amazon.com

서비스는 스토리지의 S3를 이용할 것이다. 버킷단위로 서비스를 제공한다. 버킷을 만들어보자.(필자는 question-pool이라고 정했다.)

만들 때 ACL관련 체크는 다 풀어주자.(허용)

1.1.1 권한설정 및 사전작업편집

  1. 서비스>보안,자격증명 및 규정준수>IAM 에서 사용자>사용자 추가에서 사용자이름을 입력하고 프로그래밍 방식 엑세스에 체크한다.(API로 데이터를 주고받을 것이기에.)
  2. 그룹명을 기입하고 필터에 S3를 넣으면 나오는 AmazonS3FullAccess를 체크하고 생성한다. 이후 API키가 나올 때까지 알아서 마무리.
  3. 생성하면 나오는 페이지에 엑세스 키가 나오는데, 이 페이지를 벗어나면 다시 확인할 방법이 없다. csv다운로드로 다운로드 해둔다.

1.1.2 장고에 연결편집

  • pip install boto3(S3을 다루는 모듈)을 설치한다.
  • pip install django-storages(다양한 저장소를 사용하게 해주는 모듈)설치.
  • settings.py 안의 INSTALLED_APPS 항목에 'storages'를 추가한다.
  • 이후 적당한 곳에 아래의 코드 추가.
AWS_ACCESS_KEY_ID='유저키' #받은 유저키를 넣는다.
AWS_SECRET_ACCESS_KEY='유저비밀키' #받은 비밀키를 넣는다.
AWS_REGION='ap-northeast-2' #아마존에서 서울을 가리키는 코드. 커스텀도메인에 넣기 위한 변수.
AWS_STORAGE_BUCKET_NAME='question-pool' #아마존에서 만든 버킷명. 커스텀도메인에 넣기 위한 변수.
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클래스로 파일저장소를 다루겠다.
#기본 미디어 위치를 지정해주기 위해 따로 지정한다.

1.1.2.1 asset_storage.py 작성편집

config(장고기초폴더) 아래에 위 이름으로 파일을 작성하고 다음과 같이 기입한다.

from storages.backends.s3boto3 import S3Boto3Storage

class MediaStorage(S3Boto3Storage):
    location='media' #기존의 디렉터리를 지정한다.
    file_overwrite=False