🐾
개발자국
  • 🐶ABOUT
  • 🚲프로그래밍
    • 객체 지향 프로그래밍
    • 오브젝트
      • 1장: 객체, 설계
      • 2장: 객체지향 프로그래밍
      • 3장: 역할, 책임, 협력
      • 4장: 설계 품질과 트레이드오프
      • 5장: 책임 할당하기
      • 6장: 메시지와 인터페이스
      • 7장: 객체 분해
      • 8장: 의존성 관리하기
      • 9장: 유연한 설계
      • 10장: 상속과 코드 재사용
      • 11장: 합성과 유연한 설계
      • 12장: 다형성
      • 13장: 서브클래싱과 서브타이핑
      • 14장: 일관성 있는 협력
      • 15장: 디자인 패턴과 프레임워크
    • 도메인 주도 개발 시작하기
      • 1장: 도메인 모델 시작하기
      • 2장: 아키텍처 개요
      • 3장: 애그리거트
      • 4장: 리포지토리와 모델 구현
      • 5장: 스프링 데이터 JPA를 이용한 조회 기능
      • 6장: 응용 서비스와 표현 영역
      • 7장: 도메인 서비스
      • 8장: 애그리거트 트랜잭션 관리
      • 9장: 도메인 모델과 바운디드 컨텍스트
      • 10장: 이벤트
      • 11장: CQRS
    • 클린 아키텍처
      • 만들면서 배우는 클린 아키텍처
        • 계층형 아키텍처의 문제와 의존성 역전
        • 유스케이스
        • 웹 어댑터
        • 영속성 어댑터
        • 아키텍처 요소 테스트
        • 경계 간 매핑 전략
        • 애플리케이션 조립
        • 아키텍처 경계 강제하기
        • 지름길 사용하기
        • 아키텍처 스타일 결정하기
    • 디자인 패턴
      • 생성(Creational) 패턴
        • 팩토리 패턴
        • 싱글톤 패턴
        • 빌더 패턴
        • 프로토타입 패턴
      • 행동(Behavioral) 패턴
        • 전략 패턴
        • 옵저버 패턴
        • 커맨드 패턴
        • 템플릿 메서드 패턴
        • 반복자 패턴
        • 상태 패턴
        • 책임 연쇄 패턴
        • 인터프리터 패턴
        • 중재자 패턴
        • 메멘토 패턴
        • 비지터 패턴
      • 구조(Structural) 패턴
        • 데코레이터 패턴
        • 어댑터 패턴
        • 퍼사드 패턴
        • 컴포지트 패턴
        • 프록시 패턴
        • 브리지 패턴
        • 플라이웨이트 패턴
      • 복합 패턴
  • 시스템 설계
    • 1. 사용자 수에 따른 규모 확장성
    • 2. 개략적 규모 추정
    • 3. 시스템 설계 접근법
    • 4. 처리율 제한 장치
    • 5. 안정 해시
    • 6. 키-값 저장소
    • 7. 유일한 ID 생성기
    • 8. URL 단축기
    • 9. 웹 크롤러
    • 10. 알림 시스템
    • 11. 뉴스 피드
    • 12. 채팅 시스템
    • 13. 검색어 자동완성
    • 14. 유튜브 스트리밍
    • 15. 구글 드라이브
    • ⭐️. 캐싱 전략
    • ⭐️. 재고 시스템으로 알아보는 동시성이슈 해결방법
    • ⭐️. 실습으로 배우는 선착순 이벤트 시스템
  • 🏝️자바
    • 자바의 내부 속으로
      • Java 언어의 특징
      • JDK
      • JVM
        • 메모리 관리
        • Garbage Collector
          • 기본 동작
          • Heap 영역을 제외한 GC 처리 영역
          • (WIP) GC 알고리즘
        • 클래스 로더
      • 자바 실행 방식
      • 메모리 모델과 관리
      • 바이트 코드 조작
      • 리플렉션
      • 다이나믹 프록시
      • 어노테이션 프로세서
    • 자바의 기본
      • 데이터 타입, 변수, 배열
    • 이펙티브 자바
      • 2장: 객체의 생성과 파괴
        • item 1) 생성자 대신 정적 팩토리 메서드를 고려하라
        • item2) 생성자에 매개변수가 많다면 빌더를 고려하라
        • item3) private 생성자나 열거 타입으로 싱글톤임을 보증하라
        • item4) 인스턴스화를 막으려면 private 생성자를 사용
        • item5) 자원을 직접 명시하는 대신 의존 객체 주입 사용
        • item6) 불필요한 객체 생성 지양
        • item7) 다 쓴 객체는 참조 해제하라
        • item8) finalizer와 cleaner 사용 자제
        • item9) try-with-resources를 사용하자
      • 3장: 모든 객체의 공통 메서드
        • item 10) equals는 일반 규약을 지켜 재정의 하자
        • item 11) equals 재정의 시 hashCode도 재정의하라
        • item 12) 항상 toString을 재정의할 것
        • item 13) clone 재정의는 주의해서 진행하라
        • item 14) Comparable 구현을 고려하라
      • 4장: 클래스와 인터페이스
        • item 15) 클래스와 멤버의 접근 권한을 최소화하라
        • item 16) public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라
        • item 17) 변경 가능성을 최소화하라
        • item 18) 상속보다는 컴포지션을 사용하라
        • item 19) 상속을 고려해 설계하고 문서화하고, 그러지 않았다면 상속을 금지하라
        • item 20) 추상 클래스보다는 인터페이스를 우선하라
        • item 21) 인터페이스는 구현하는 쪽을 생각해 설계하라
        • item 22) 인터페이스는 타입을 정의하는 용도로만 사용하라
        • item 23) 태그 달린 클래스보다는 클래스 계층구조를 활용하라
        • item 24) 멤버 클래스는 되도록 static으로 만들라
        • item 25) 톱레벨 클래스는 한 파일에 하나만 담으라
      • 5장: 제네릭
        • item 26) 로 타입은 사용하지 말 것
        • item 27) unchecked 경고를 제거하라
        • item 28) 배열보다 리스트를 사용하라
        • item 29) 이왕이면 제네릭 타입으로 만들라
        • item 30) 이왕이면 제네릭 메서드로 만들라
        • item 31) 한정적 와일드카드를 사용해 API 유연성을 높이라
        • item 32) 제네릭과 가변 인수를 함께 사용
        • item 33) 타입 안전 이종 컨테이너를 고려하라
      • 6장: 열거 타입과 어노테이션
        • item 34) int 상수 대신 열거 타입을 사용하라
        • item 35) ordinal 메서드 대신 인스턴스 필드를 사용하라
        • item 36) 비트 필드 대신 EnumSet을 사용하라
        • item 37) ordinal 인덱싱 대신 EnumMap을 사용하라
        • item 38) 확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라
        • item 39) 명명 패턴보다 어노테이션을 사용하라
        • item 40) @Override 어노테이션을 일관되게 사용하라
        • item 41) 정의하려는 것이 타입이라면 마커 인터페이스를 사용하라
      • 7장: 람다와 스트림
        • item 42) 익명 클래스보다는 람다를 사용하라
        • item 43) 람다보다는 메서드 참조를 사용하라
        • item 44) 표준 함수형 인터페이스를 사용하라
        • item 45) 스트림은 주의해서 사용하라
        • item 46) 스트림에서는 부작용 없는 함수를 사용하라
        • item 47) 반환 타입으로는 스트림보다 컬렉션이 낫다
        • item 48) 스트림 병렬화는 주의해서 적용하라
      • 8장: 메서드
        • item 49) 매개변수가 유효한지 검사하라
        • item 50) 적시에 방어적 복사본을 만들라
        • item 51) 메서드 시그니처를 신중히 설계하라
        • item 52) 다중정의는 신중히 사용하라
        • item 53) 가변인수는 신중히 사용하라
        • item 54) null이 아닌, 빈 컬렉션이나 배열을 반환하라
        • item 55) 옵셔널 반환은 신중히 하라
        • item 56) 공개된 API 요소에는 항상 문서화 주석을 작성하라
      • 9장: 일반적인 프로그래밍 원칙
        • item 57) 지역 변수의 범위를 최소화하라
        • item 58) 전통적인 for문보다 for-each문을 사용하기
        • item 59) 라이브러리를 익히고 사용하라
        • item 60) 정확한 답이 필요하다면 float, double은 피하라
        • item 61) 박싱된 기본타입보단 기본 타입을 사용하라
        • item 62) 다른 타입이 적절하다면 문자열 사용을 피하라
        • item 63) 문자열 연결은 느리니 주의하라
        • item 64) 객체는 인터페이스를 사용해 참조하라
        • item 65) 리플렉션보단 인터페이스를 사용
        • item 66) 네이티브 메서드는 신중히 사용하라
        • item 67) 최적화는 신중히 하라
        • item 68) 일반적으로 통용되는 명명 규칙을 따르라
      • 10장: 예외
        • item 69) 예외는 진짜 예외 상황에만 사용하라
        • item 70) 복구할 수 있는 상황에서는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라
        • item 71) 필요 없는 검사 예외 사용은 피하라
        • item 72) 표준 예외를 사용하라
        • item 73) 추상화 수준에 맞는 예외를 던지라
        • item 74) 메서드가 던지는 모든 예외를 문서화하라
        • item 75) 예외의 상세 메시지에 실패 관련 정보를 담으라
        • item 76) 가능한 한 실패 원자적으로 만들라
        • item 77) 예외를 무시하지 말라
      • 11장: 동시성
        • item 78) 공유 중인 가변 데이터는 동기화해 사용하라
        • item 79) 과도한 동기화는 피하라
        • item 80) 스레드보다는 실행자, 태스크, 스트림을 애용하라
        • item 81) wait와 notify보다는 동시성 유틸리티를 애용하라
        • item 82) 스레드 안전성 수준을 문서화하라
        • item 83) 지연 초기화는 신중히 사용하라
        • item 84) 프로그램의 동작을 스레드 스케줄러에 기대지 말라
      • 12장: 직렬화
        • item 85) 자바 직렬화의 대안을 찾으라
        • item 86) Serializable을 구현할지는 신중히 결정하라
        • item 87) 커스텀 직렬화 형태를 고려해보라
        • item 88) readObject 메서드는 방어적으로 작성하라
        • item 89) 인스턴스 수를 통제해야 한다면 readResolve보다는 열거 타입을 사용하라
        • item 90) 직렬화된 인스턴스 대신 직렬화 프록시 사용을 검토하라
    • 모던 자바 인 액션
      • 1장: 자바의 역사
      • 2장: 동작 파라미터화
      • 3장: 람다
      • 4장: 스트림
      • 5장: 스트림 활용
      • 6장: 스트림으로 데이터 수집
      • 7장: 병렬 데이터 처리와 성능
      • 8장: 컬렉션 API 개선
      • 9장: 람다를 이용한 리팩토링, 테스팅, 디버깅
      • 10장: 람다를 이용한 DSL
      • 11장: null 대신 Optional
      • 12장: 날짜와 시간 API
      • 13장: 디폴트 메서드
      • 14장: 자바 모듈 시스템
      • 15장: CompletableFuture와 Reactive 개요
      • 16장: CompletableFuture
      • 17장: 리액티브 프로그래밍
      • 18장: 함수형 프로그래밍
      • 19장: 함수형 프로그래밍 기법
      • 20장: 스칼라 언어 살펴보기
    • 자바의 이모저모
      • Javax
      • Objects
      • NIO
      • Thread
      • Concurrent
        • Atomic
        • Executor, ExecutorService
        • Interrupt
      • Assertions
    • Netty
      • 네티 맛보기
      • 네티의 주요 특징
      • 채널 파이프라인
      • 이벤트 루프
      • 바이트 버퍼
      • 부트스트랩
      • 네티 테스트
      • 코덱
      • 다양한 ChannelHandler와 코덱
      • 웹소켓
      • UDP 브로드캐스팅
    • 자바 병렬 프로그래밍
      • 2장: 스레드 안전성
      • 15장: 단일 연산 변수와 논블로킹 동기화
  • 🏖️코틀린
    • 코틀린 인 액션
      • 코틀린 언어의 특징
      • 코틀린 기초
      • 함수 정의와 호출
      • 클래스, 객체, 인터페이스
      • 람다
      • 타입 시스템
      • 연산자 오버로딩과 기타 관례
      • 고차 함수
      • 제네릭스
      • 어노테이션과 리플렉션
      • DSL 만들기
  • 🌸스프링
    • Spring Core
      • Cron Expression
      • Bean
        • Lifecycle
        • Aware
    • Spring MVC
    • Spring Security
      • 로그인 처리
      • 로그아웃 처리
      • JWT 인증 방식
      • 메소드별 인가 처리
    • Spring Data
      • Pageable
      • Spring Data Couchbase
      • Spring Data Redis
        • Serializer
    • Spring REST Docs
    • Spring Annotations
    • Spring Cloud
      • Service Discovery
      • API Gateway
      • Spring Cloud Config
      • MicroService Communication
      • Data Synchronization
    • Test
      • 테스트 용어 정리
      • JUnit
      • Spring Boot Test
      • Mockito
    • QueryDSL
      • 프로젝트 환경설정
      • 기본 문법
      • 중급 문법
      • 순수 JPA와 QueryDSL
      • 스프링 데이터 JPA와 QueryDSL
    • Lombok
      • @Data
      • @Builder
      • Log Annotations
  • 🕋DB
    • MySQL
      • CentOS7에서 MySQL 8 버전 설치하기
    • MongoDB
      • 
    • Redis
      • Sentinel
      • Cluster
      • Transaction
      • 자료구조
        • String
        • List
        • Set
        • Hash
        • Bitmaps
        • SortedSet
      • Lettuce 단일 서버, 클러스터 서버, 풀링 사용 방법
  • 📽️인프라
    • 리눅스
      • 주요 명령어 모음
    • Docker
      • Docker
      • Docker Compose
      • Docker Swarm
      • Docker Network
      • Linux에서 root 아닌 유저로 docker 실행하기
    • Kubernetes
      • 기초 개념
      • Pod
      • Configuration
      • ReplicationSet
      • Network
      • ConfigMap & Secret
      • Volume, Mount, Claim
      • Controller
      • Multi Container Pod
      • StatefulSet & Job
      • Rollout & Rollback
      • Helm
      • 개발 워크플로우와 CI/CD
      • Container Probes
      • Resource Limit
      • Logging & Monitoring
      • Ingress
      • Security
      • Multi Node/Architecture Cluster
      • Workload & Pod management
      • CRD & Operator
      • Serverless Function
      • K8S Cheat Sheet
    • Kafka
      • 카프카 개요
      • 카프카 설치 및 실습
      • Kafka Broker
      • Topic, Partition, Record
      • Producer
      • Consumer
      • Kafka Streams
      • Kafka Connect
      • MirrorMaker
  • AWS
    • AWS Console / CLI / SDK
    • IAM
    • EC2
      • EC2 Advanced
    • ELB / ASG
    • RDS / Aurora / ElastiCache
    • DynamoDB
    • DocumentDB / Neptune / Keyspaces / QLDB / Timestream
    • Route 53
    • Beanstalk
    • Solution Architect
    • S3
      • 보안
    • CloudFront
    • Global Accelerator
    • AWS Storage
    • Messaging
    • Container
    • Serverless
    • Data Analysis
    • Machine Learning
    • Monitoring
    • Security
    • VPC
    • Data Migration
    • 기타 서비스
  • 🏔️CS
    • 운영 체제
      • Introduction
      • System Structures
      • Process
      • Synchronization
      • Muitithreaded Programming
      • Process Scheduling
      • Memory Management
      • Virtual Memory
    • 네트워크
      • 네트워크 기초
      • 네트워크 통신 방식
      • OSI 7계층
        • 1계층: 물리계층
        • 2계층: 데이터 링크 계층
        • 3계층: 네트워크 계층
        • 4계층: 전송 계층
        • 5계층: 세션 계층
        • 6계층: 표현 계층
        • 7계층: 응용 계층
      • TCP/IP 스택
      • ARP
      • 데이터 크기 조절
      • WDM
      • NAT
      • DNS
      • DHCP
      • VPN
      • 네이글 알고리즘
      • 서버 네트워크
      • 네트워크 보안
        • 보안의 기본
        • 보안 장비
      • 이중화
    • 데이터베이스
      • 트랜잭션
    • 컴퓨터 구조
      • 개요
      • Instruction Set Architecture
      • Procedure Call & Return
      • Linking
      • Pipeline
      • Memory Hierarchy
      • Virtual Memory
      • Interrupt / Exception, IO
    • 자료 구조
      • Array
      • List
      • Map
      • Set
      • Queue
      • PriorityQueue
      • Stack
    • 웹 기술
      • HTTP
        • 쿠키와 세션
  • 🪂Big Data
    • Apache Hadoop
  • 🕹️ETC
    • Git
      • 내부 구조
      • 내가 자주 사용하는 명령어 모음
      • Commit Convention
    • 이력서 작성하기
    • Embedded
      • 라즈베리파이에서 네오픽셀 적용기
    • 기술블로그 모음집
