예전에 홈페이지를 구축한다 하면, 외부와 통신이 되기 위해 IDC 센터에 일반 서버를 넣어야 했다.(도메인으로 연결되게)
AWS를 잘 활용하려면?
Neflix는 개발자에게는 세계에서 AWS가장 잘 쓰는 리딩 회사로 유명하다.
https://aws.amazon.com/ko/solutions/case-studies/netflix/
위 링크를 통해 넷플릭스의 use case나 어떻게 AWS를 구축하고 이사했는지 알아보자.
AWS는 여러 나라에 데이터 센터(AWS IDC center)를 갖고 있다.
IDC(데이터 센터)가 있는 나라를 리전이라고 하고, 리전 내의 IDC 위치를 존(AZ)이라고 한다.
예)서울에 데이터 센터가 영등포, 강남, 도봉에 위치하고 있으면 서울리전에 영등포 존, 강남 존, 도봉 존.
(하나의 리전안에 두개 이상의 존을 만들어야 하는 이유는 한 존이 화재나 사고로 서버에 접속이 안되는 상황을 방지해야 하기 떄문이다!)
AWS 의 모든 제품들은 기본적으로 어떤 리전과 존에 배치할지를 먼저 결정해야합니다. 그러면 서울에 있는 사람은 서울쪽 IDC센터에 접속을 하게 하고, 미국에 있는 사람은 또 미국에 있는...-> 그래야 속도가 빨라져서 글로벌 서비스가 가능해진다.
❓그럼 우리나라에서 넷플을 이용하면 어디 IDC를 이용할까? 유튜브 라인처럼 일본거? -> 서울리전 있네!
AWS는 과금체계가 있다. 돈이 10원이라도 나가는게 싫다면 수업 들을 때만 사용하고 아니면 바로 지워주기
S3 검색 후 S3를 누르면 버킷 이 나온다
버킷: 내가 파일을 저장하는 장소를 폴더링(나눠놓기)을 해놓는 것, 파일을 저장하는 저장소 단위
-1,2,3번 버킷을 만들어 놓고 1번에는 이미지 파일, 2번에는 동영상 파일 이렇게 생각하자.
버킷 만들기
- 태그기능은 버킷이 많아지면 그룹에 따라 찾아야 할 필요가 있어지니까.
ACL -권한 설정 기능
IAM: Identity and Access Management(IAM)
-다른회사 레퍼런스 찾아보기
-IAM 입장에선 S3도 리소스가 될 수 있다 : S3를 사용할 수 있는 권한을 조절하는 서비스다. 라고 해석
-그럼 권한을 왜 조절해야 하는걸까?
-우리가 지금 IAM의 많은 기능 중, IAM을 사용해서 S3랑 프로그램을 연결 할 예정인데 이 중에서도 파이썬이랑 S3를 연동할 예정.
-나는 커리큘럼 상 프로그래밍 방식에 액세스 할거라 액세스 키는 프로그래밍 방식 액세스로!
SDK: Software Development Kit
SDK 설치 후 잘 설치되었나 확인-> 터미널에서 aws --version 엔터-> 이 SDK는 aws-cli 라는 SDK라는 걸 확인
파이썬이랑 연동하기 전에 커맨드라인을 통해 AWS SDK를 이용하여 S3를 업로드
aws configure 명령어를 통해서 액세스 키 id, 시크릿 키를 입력하고, 리전 네임:ap-northeast-2, output format: json 입력한다. 그리고 아무 반응이 없으면 잘 된거!
CLI 환경에서 S3로 파일 업로드하기.
upload: ./{파일명} to s3://{버킷이름}/{파일명} 이라고 뜨면 잘 업로드 된 것!
->그리고 다시 속성으로 가서 객제 url 복사해서 새창에 붙여넣기 했을 때 이미지 잘 보이면 끝!
파이참을 켜서 New Projeck -> Flask 를 하나 만들어준다.
여기서 app.py 코드스니펫을 복사하면, boto3이라는게 나오는데 이게 뭘까?
아까 우리는 CLI로 S3 연동할 때 SDK를 다운로드 받아서 설정을 했었다. 파이썬에서 S3랑 연동하려면 필요한게 boto3라는 라이브러리이다.(AWS와 연동하게 해주는 라이브러리)
boto3은 AWS랑 연동하려면 파이썬에서는 보통 boto3을 쓴다.
pip 명령어로 boto3를 install 할 수 있다.(2,3주 차 때는 커맨드라인 리눅스에서 커맨드라인 작업도 해야한다)
파이참에서 밑에 보면, Terminal 이라는 부분이 있다.
거기에 가서 pip install boto3 엔터!
import boto3에서 빨간전구 사라지면 잘 설치 된 것.
Run 하고 밑에 주소로 들어가면, index.html이 뜬다! 그 사이트의 목적은 파일을 파이썬을 이용해 S3에 업로드 하는것.
@app.route('/fileupload', methods=['POST'])
def file_upload():
file = request.files['file']
# S3와 연동을 한다라는 뜻
s3 = boto3.client('s3')
# boto3안에있는 put_object라는 함수로, 이 api에서 파이썬과 연동되어 파이썬에서 파일들을 S3에 업로드 할 수 있다
s3.put_object(
# 파일을 업로드 하는 내용
ACL="public-read",
Bucket="0000sparta",
Body=file,
Key=file.filename,
ContentType=file.content_type)
return jsonify({'result': 'success'})
alert으로 저장완료라고 떠도 꼭 S3에 가서 확인할 것들!
S3의 여러 기능들!
S3의 정적 호스팅 기능을 이용하면 업로드만 하면 웹사이트 뚝딱뚝딱 만들 수 있다.