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 버킷에 대한 액세스 제한을 설정할 수 있다.
- 제안을 설정하는 방법은 세 가지다.
- 버킷 단위로 제안하는 버킷정책
- IAM 사용자 단위로 제안하는 사용자 정책
- 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-구조와-기술