Powered by GitBook
On this page
  • 개요
  • 웹사이트
  • 버전 관리
  • 복제
  • 스토리지 계층
  • 종류
  • 수명 주기 규칙
  • 요청자 지불
  • 이벤트 알림
  • 성능
  • 기본 성능
  • 성능 최적화
  • 배치 작업
  • Storage Lens
  • 메트릭
  1. AWS

S3

개요

  • Amazon S3는 백업과 스토리지로 활용되는 오브젝트 스토리지이다.

  • 용도

    • 파일을 저장하는 용도로 쓰거나 디스크처럼 쓸 수도 있다.

    • 재해 복구의 용도로도 쓸 수 있다. 예를 들어 리전이 다운되는 경우 데이터를 다른 리전으로 이동시킬 때 백업해둘 수 있다.

    • 하이브리드 클라우드 스토리지로 쓸 수 있다. 온프레미스에 스토리지가 있지만 클라우드로 확장하고자 한다면 Amazon S3를 사용할 수 있다.

    • 애플리케이션을 호스팅하고 동영상 파일이나 이미지 등 미디어를 호스팅할 수 있다.

    • 데이터 레이크를 보유하여 다량의 데이터를 저장하고 빅 데이터 분석을 수행하기 위해 사용할 수 있다.

    • 정적 웹 사이트를 호스팅할 수 있다.

  • 파일을 버킷에 저장하는데, 버킷은 상위 레벨 디렉토리로 표시된다.

  • 버킷은 계정 별로 생성할 수 있으며, 버킷의 이름은 AWS 전역적으로 고유해야 한다. 리전 수준에서 정의된다.

  • 버킷 이름에는 대문자나 밑줄이 없어야 하고, 길이는 3자에서 63자 사이여야 하며, IP여서는 안 되고, 소문자나 숫자로 시작해야 한다. 문자와 숫자, 하이픈만 사용하면 된다.

  • 키

    • 하나의 객체나 파일에는 키가 매핑된다.

    • Amazon S3 키는 파일의 전체 경로이다. 예를 들어 my_file.txt 파일의 키는 my_file.txt이다.

    • 접두사와 객체 이름으로 구성된다. 접두사는 파일명을 제외한 상위 디렉토리들이 된다. 하지만 Amazon S3 자체에서는 디렉토리라는 개념을 갖고 있지 않다.

  • 객체

    • S3 버킷의 파일

    • 키에 매핑되는 값이다.

    • 파일 등 어떤 형식이든 Amazon S3로 업로드할 수 있다.

    • 최대 객체 크기는 5TB이다. 하지만 파일이 크면 멀티파트 업로드를 사용해서 해당 파일을 여러 부분으로 나눠 업로드해야 한다.

    • 객체에는 메타데이터를 저장할 수 있다. 시스템이나 사용자에 의해 설정될 수 있다.

    • 태그는 보안과 수명 주기에 유용하며, 최대 10개까지 저장 가능한 유니코드 키-값 쌍이다.

    • 버전 관리를 활성화한 경우 버전 ID를 가질 수 있다.

