[TIL] 220425

Moon·2022년 4월 25일

AWS

Amazon Web Service
아마존에서 만든 가장 유명한 클라우드 서비스

예전에는 물리적인 서버들이 IDC센터에 들어가야 해서 비용이 많이 들고 복잡했다.
클라우드 서비스가 등장해 기존 서버 컴퓨터 시장을 대체하고 있는데 대표적인 클라우드 서비스가 AWS이다.

  • 클라우드 : 우리가 만든 서비스를 돌아갈 수 있게 해주는 것으로 웹사이트를 돌리는 데 필요한 도메인, 서버, db 등을 제공하며 '인프라'라고 불린다.

💡 여러 기업의 기술 블로그에 들어보면 AWS를 어떻게 활용하고 있는지 설명되어 있다.
AWS를 가장 잘 활용하는 기업 중 하나인 넷플릭스 : https://aws.amazon.com/ko/solutions/case-studies/netflix/

리전 = 대한민국 (나라)
존 = 영등포구, 도봉구...(그 안에서의 구역, 리전 안에 여러 개 있음)

S3

https://docs.aws.amazon.com/s3/?id=docs_gateway

  • Amazon Simple Storage Service (Amazon S3)
  • 파일을 저장하는 서비스

✅ 버킷 : 파일을 저장하는 단위 (저장소 단위) , S3에서 파일을 저장하는 폴더

클라우드가 없을 때는 이미지 파일을 디스크에 저장했다가 그 파일을 보여줬지만 aws에서는 파일을 업로드하면 생성되는 URL을 통해 보여준다.

IAM

Identityy and Access Management
https://docs.aws.amazon.com/iam/?id=docs_gateway

  • 모든 리소스에 관한 액세스 관리를 할 수 있음
  • AWS 내의 계정을 관리하는 서비스

S3의 사용할 수 있는 권한을 조절한다.

✅ IAM을 쓰는 이유?
-> IAM에는 무수히 많은 기능이 있는데 개발언어와 S3를 연동하는 기능이 있다.

  • SDK : AWS에서의 프로그래밍을 돕는 라이브러리 (AWS에서 공식 제공) , 개발과 연동해서 AWS 사용하게 해줌

업로드
cli로 파일 업로드하고 권한 주기
https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html

aws s3 cp {파일명} s3://{버킷이름} --acl public-read

Flask 프로젝트를 생성하고 app.py, index.html 파일을 만든다.

import boto3
from flask import Flask, render_template, request, jsonify

app = Flask(__name__)

@app.route('/')
def main():
    return render_template('index.html')

@app.route('/fileupload', methods=['POST'])
def file_upload():
    file = request.files['file']
    s3 = boto3.client('s3')
    s3.put_object(
        ACL="public-read",
        Bucket="{버킷이름}",
        Body=file,
        Key=file.filename,
        ContentType=file.content_type)
    return jsonify({'result': 'success'})

if __name__ == '__main__':
    app.run()
  • boto3 : 파이썬에서 s3랑 연동하려면 필요한 라이브러리 (aws와 연동해줌)

정적 웹사이트 호스팅 기능

생성된 엔드포인트를 눌러보면 403 Forbidden이 발생한다. 내 버킷의 객체에 index.hmtl이 없기 때문이다. index.html을 업로드 해준 후 다시 엔드포인트에 들어가보면 정상적으로 나오는 것을 확인할 수 있다.

정적 호스팅 기능을 이용하면 정적 페이지를 이용해 웹 서버 없이 웹 사이트 만들기가 가능하다.


Monolithic -> MSA

백엔드와 프론트엔드의 구분

  • Monolithic : 프론트엔드와 백엔드가 물리적으로 한 곳에 위치해 있다. 서버 하나에 넣고 소스도 하나의 Repository에 넣는다.
  • MSA : 프론트엔드는 S3, 백엔드는 EC2에 배치되는 것처럼 아예 물리적으로 다른 곳에 배치된다.

MSA로 변화하는 이유는?
처음에는 빨리 개발하기 위해 한 곳에 다 넣고 monolithic으로 했으나 배포를 하다보니 A부분을 고쳤는데 B부분이 영향을 받아 에러가 나는 문제가 발생했다.

물리적인 서버를 떨어지게 하고 소스도 따로 관리해서 의존성을 줄여나감

CloudFront

CloudFront distritbution을 사용해서 edge location들로 배포된다. 만약 미국에서 www.example.com이라는 사이트를 오픈했다면 html로 미국에서 접속한다. Cloud Front를 사용하면 S3 버킷은 서울에 있지만 S3에 정적 파일을 올리는 순간 edge location에 캐싱이 된다. AWS는 region이 많기 때문에 이런 방식이 가능하다.

❗CloudFront로 접속하면 S3네트워크에 접속하는 과금이 없다.

https://docs.aws.amazon.com/cloudfront/?id=docs_gateway

cloud > 배포 > ID > 설정 > 편집 > 기본값 루트 객체 설정

  • 기본값 루트 객체 : ClodFront url을 브라우저에서 봤을 때 호출되는 파일

설정해주고나면 서울 region 어딘가에서 캐싱을 한 index.html 파일이 호출된다.이전과 url은 다르지만 같은 화면이 나오는데 cloudFront로 접근했기 때문이다.

profile
매일 성장하는 개발자 되기😊

0개의 댓글