[AWS] 05장. 스토리지 서비스 Amazon S3 - 그림으로 이해하는 AWS
05장. 스토리지 서비스 Amazon S3
💡 S3는 AWS가 제공하는 스토리지 서비스로, 단순한 스토리지 서비스는 아니다.
매우 견고하고 스마트한 시스템으로 파일 보존하는 것은 기본이고,
그 외에 다양한 편리한 기능도 갖추고 있다.
🎨 5.1 Amazon S3란
📌 5.1.1 Amazon S3란
Amazon S3(Amazon Simple Storage Service)는 스마트한 객체 스토리지 서비스이다.
여기서 객체 스토리지는 데이터를 객체 단위로 관리하는 형식을 말한다.
용량 제한이 없으므로
나중을 대비해서 넉넉하게 확보
할 필요 없이 최소한의 용량만으로 시작해도 된다.S3의 가장 큰 특징은 기능이 많다는 점이다.
대표적인 기능은웹 서버 기능과 쿼리 기능이다.
📌 5.1.2 견고하고 스마트한 스토리지 서비스
S3는 다양한 기능을 갖추고 있는 것뿐만 아니라 사용하기 쉽고 견고하다는 것도 특징이다.

📌 5.1.3 요금 체계
보유하고 있는 용량과 전송량일 기준으로 종량 과금된다.
S3 Standard 스토리지의 저장 용량에 대한 요금은 1GB당 0.025$ 정도이다.(2021. 03)