웹사이트

  • Amazon S3를 활용하여 정적 웹 사이트를 생성할 수 있다.

  • 웹 사이트 URL은 AWS 리전과 버킷 이름에 따라 달라진다. ex) http://bucket-name.s3-website-aws-region.amazonaws.com

  • 버킷에 대한 공개 읽기가 활성화되어야 브라우저에서 접근 가능하다.

버전 관리

  • 버전 관리 기능을 사용하는 경우 동일한 키를 업로드하고 해당 파일을 덮어쓰는 업로드를 할 때마다 버전이 생성된다.

  • 버전 관리를 통해 의도하지 않게 객체가 삭제되지 않도록 보호할 수 있다. 한 파일의 버전을 삭제할 때 삭제 마커를 추가하고 실제로 지우지 않는다. 따라서 삭제 마커 자체를 지우면 데이터를 원상복구할 수 있는 것이다.

  • 이전 버전으로 쉽게 롤백할 수도 있다.

  • 버전 관리를 활성화하기 전에 버전 관리가 적용되지 않은 모든 파일은 널(null) 버전을 갖게 된다.

  • 버전 관리를 중단해도 이전 버전을 삭제하지 않는다.

복제

  • 소스 버킷과 복제 대상 버킷 둘 모두 버전 관리 기능이 활성화되어야 한다.

  • 서로 다른 AWS 계정간에도 사용할 수 있다.

  • CRR은 교차 리전 복제이고, SRR은 동일 리전으로 복제이다.

    • CRR은 컴플라이언스, 즉 법규나 내부 체제 관리, 그리고 데이터가 다른 리전에 있어 발생할 수 있는 지연 시간을 줄일 경우에 사용한다. 또는 계정 간 복제에도 쓸 수 있다.

    • SRR은 다수의 S3 버킷 간의 로그를 통합할 때나, 개발 환경이 별도로 있어 운영 환경과 개발 환경간의 실시간 복제를 필요로 할 때 사용될 수 있다.

  • 복제는 비동기로 백그라운드에서 수행된다.

  • 복제 기능이 정상적으로 실행되려면, S3에 읽기/쓰기가 가능하도록 IAM 권한을 부여해야 한다.

  • 스토리지 계층 복제를 활성화한 후에는 새로 추가되는 객체만 복제 대상이 된다.

  • 기존의 객체를 복제하려면 S3 배치 복제 기능을 사용해야 한다.

  • 소스 버킷에서 대상 버킷으로 삭제 마커를 복제해야 삭제된 파일을 다른 버킷에서 노출하지 않는다.

  • 버전 ID를 기반으로 객체를 삭제하는 경우 이는 복제되지 않는다.

  • A -> B -> C 버킷과 같은 체이닝 복제는 불가하다. A -> B, A -> C로 각각 복제해야 한다.

  • Batch Operations 작업을 이용한 배치 복제를 사용하면 복제 구성이 이루어지기 전에 있었던 객체, 이전에 복제되었던 객체, 복제에 실패했던 객체를 복제할 수 있다.

