
NoSQL이란?
NoSQL : 관계가 없는 형태의 데이터베이스
관계형 데이터베이스의 데이터 일관성 제약을 일부 완화
스키마 없는 데이터 모델에 최적화, 간단한 데이터 구조(열, 문서, 그래프, 인메모리 키-값 스토어 등)
수평적으로 확장 가능
짧은 지연 시간 및 복원력
RDBMS vs NoSQL
| RDBMS (관계형 데이터베이스) | NoSQL | |
|---|---|---|
| 데이터 모델 | 스키마 적용 (테이블) | 스키마 X |
| ACID 속성 | 지원 (원자성, 일관성, 격리성, 내구성) | 일부 지원 |
| 성능 | 디스크 하위 시스템 (쿼리, 인덱스 및 테이블 구조 최적화) | 하드웨어 클러스터 크기, 네트워크 지연 시간 |
| 확장 | 더 빠른 하드웨어 사용 | 하드웨어 분산 클러스터 사용 |
| API | SQL 쿼리문 | 객체 기반 API (인 메모리 데이터 구조 저장 및 검색) |
NoSQL 데이터베이스 유형
열 기반 데이터베이스 : 데이터의 열을 읽고 쓰는 데 최적화
문서 데이터베이스 : JSON 또는 XML 형식의 문서와 같은 반정형 데이터, 문서별로 다른 스키마 적용 가능
그래프 데이터베이스 : 정점과 간선을 저장하는 형태의 데이터베이스
인 메모리 키-값 스토어 : 읽기 중심의 애플리케이션 워크로드 또는 컴퓨팅 집약적 워크로드에 최적화
DynamoDB란?