🎨 5.2 스토리지 클래스: 다양한 종류의 스토리지
📌 스토리지 클래스란
S3에는 사용할 수 있는 스토리지 종류가 다양하게 준비되어 있다.
스토리지의 종류를 스토리지 클래스라고 한다.
스토리지 클래스는 Standard 외에도 액세스 패턴, 빈도에 따라 목적에 맞춰 선택할 수 있다.
상황에 따라 변경할 수 있는 점이 큰 장점이다.
변경은 수동으로 해야하지만 수명 주기 정책을 설정하면 자동으로 수행하도록 하는것도 가능하다.
📌 5.2.2 스토리지 클래스의 종류
💎 Standard
가장 일반적인 스토리지 클래스이다.
3곳 이상의 AZ(가용 영역)에 데이터가 저장되어 있기 때문에 99.9%의 가용성
(시스템이 계속해서 가동하는 것)을 보장한다.데이터를 검색할 때의 요금과 최소 용량의 요금이 없고 일할로 계산되므로 쉽게 사용하기 좋다.
💎 Intelligent-Tiering
빈번한 액세스와 간헐적 액세스에 최적화된 두 가지 계층에 객체(파일)를 저장한다.
어느 쪽에 저장할지는 객체별로 모니터링하여 그 결과에 따라 자동으로 이동된다.
액세스 계층 간 이동에 대한 요금도 부과되지 않는다.
액세스 빈도가 자주 바뀌는 경우에 비용을 줄일 수 있다.
기본적으로는 Standard와 동일하지만 최소 저장 기간에 대한 요금이 설정되어 있으므로 주의가 필요하다.
💎 Infrequent Access
Standard 클래스에 비해 저장 요금이 낮게 설정되어 있는 대신 액세스 요금이 조금 높게 설정되어 있다.
따라서 액세스 빈도가 낮고 용량이 큰 데이터에 적합하다.
또한, 저장되는 AZ의 수가 다르다.
Standard의 경우 3군데지만 One Zone은 한 군데이다.
One Zone의 경우 해당 지역에 물리적인 문제가 발생하면 데이터를 유실할 가능성이 있다.
낮은 가격에 데이터를 보관할 수 있지만, 절대 유실되면 안되는 데이터를 보관하기엔 맞지 않다.
💎 Reduced Redundancy Storage
엄밀히 보면 스토리지 클래스가 아닌 옵션으로 분류되지만 한 종류밖에 없기 때문에 실질적으로 스토리지
클래스의 하나로 보는것이 좋다.Standard에 비해 이중화 수준을 낮춰서 낮은 가격으로 제공하고 있다.
저장되는 AZ가 한 군데이므로 문제가 발생할 경우 데이터 유실의 문제가 있다.
💎 S3 Glacier /S3 Glacier Deep Archive
Glacier 데이터 아카이브와 장기간 백업을 고려하여 만든 스토리지 클래스이다.
다른 클래스와 마찬가지로 99.999999%의 내구성을 가지고 있고 가격이 낮기 때문에 대용량 데이터를 저렴한 가격으로 보관할 수 있다.
데이터는 '볼트'라는 컨테이너에 저장된다.
따라서 저장된 데이터를 읽는 경우 다른 S3 버킷으로 옮겨야 하는 작업이 필요하다.
범위로 검색해서 일부 데이터만 검색할 수도 있지만, 기본적으로 통째로 검색한다.
검색할 경우 Glacier상의 데이터와 검색 대상의 데이터 양쪽에 요금이 부과된다.
🎨 5.3 S3의 사용 절차
📌 5.3.1 S3 조작
버킷의 생성 및 각종 설정과 같은 기본적인 S3 조작은 관리 콘솔의 S3 대시보드에서 수행한다.
일반적으로 파일을 업로드하려면 매번 관리 콘솔에서 로그인해야 하기 때문에 번거롭지만,
S3의 경우는 API와 SDK를 사용하여 업로드할 수 있어 편리하다.또한, AWS Transfer for SFTP가 제공되어서 SFTP(SSH로 암호화된 파일 전송 프로토콜)로 액세스할 수 있다.
💎 API와 SDK
API는 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있도록 만든 인터페이스로,
절차와 데이터 형식 등을 포함하고 있다.SDK는 소프트웨어 프레임워크, 하드웨어 플랫폼, 컴퓨터 시스템, 게임기, 운영체제 등을 위한 소프트웨어를
만들 때 필요한 도구를 모아 놓은 패키지이다.관리 콘솔에서 가능한 모든 조작은 API와 SDK를 사용하여 조작할 수 있다.
📌 5.3.4 S3 버킷 생성 전 검토해야 할 것
S3 버킷을 생성한 후에는 이름과 리전을 변경할 수 없다.
반드시 정해야 할 것은 어떤 용도로 사용할 것인가이다.
구체적으로 정하기 어려운 경우는 테스트용 버킷을 생성해 보고 확인한 후에 실제 사용할 스토리지를
생성하는 편이 좋다.
🎨 5.4 객체와 버킷: 파일과 파일을 저장하는 장소
📌 5.4.1 객체와 버킷이란
버킷은 윈도우의 드라이브(C나 D 드라이브라던지)와 같은 것이고, 객체는 파일과 같은 것이다.
버킷은 폴더가 아니므로 버킷 안에 버킷을 다시 만드는 것은 불가능하다.
버킷은 AWS 계정 하나당 100개까지 생성할 수 있다.
객체도 단순한 파일이 아니라 관리를 위한 메타데이터도 포함되어 있다.
버킷 한 개에 저장할 수 있는 객체 수는 제한이 없고 총 용량에도 제한이 없다.
S3는 객체 스토리지이기 때문에 폴더나 디렉터리와 같은 개념이 없다.
객체는 버킷의 계층 구조가 아닌 병렬로 배치된다.
개념으로는 병렬이지만 사용상 편의를 위해서 관리 콘솔에 접속하면 폴더로 표시된다.
📌 5.4.2 버킷 생성과 명명 규칙
버킷을 생성하려면 리전과 버킷명을 변경할 수 없기 때문에 신중하게 결정해야 한다.
특히 버킨명은 S3 안에서 유일한 이름이어야 한다.
리전을 변경에도 같은 버킷명으로 생성할 수 없기 때문에 생성한 버킷을 삭제하고 새롭게 생성해야 한다.