스토리지 계층

  • 모든 스토리지 계층에 Multi AZ rks 99.99999999999% 의 내구성을 보장한다. Amazon S3에 천만 개의 객체를 저장했을 때 평균적으로 10,000년에 한 번 객체 손실이 예상되는 정도이다.

  • 가용성은 스토리지 계층마다 다르다.

  • 스토리지 클래스를 수동으로 변경하거나 Amazon S3 수명 주기 구성을 사용해 스토리지 클래스 간에 객체를 자동으로 이동시킬 수 있다.

종류

  • Amazon S3 Standard

    • 99.99% 가용성을 보장한다.

    • 자주 액세스하는 데이터에 사용되며, 가장 기본적으로 사용하는 스토리지 유형이다.

    • 지연 시간이 짧고 처리량이 높다.

    • AWS에서 두 개의 기능 장애를 동시에 버틸 수 있다.

    • 빅 데이터 분석, 모바일과 게임 애플리케이션 그리고 콘텐츠 배포 등에 사용할 수 있다.

  • Amazon S3 Infrequent Access

    • 자주 액세스하지는 않지만 필요한 경우 빠르게 액세스해야 하는 경우 사용한다.

    • S3 Standard보다 비용이 적게 들지만 조회할 때 마다 비용이 발생한다.

    • 99.9% 가용성을 보장한다.

    • 재해 복구와 백업 용도로 사용할 수 있다.

  • Amazon S3 One Zone-Infrequent Access(IA)

    • 단일 AZ에서 동작하며, 높은 내구성을 갖지만 AZ가 파괴된 경우 데이터를 잃게 된다.

    • 99.5% 가용성을 보장한다.

    • 온프레미스 데이터를 2차 백업하거나 재생성 가능한 데이터를 저장하는 데 쓰인다.

  • Glacier Instant Retrieval

    • 아카이빙과 백업을 위한 저비용 객체 스토리지

    • 밀리초 단위로 조회가 가능하다.

    • 최소 보관 기간이 90일이기 때문에 백업이지만 밀리초 이내에 액세스해야 하는 경우 적합하다.

  • Glacier Flexible Retrieval

    • Expedited는 데이터를 1~5분 이내에 받을 수 있고, Standard는 데이터를 돌려받는 데 3~5시간 소요되고, Bulk는 무료지만 데이터를 돌려받는 데 5~12시간이 소요된다.

    • 최소 보관 기간은 90일이다.

  • Glacier Deep Archive

    • 조회 시 12시간이 걸리는 Standard와 48시간이 걸리는 Bulk 타입이 있다.

    • 비용이 가장 저렴하고 최소 보관 기간이 180일이다.

  • Amazon S3 Intelligent Tiering

    • 사용 패턴에 따라 액세스 티어 간에 객체를 자동으로 이동시켜준다.

    • 소액의 월별 모니터링 비용과 티어링 비용이 발생하지만 조회 비용은 없다.

    • FrequentAccess 티어는 자동이고 기본 티어이다.

    • Infrequent Access 티어는 30일 동안 액세스되지 않은 객체 전용 티어이다.

    • Archive Instant Access 티어는 90일 동안 액세스되지 않은 객체 전용 티어이다.

    • Archive Access 티어는 선택 사항이며 90일에서 700일 이상까지 구성할 수 있다.

    • Deep Archive Access 티어는 선택 사항이며 180일에서 700일 이상 액세스하지 않는 객체를 저장할 수 있다.

  • Amazon S3 Express One Zone

    • 가장 자주 액세스하는 데이터와 지연 시간에 민감한 애플리케이션에 대해 10밀리초 미만의 일관된 데이터 액세스를 제공하도록 특별히 설계된 고성능 단일 가용 영역 스토리지 클래스이다.

    • S3 Standard에 비해 데이터 액세스 속도는 최대 10배 빠르고 요청 비용은 최대 50% 저렴하다.

    • 데이터 액세스 속도를 크게 개선하여 모델 데이터세트를 더 빠르게 처리함으로써 모델 훈련 및 개발을 가속화할 수 있다.

