AWS S3

IP

  • LAN과 WAN

    • LAN = Local
    • WAN = Wide
    • LAN이 여러개 묶여서 WAN이 된다.
    • WAN이 여러개 묶여서 더 큰 WAN이 된다.
    • 인터넷도 WAN에 한 일종
  • 일반적으로 Server는 데이터를 내어주는 쪽이고 client는 데이터를 받는 쪽이다.

  • DNS

    • Domain Name Service

      1
      IP <--DNS--> Domain
    • DNS는 하나만 두지 않는다.

    • 서버의 이상 발생으로 인해 여러개를 둔다.(1, 2, 3, 4차 등등)
      1
      2
      3
      4
      5
      네이버에 접속하는 과정
      1. naver.com 주소를 입력하게 되면
      2. hosts 파일을 검색하게 되고
      3. DNS 검색을 한 뒤,
      4. naver.com에 접속하게 된다.
  • 도메인 구성

    1
    2
    3
    4
    5
    6
    ex) https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query=%EC%98%81%ED%99%94

    https - 스키마, 프로토콜
    search.naver.com - 도메인
    /search.naver - Path
    ?sm=top_hty&fbm=1&ie=utf8&query=%EC%98%81%ED%99%94 - Query String
  • http와 https

    • http
      • Hypertext(문서끼리 링크로 연결되어 있는 것) Transfer Protocol
    • https
      • 공개키 암호화
        • 공개키 = 암호화
        • 개인키 = 복호화
        • 웹 브라우저가 공개키를 받아서 암호화를 한다.
      • 회원가입, 결제 등 정보 입력은 모두 https

server와 client

  • 데이터 처리 과정

    1
    2
    3
    CDN --- LB --- EC2 --- DB
    |
    --- S3
    • CDN
      • 사용자와 가까운 위치에서 요청에 응답
      • cache 개념
    • LB(Load Balancer)
      • 여러대의 서버가 적절히 분산 처리할 수 있도록 해결해주는 서비스
      • 분산 처리하기 이전에 인증서(https)를 설치
      • EC2와는 http로 통신
    • EC2
      • server
      • web server cache
    • DB
      • Database
      • DB cache
      • 확장 방법
        • Master와 Slave
        • Sharding(샤딩)
    • S3
      • 파일을 저장하기 위한 스토리지
      • 이미지와 같은 파일 저장
  • 서버의 동시접속자가 늘어날 경우

    • Upscaling
      • 서버 컴퓨터의 샤양을 높이는 것
      • 서버를 사용하고 있는 입장에서는 하기 힘들다.
      • 처음 서버 컴퓨터를 만들 때 사용하는 방법
    • Outscaling
      • 서버 컴퓨터의 수를 늘리는 것
      • 서버를 사용하고 있는 입장에서 사용하는 방법
  • 멀티 리전

    • 물리적 거리가 존재하기 때문에 다른 나라 간에는 속도가 느리다.
    • 따라서 해당 위치에 서버를 따로 구축

AWS Amazon S3 사용하기

  • dstagram의 이미지 파일을 로컬이 아닌 클라우드 스토리지에 저장하기 위해 사용

    1. AWS Amazon에 가입한다.
    2. AWS - IAM에서 사용자를 추가한다.
      • ‘AmazonS3FullAccess’ 권한을 추가한다.
      • Access key와 Secret key를 확인한다.
        • 해당 페이지를 끄면 다시 볼 수 없으므로 csv로 저장해둔다.
    3. AWS- S3에서 버킷을 만든다.
      • 버킷 이름을 작성하고, 리전은 ‘아시아 태평양(서울)’을 선택한다.
      • 권한 설정에서 퍼블릭 ACL 관리 체크 항목을 모두 해제한다.
    4. dstagra_project에서 다음 모듈을 설치한다.

      1
      2
      3
      4
      5
      # boto3 : Amazon S3를 사용할 수 있게 하는 모듈
      $ pip install boto3

      # 장고 프로젝트에서 특정 storage를 사용하게 하는 모듈
      $ pip install django-storages
    5. dstagram_project에서 settings.py를 수정한다.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      # dstagram_project
      # settings.py

      # 'storages' 추가
      INSTALLED_APPS = [
      'django.contrib.admin',
      'django.contrib.auth',
      'django.contrib.contenttypes',
      'django.contrib.sessions',
      'django.contrib.messages',
      'django.contrib.staticfiles',
      'accounts',
      'photo',
      'disqus',
      'django.contrib.sites',
      'storages',
      ]

      AWS_ACCESS_KEY_ID = 'Amazon User Access Key ID 값'
      AWS_SECRET_ACCESS_KEY = 'Amazon User Secret Key 값'
      AWS_REGION = 'ap-northeast-2'
      AWS_STORAGE_BUCKET_NAME = 'S3에서 만든 버킷 이름'
      AWS_S3_CUSTOM_DOMAIN = '%s.s3.%s.amazonaws.com' % (AWS_STORAGE_BUCKET_NAME,AWS_REGION)
      AWS_S3_OBJECT_PARAMETERS = {
      'CacheControl': 'max-age=86400',
      }
      AWS_DEFAULT_ACL = 'public-read'
      AWS_LOCATION = 'static'

      STATIC_URL = 'http://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
      STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

      # STATIC_URL = '/static/'
      # STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    6. 다음 명렁어를 통해 Amazon S3에 static 관련 파일을 옮긴다.

      1
      2
      $ python manage.py collectstatic
      # 명령어 입력 후, yes를 한번 더 입력한다.
    7. Amazon S3의 해당 버킷에 static 파일이 옮겨졌는지 확인한다.

    8. 서버를 실행하고 웹페이지에 static 관련 이미지가 정상적으로 출력되는지 확인한다.
Share