DynamoDB : 빠르고 확장 가능한 완전 관리형 클라우드 NoSQL 데이터베이스
DAX(Amazon DynamoDB Accelerator) : 가용성이 뛰어난 완전 관리형 인 메모리 캐시Amazon DynamoDB Accelerator) : 가용성이 뛰어난 완전 관리형 인 메모리 캐시
스토리지 요금(사용한 디스크 공간(GB)) + 읽기/쓰기 용량 유닛
DynamoDB의 Read 방식
Eventually Consistent Read : 최근 완료된 쓰기 작업 결과를 반영하지 않을 수 있어 부실 데이터 포함 가능, 잠시 후에 읽기 요청을 반복하면 최신 데이터 반환
Strongly Consistent Read : 모든 쓰기 작업의 업데이트를 반영하여 최신 데이터 반환 (네트워크 지연, 중단이 없어야 함)
DynamoDB의 기본 구성 : Table ⊃ Item ⊃ Attribute ⊃ Key(문자열)-Value 방식의 데이터
스칼라 데이터 형식 : Number(N, 최대 38자리), String(S, UTF-8 이진 인코딩 문자열), Binary(B, 압축 텍스트), Boolean(S, 0 또는 1), Null(NULL)
문서 형식 (내포 속성이 있는 복잡한 구조 표현) : List(L, 순서 지정된 값 모음), Map(M, 정렬되지 않은 이름-값 쌍의 모음)
다중 값 형식 (여러 스칼라 값 표현) : String Set(SS, 문자열 집합), Number Set(NS, 숫자 집합), Binary Set(BS, 이진 집합)
파티션 : DynamoDB가 데이터를 저장하는 곳
SSD로 백업되는 테이블용 스토리지 할당
하나의 AWS 리전 내의 여러 가용 영역에 자동으로 복제됨
DynamoDB의 키 : Item을 구분하는 고유 식별자
기본 키(Primary Key) : Table 내에서 각 Item을 구분하는 고유 식별자, 단순 기본 키(파티션 키)와 복합 기본 키(파티션 키 + 정렬 키)
파티션 키(Partition Key) : 데이터가 저장되어 있는 파티션을 결정하기 위한 키 값, 내부 해시 함수에 대한 입력으로 사용
정렬 키(Sort Key) : 파티션 키가 동일한 모든 항목들을 정렬하는 키 값
보조 인덱스
글로벌 보조 인덱스(Global Secondary Index, GSI) : 파티션 키 및 정렬 키가 테이블의 파티션 키 및 정렬 키와 다를 수 있는 인덱스 (테이블당 최대 20개), 다른 값으로 파티션 나누고 정렬 가능
로컬 보조 인덱스(Local Secondary Index, LSI) : 테이블과 파티션 키는 동일하지만 정렬 키는 다른 인덱스 (테이블당 최대 5개), 파티션 내에서 정렬 가능
| 글로벌 보조 인덱스 | 로컬 보조 인덱스 | |
|---|---|---|
| 키 스키마 | 단순 기본 키(파티션 키) or 복합 기본 키(파티션 키 + 정렬 키) | 복합 기본 키(파티션 키 + 정렬 키) |
| 키 속성 | 기본 테이블 속성 | 기본 테이블의 파티션 키와 동일한 속성 |
| 파티션 키 값당 크기 제한 | 크기 제한 없음 | 인덱싱된 모든 항목의 전체 크기 ≤ 10GB |
| 온라인 인덱스 작업 | 테이블 생성할 때 동시 생성 가능 기존 테이블에 추가/삭제 가능 | 테이블 생성할 때 동시에 생성됨 |
| 쿼리 및 파티션 | 전체 테이블(모든 파티션)에 대해 쿼리 가능 | 단일 파티션에 대해 쿼리 가능 |
| 읽기 일관성 | 최종 일관성 | 최종 일관성 or 강력한 일관성 |
| 할당된 처리량 소비 | 자체 할당 처리량 설정 | 기본 테이블의 읽기/쓰기 용량 단위 |
| 프로젝션 속성 | 인덱스로 프로젝션되는 속성만 요청 가능 | 인덱스로 프로젝션되지 않는 속성도 요청 가능 |
데이터 조회 방식
Query : 키 값을 기반으로 데이터를 찾는 방식
Scan : 전체 데이터를 가져와서 필터링하는 방식 (Projection Expression 파라미터를 사용하여 일부 속성만 가져올 수 있음)
데이터 조회 시에는 되도록 Query를 사용함

DynamoDB 테이블 생성하기
테이블 설계
복합 기본 키 : 학번(파티션 키) + 과목명(정렬 키)
글로벌 보조 인덱스 : 과목명(파티션 키) + 점수(정렬 키)









DynamoDB 데이터 조회하기





📢 세 줄로 정리해보기!
1️⃣ DynamoDB는 완전 관리형 클라우드 NoSQL 데이터베이스다. NoSQL은 관계형 데이터베이스의 데이터 일관성 제약을 일부 완화하여 스키마가 없는 데이터 모델에 최적화된 데이터베이스다.
2️⃣ DynamoDB의 테이블에는 각 아이템을 구분하기 위한 고유 식별자인 기본 키(Primary Key)가 존재한다. 단순 기본 키(파티션 키)와 복합 기본 키(파티션 키 + 정렬 키)가 있는데, 파티션 키(Partition Key)는 데이터가 저장되는 파티션을 결정하고 정렬 키(Sort Key)는 동일한 파티션 내의 항목을 정렬한다.
3️⃣ DynamoDB는 데이터를 조회할 때 키 기반으로 Query 혹은 전체 데이터를 가져와 필터링하는 Scan 할 수 있다. 또한 글로벌 보조 인덱스(Global Secondary Index)(전체 테이블)와 로컬 보조 인덱스(Local Secondary Index)(파티션 내)를 사용할 수 있다.
참고 자료
└ 소플의 처음 만난 AWS
└ DynamoDB
└ AWS DynamoDB 사용기_보조 인덱스 사용 위주로
└ 인덱스 정리 (클러스터, 보조 인덱스, B+ 트리)