수명 주기 규칙

  • 수명 주기 규칙을 이용하거나 직접 수작업으로 다른 스토리지 클래스 간에 객체를 옮길 수 있다.

    • 예를 들어 Standard로부터 자주 접근되지 않는 객체를 Standard IA, Intelligent Tiering, One-Zone IA 등으로 옮길 수 있다.

    • 오래된 객체를 아카이브화하려면 Glacier 티어나 Deep Archive 티어로 이전할 수 있다.

  • Transition Actions

    • 다른 스토리지 클래스로 이전하기 위한 객체를 설정한다.

    • 예를 들어 객체가 생성된 지 60일 후에는 Standard 클래스로 이전하고 6개월 후에는 Glacier로 이전해서 아카이브화 한다고 정의할 수 있다.

    어떤 티어로든 최소 30일은 지난 후에야 옮길 수 있다.

  • Expiration actions

    • 일정한 시간 뒤에 객체를 만료시켜 삭제하도록 설정할 수 있다.

    • 예를 들어 액세스 로그 파일을 365일 후에 삭제하도록 설정할 수 있다.

    • 버저닝을 활성화했다면 오래된 버전의 객체를 만료시켜 삭제할 수도 있다.

    • 멀티파트 업로드가 한참 전에 시작되었지만 아직 완료되지 않은 불완전한 데이터를 삭제할 수 있다.

  • 특정한 접두어에 대해 규칙을 지정하여 버킷 전체에 적용하거나 버킷 안의 특정한 경로에 적용할 수 있다.

  • 특정한 객체 태그에 대해 규칙을 지정할 수도 있다.