🎨 5.5 버킷 정책과 사용자 정책: 액세스 제한 설정
📌 5.5.1 S3 버킷에 대한 액세스 제한
S3 버킷에 대한 액세스 제한을 설정할 수 있다.
제안을 설정하는 방법은 세 가지다.
1. 버킷 단위로 제안하는 버킷정책
2. IAM 사용자 단위로 제안하는 사용자 정책
3. ACL(액세스 제어 목록)에 의한 관리 정책이다.버킷 정책은 해당 버킷에 접속할 수 있는 사용자를 지정한다.
반대로 사용자 정책은 접속 가능한 버킷을 지정한다.
대상 사용자가 많은 경우는 버킷을 지정하고, 버킷이 많은 경우는 사용자를 지정하는 편이 좋다.
📌 5.5.2 액세스 제한의 대상과 내용
액세스 제한은 '리소스, 작업, 효과, 보안 주체에 대해 설정'할 수 있다.
즉 '누가, 무엇을, 어떤 것에 대해 가능한가 여부''를 정하는 기능이다.
🎨 5.6 웹 사이트 호스팅: 웹 사이트 공개
📌 5.6.1 웹 사이트 호스팅이란
S3는 정적 웹사이트를 호스팅할 수 있다.
정적 웹사이트란 서버가 스크립트를 처리하지 않는 사이트를 말한다.
반대로 동적 웹사이트란 PHP, JSP, asp.net과 같이 서버에서 처리하는 언어가 포함된 사이트를 말한다.
정적 웹사이트를 호스팅하려면 버킷을 그대로 웹사이트로 오픈하면 된다.
url을 설정하고 버킷에 누구든지 접속할 수 있도록 하면 된다.
📌 다른 서비스로 구축한 웹 호스팅과의 차이
AWS EC2외에도 Amazon Lightsail, AWS amplify가 있다.
Amazon Lightsail은 EC2를 단순화한 서비스로, 한 가지 기능을 조합한 패키지로 제공된다.
AWS Amplify는 모바일 앱이나 웹 앱을 개발하기 위한 프레임워크이다.
이들의 큰 차이는 서버 프로그램의 실행 여부와 확장성이다.
EC2는 자유롭게 조합이 가능하지만 Lightsail도 구축하기에 따라서 EC2와 비슷한 수준으로 구축할 수 있다.
확장성은 S3가 가장 높으므로 프로그램을 쓰지 않는다면 S3가 좋다.
💎 Amazon Lightsail
EC2와 달리 CPU나 메모리와 같은 사양, 대수를 변경할 수 있는 유연성은 없다.
변경해야 할 때는 스냅샷이라고 하는 기능을 이용하여 백업하고, 변경하고 싶은 사양의 Lightsail을
새로 계약하여 백업에서 복원하는 작업을 수행한다.
💎 AWS Amplify
웹을 개발하기 위한 도구 전체를 제공하는 서비스로 개발자를 대상으로 한다.
Javascript로 AWS의 다양한 기능을 호출하여 시스템을 구축한다.
HTML 파일과 이미지를 S3를 통하여 배포하거나 Lambda라는 기능을 사용하여 백엔드 프로그램을 실핸한다.
🎨 5.7 파일 업로드와 다운로드
📌 업로드와 다운로드
파일을 업로드하거나 다운로드 하려면 관리 콘솔을 사용하는 방법과 CLI를 사용하는 방법이 있다.
도구 및 프로그램에서 작업하려면 API나 SDK를 사용해야 한다.
모든 파일 형식을 업로드 할 수 있지만, 업로드 할 수 있는 파일 크기는 제한이 있다.
관리 콘솔을 사용하는 경우에는 160GB까지 가능하다.
이보다 클 경우 CLI나 SDK를 사용해야 한다.
📌 다양한 업로드 방법
💎 API와 SDK
API와 SKD를 사용하면 서드 파티(third party) 도구를 사용해 파일을 업로드 할 수 있다.
IAM 사용자에게 액세스 키와 보안 액세스 키를 발행하여 사용하고 싶은 도구에 설정한다.
💎 멀티 파트 업로드
멀티파트 업로드를 사용하면 객체를 여러 개로 나누어 세트 하나로 업로드 할 수 있다.
업로드 중에는 부분별로 표시되지만 업로드가 완료되면 객체 하나가 된다.
업로드에 실패한 부분은 재전송 되지만 일시적으로 정지하는 것도 가능하다.
100MB 이상의 파일은 멀티파트 업로드를 사용할 것을 추천한다.
업로드할 때 일반적인 요청이나 업로드에 대한 요금이 발생하지만 멀티 파트 업로드를 사용할 때는
요금이 따로 발생하지 않는다.관리 콘솔, CLI는 큰 파일을 업로드 할 때 멀티 파트 업로드로 전환된다.
💎 AWS Transfer for SFTP
트랜스포머 SFTP는 SFTP를 사용하여 파일을 전송할 수 있는 서비스이다.
SFTP 도구가 아닌 SFTP 서버를 제공하는 서비스이다.
SFTP 서버 엔드포인트를 설정하면 서드 파티에 SFTP 도구를 사용할 수 있다.
초기 비용은 들지 않지만 SFTP 서버를 사용한 시간(활성화된 시간)과 데이터 전송량(업로드 및 다운로드)에 대해 과금된다.
💎 AWS DataSync
AWS DataSync는 온 프레미스 스토리지 시스템과 AWS 스토리지 서비스(EC2, S3)가네 대용량 데이터 전송을 위한 서비스이다.
그 외에 S3와 클라이언트를 연결하는 방법으로는 S3 버킷을 마치 온프레미스의 스토리지처럼 사용할 수 있는 하이브리드 클라우드 스토리지 서비스가 있다.
💎 대규모 데이터의 송수신
PB(페타바이트)나 EB(엑사바이트)단위처럼 대규모 데이터를 업로드 하는 것은 굉장히 어려운 일이다.
따라서 물리적으로 AWS와 데이터를 주고받는 방법으로 AWS Snowball(HDD의 데이터를 넣어서 보내는 방법), AWS Snowball Edge(데이터 가공 처리도 가능하다), AWS Snowmobile(트럭으로 발생하는 방법)이 있다.
💎 공용 엑세스 차단
'공용 액세스 차단'이라는 버킷 단위로 모든 사용자에게 액세스를 허가할지 결정하는 기능이 릴리스 되었다.
이것은 각 액세스 제한보다 상위에 있는 제한으로, 버킷 정책이나 사용자 정책이 모든 사용자에 대해서 액세스가 가능하도록 허가되어 있다 하더라도 공용 액세스가 '차단한다'라고 설정되어 있으면 액세스 할 수 없게 된다.
🎨 5.8 액세스 관리 및 변조 방지
📌 5.8.1 액세스 로그란
엑세스 로그란 서버에 어떤 요청이 있었는지를 기록하는 기능을 말한다.
로그에는 버킷 소유자, 버킷명, 요청자, 총 시간, 응답 시간, 작업, 응답 상태, 오류, 코드 등이 기록된다.
S3의 기능으로 액션 로그 기록을 제공하고 있지만 요금은 부과되지 않는다.
다만, 로그를 기록한 파일은 대상 버킷과 같은 리전에 버킷에 보관되므로 보관에 대한 요금은 발생한다.
📌 5.8.2 그 외에 액세스 관리 방법
💎 스토리지 클래스 분석
스토리지 클래스 분석은 객체 액세스 빈도를 분석하는 기능이다.
액세스 빈도가 낮은 데이터는 S3 Inteligent-Tiering으로 이동하는 판단 자료로 사용된다.
💎 객체 잠금
객체 잠금은 객체를 보호하는 기능이다.
객체에 대한 변경을 허용하지 않기 때문에 객체 삭제, 덮어쓰기, 변조 등을 방지할 수 있다.
잠금으로 보호되는 버킷은 Cross-Region Replication(CRR)으로 복사할 수 없다.
💎 S3 인벤토리
인벤토리는 버킷에 들어있는 객체의 메타데이터의 목록을 매일 혹은 매주 생성하는 기능이다.
CSV, ORC 등의 파일로 되어 있다.
Amazon Athena나 Amazon Redshift Spectrum 등의 빅데이터를 처리하는 도구와 조합하여 사용하면 편리하다.
#Women-in-Spring
#2024-11-완독-그림으로-이해하는-aws-구조와-기술