# DynamoDB & S3

# 1. DynamoDB

> 점점 대충하게 되네… 

[AWS DynamoDB 사용기_보조 인덱스 사용 위주로](https://velog.io/@hanseul/AWS-DynamoDB-%EC%82%AC%EC%9A%A9%EA%B8%B0)

### Key

**파티션 키는**

- 물리적인 공간인 파티션을 특정하는 키. 

- 그래서 일치하는 값만 가져올 수 있다.

**정렬 키는**

- 단순한 인덱스로 파티션 내에서 정렬하는 기준 값이다.

- 따라서 정렬 키가 있으면, 한 아이템에 파티션 키가 두 번 나올 수 있다.

![Image](https://upload.cafenono.com/image/slashpageHome/20240820/134250_OLsAoP0QJXIp1XjlPr?q=80&s=1280x180&t=outside&f=webp)

### 보조 인덱스

보조 인덱스로 검색 효율을 높일 수 있다. 보조 인덱스를 설정하면 새로운 테이블에 마이그레이션해야 한다.

- Local (**LSI**) : 동일한 파티션 키 내에서 **단순히 정보를 분리**하고 싶을 때 사용한다. 우선키와 같은 파티션키를 사용한다.

- Global (**GSI**) : **정렬키와는 별개로 특정 키를 인덱스 키로** 활용한다. 우선키와 다른 파티션키를 사용한다.

### Read/Write Capacity Unit

- **읽기 (RCU)** : 4KB/s SC, 8KB/s EC

- **쓰기 (WCU)** : 1KB/s

- **Strongly Consistent (SC)** : 가장 최신 데이터를 읽음

- **Eventually Consistent (EC)** : 결과적으로는 최신 데이터를 보장하지만 실시간은 아님.

### DAX

자주 읽는 값들을 캐싱해서 읽기 속도를 엄청 빠르게 해준다.

### Stream

원하는 이벤트가 발생할 때마다 람다 함수로 넘겨서 작업을 진행할 수 있다. 단, 3개 이상의 람다 함수가 스트림을 받으면 throttling이 발생할 수 있다.

### Global Table

현재 테이블을 다른 리전으로 확장할 수 있다. 아이템에는 리전과 업데이트 시간 컬럼이 자동으로 생긴다.

### Time To Live (TTL)

아이템에 수명을 줄 수 있다. 이 시간이 지나면 아이템은 테이블에서 삭제된다.

### 활용

S3 → DynamoDB → ElasticSearch

1. S3의 메타데이터를 저장하는 용도로 DynamoDB를 사용할 수 있다.

![Image](https://upload.cafenono.com/image/slashpageHome/20240820/134251_XyCFqtKP4S0ArZCIeQ?q=80&s=1280x180&t=outside&f=webp)

1. 이 정보를 ElasticSearch를 통해 분석할 수 있다.

![Image](https://upload.cafenono.com/image/slashpageHome/20240820/134252_bHDEwzBX9fpYMTdyVz?q=80&s=1280x180&t=outside&f=webp)

# 2. S3

- **S3 이벤트**를 밖으로 보낸다.

- **버킷 정책**으로 다른 리소스를 허용한다.

- **리전 간 복제**를 만들 수 있다.

- **생명주기 규칙**을 만들어서 클래스를 옮기거나 지운다.

- **Glacier 클래스**로 전환해 장기 보관한다.

- AES-256(S3), KMS **암호화**를 한다.

- **서버 엑세스 로그**를 다른 버킷에 남긴다.

For the site tree, see the [root Markdown](https://slashpage.com/kaonmir.md).