Q. EC2에 구동된 애플리케이션에 사용자가 프로필 사진을 업로드하면 일단 Amazon S3에 업로드하고 이미지 섬네일을 생성한다. 섬네일은 원본 사진으로부터 쉽게 재생성할 수 있으며 60일 동안만 보관하고자 한다. 원본 이미지는 60일 동안 즉시 조회 가능해야 하고 60일 이후에는 최장 6시간 동안 기다릴 수 있도록 한다. 어떻게 아키텍처를 디자인할 것인가?

A. S3 원본 이미지는 Standard 클래스에 두고 60일 후에 Glacier로 이전하도록 한다. 섬네일 이미지는 One-Zone IA에 두어 60일 후에 만료시켜 삭제되도록 할 수 있다.

Q. 30일 동안은 삭제된 S3 객체를 즉각적으로 복구할 수 있어야 하고, 30일이 지난 후 최장 365일 동안은 삭제된 객체를 48시간 이내에 복구할 수 있어야 한다. 어떻게 아키텍처를 디자인할 것인가?

A. S3 버저닝을 활성화해서 객체 버전을 보관해야 하고, 최신 버전이 아닌 객체들을 Standard IA로 이전하도록 한다. 이후 Glacier Deep Archive로 이전할 수 있다.

  • 객체를 다른 클래스로 이전할 최적의 날짜를 결정할 때 Amazon S3 Analytics를 이용하면 편리하다.

    • Standard나 Standard IA에 관한 추천사항을 제시할 수 있지만, One-Zone IA나 Glacier와는 호환되지 않는다.

    • S3 Analytics는 매일 csv 보고서를 생성하고 추천사항과 통계를 제공한다.

    • 데이터 분석 결과는 24~48시간 정도 기다려야 나올 수 있다.

요청자 지불

  • 일반적으로 버킷과 관련된 모든 Amazon S3 스토리지 및 데이터 전송 비용을 버킷 소유자가 지불한다.

  • 버킷들에 객체를 보관하고 있고, 사용자가 버킷으로부터 파일을 다운로드하면 네트워킹 비용이 버킷 및 객체 소유자에게 청구된다.

  • 요청자 지불 버킷을 활성화하면, 파일 요청자가 객체 데이터 다운로드 비용을 지불하도록 할 수 있다.

  • 대량의 데이터 셋을 다른 계정과 공유하려고 할 때 유용하다.

  • 요청자는 AWS에서 인증을 받은 상태여야 AWS가 객체에 대한 다운로드 요청자에게 비용을 청구할 수 있다.

이벤트 알림

  • Amazon S3에서는 객체가 생성되었거나 객체가 삭제되었거나 객체가 복구되었거나 복제되는 등의 이벤트를 발생시킬 수 있다.

  • 이벤트들을 필터링하여 알림을 SNS 토픽, SQS Queue, 람다 함수 등에 전달해 작업을 처리할 수 있다.

  • 이벤트들은 보통 몇 초 안에 그런 대상으로 전달되지만, 간혹 몇 분 정도 걸릴 수도 있다.

  • 이벤트 알림이 작동하려면 IAM 역할을 갖고 있어야 한다.

    • S3 서비스가 데이터를 SNS 토픽에 직접 전송하려면 SNS 리소스 정책을 매핑해야 한다.

    • S3 서비스가 SQS Queue에 데이터를 전송하도록 하려면 SQS 리소스 액세스 정책을 매핑해야 한다.

    • S3 서비스가 람다 함수를 호출하려면 람다 리소스 정책을 매핑해야 한다.

  • Amazon EventBridge

    • 모든 이벤트는 Amazon S3 버킷으로 이동 후 Amazon EventBridge로 모인다.

    • EventBridge에서 규칙을 설정하여 18가지 AWS 서비스에 전송할 수 있다.

    • EventBridge를 사용하면 고급 필터링 옵션을 사용할 수 있다. 메타데이터, 객체 사이즈, 이름 등으로 필터링 가능하다.

    • 한꺼번에 다수의 대상(Step Functions, Kinesis Streams, Firehose 등)에 이벤트를 전송할 수 있다.

    • 아카이빙, 이벤트 중계, 안정적인 전달 등 여러 기능을 제공한다.

성능

기본 성능

  • 아마존 S3는 기본적으로 높은 요청률과 100-200ms 지연 시간을 제공하기 위해 자동으로 스케일링된다.

  • 버킷 내에서 prefix 마다 초당 3,500개의 PUT, COPY, POST, DELETE 요청을 보낼 수 있고, 5500개의 GET, HEAD 요청을 보낼 수 있다.

  • 버킷의 접두사 수에는 제한이 없다. 만약 4개의 접두사에 균등하게 조회 요청을 분산하면 초당 최대 22,000개의 요청을 처리할 수 있다.

성능 최적화

  • 멀티파트 업로드

    • 100MB가 넘는 파일에는 멀티파트 업로드를 권장하고, 5GB가 넘는 파일에는 반드시 멀티파트 업로드를 사용해야 한다.

    • 업로드를 병렬화하므로 전송 속도를 높여 대역폭을 최대화할 수 있다.

    • 모든 청크가 업로드되면 이를 큰 파일로 다시 합칠 수 있다.

  • S3 전송 가속화

    • 업로드 및 다운로드 속도 향상을 위해 파일을 AWS 엣지 위치로 먼저 전송하고 이후 대상 지역의 S3 버킷으로 데이터가 전달되도록 하는 방식이다.

    • 현재 200개가 넘는 엣지 위치가 있다.

    • 전송 가속화는 멀티파트 업로드와 호환된다.

    • 공공 인터넷의 사용량을 최소화하고 프라이빗 AWS 네트워크의 사용량을 최대화한다.

  • Byte-Range Fetches

    • 파일의 특정 바이트 범위를 조회해 전체 조회 요청을 병렬화할 수 있다.

    • 특정 바이트 범위를 가져오는 데 실패하였다면 더 작은 바이트 범위로 다시 조회 시도를 할 수 있다.

    • 실패 시 복원력이 향상되어 다운로드 속도를 높이는 데 사용할 수 있다.

    • 파일의 일부, 예를 들면 헤더 부분만 조회 요청을 보낼 수 있어, 일부 데이터만 필요하다면 빠르게 조회 가능하다.

배치 작업

  • 단일 요청으로 기존 S3 객체에서 대량 작업을 수행하는 서비스

  • 제공되는 기능은 다음과 같다.

    • S3 객체들의 메타데이터와 프로퍼티를 일괄 수정할 수 있고, 배치 작업으로 S3 버킷 간에 객체를 복사할 수 있다.

    • S3 버킷 내 암호화되지 않은 모든 객체를 암호화할 수 있다.

    • ACL이나 태그를 수정할 수 있다.

    • S3 Glacier에서 한 번에 많은 객체를 복원할 수 있다.

    • Lambda 함수를 호출해 S3 Batch Operations의 모든 객체에서 사용자 지정 작업을 수행할 수 있다.

  • S3 Batch Operations를 사용하면 재시도를 관리하거나 진행 상황을 추적하고 작업 완료 알림을 보내고 보고서 생성을 할 수 있다.

  • S3 Inventory를 통해 객체 목록을 가져오고 S3 Select를 통해 필터링하여 S3 배치에 전달할 객체를 선별한다.

  • S3 Batch Operations에 수행할 작업, 매개 변수, 객체 목록을 전달하면 S3 배치가 작업을 수행하고 객체를 처리한다.

Storage Lens

  • 전체 AWS 조직에서 스토리지를 이해하고, 분석하고, 최적화하는 데 도움이 되는 서비스이다.

  • 이상 징후를 발견하고, 비용 효율성을 파악하며, 전체 AWS 조직에 보호 모범 사례를 적용할 수 있다.

  • 30일 동안의 사용량 및 활동 메트릭이 제공된다.

  • 조직, 특정 계정, 지역, 버킷, 접두사 수준에서 데이터를 집계할 수 있다.

  • 모든 메트릭을 CSV, parquet 형식으로 S3 버킷에 내보낼 수 있다.

  • 요약 인사이트, 데이터 보호, 비용 효율성을 분석해 Amazon S3 사용을 최적화할 수 있다.

  • 기본 대시보드 혹은 커스텀 대시보드를 사용할 수 있다.

  • 기본 대시보드는 다음과 같은 특징을 가진다.

    • 무료 및 고급 지표에 대한 요약된 인사이트와 트렌드를 확인할 수 있다.

    • 여러 지역과 여러 계정의 데이터가 표시된다. 조회하고 싶은 지역, 계정, 버킷, 스토리지 클래스를 지정할 수 있다.

    • Amazon S3에 의해 사전 구성된다.

    • 삭제할 수 없지만 비활성화할 수는 있다.

    • 총 저장 용량, 객체 수, 평균 객체 크기, 보유한 버킷 수, 계정 등의 정보를 확인할 수 있다.

메트릭

  • 요약 메트릭

    • 일반적인 S3 스토리지에 대한 정보

    • StorageBytes, ObjectCount 등

    • 빠르게 커지거나 사용하지 않는 버킷, 접두사를 식별하는 용도로 사용 가능하다.

  • 비용 최적화 메트릭

    • 스토리지 비용을 관리하고 최적화할 수 있는 인사이트 제공

    • NonCurrentVersionStorageBytes, IncompleteMultipartUploadStorageBytes 등

    • 어떤 버킷이 다중 파트 업로드에 실패했는지 또는 어떤 객체를 더 저렴한 스토리지 클래스로 전환할 수 있는지 확인하는 용도로 사용 가능하다.

  • 데이터 보호 메트릭

    • 데이터 보호 기능에 대한 인사이트를 제공한다.

    • VersioningEnabledBucketCount, MFADeleteEnabledBucketCount, SSCKMSEnabledBucketCount, CrossRegionReplicationRuleCount 등

    • 데이터 보호 모범 사례를 따르지 않는 버킷을 식별하는 용도로 사용 가능하다.

  • 액세스 관리 메트릭

    • S3 버킷 소유권에 대한 인사이트를 제공한다.

    • 버킷이 현재 어떤 객체 소유권 설정을 사용하고 있는지 식별할 수 있다.

  • 이벤트 메트릭

    • S3 이벤트 알림에 대한 인사이트를 제공한다.

    • EventNotificationEnabledBucketCount

  • 퍼포먼스 메트릭

    • S3 전송 가속에 대한 인사이트를 제공한다.

    • TransferAccelerationEnabledBucketCount

  • 액티비티 메트릭

    • 얼마나 요청이 들어왔는지에 대한 인사티으를 제공한다.

    • AllRequests, GetRequests, PutRequests, ListRequests, BytesDownloaded 등

  • Detailed Status Code Metrics

    • HTTP 상태 코드에 대한 인사이트를 제공한다.

    • 200OKStatus Count, 403ForbiddenErrorCount 등

  • 무료 메트릭은 모든 고객에게 자동으로 제공되며 약 28개의 사용량 지표가 포함되어 있고 쿼리에 대한 데이터는 14일 동안 조회할 수 있다.

  • 유로 메트릭은 고급 메트릭을 추가로 지원하고, CloudWatch에서 추가 비용 없이 접근할 수 있다. 접두사 단위로 메트릭을 수집할 수도 있고 데이터를 15개월 동안 사용할 수 있다.

PreviousSolution ArchitectNext보안

Last updated 26 days ago