반응형
1. Primary Key
- 후보키 중에서 설계자에 의해 선택된 키
- 중복 불가능하여 한 행(row)를 고유하게 식별할 수 있다
- NULL 값을 갖는 것이 불가능하다
- 테이블은 오직 하나의 기본키를 가질 수 있지만 기본키가 반드시 하나의 컬럼으로 이루어져야하는 것은 아니다.
2. Dynamo DB
Dynmamo DB는 하나의 논리적인 데이터베이스가 물리적으로 여러 서버(노드)에 나뉘어 저장되는 분산 데이터베이스 시스템을 기반으로 한다.
🔍분산 데이터베이스 시스템이란?
하나의 서버로는 감당할 수 없는 데이터량과 트래픽을 처리하기 위해 사용된다
DynamoDB 같은 분산 데이터베이스는 Partition Key(PK)를 기준으로 데이터를 자동으로 여러 파티션(서버)에 나눠 저장한다.
## 파티셔닝 (Sharding)
예) Partition Key = userId
서버 A: userId 1~1000000
서버 B: userId 1000001~2000000
...
1) Table
- 데이터를 저장하는 단위
- RDB의 테이블과 비슷하지만, 스키마가 굉장히 유동적이다!
- ex) 미리 스키마를 설계하지 않고도, 프로그램 코드 내에서 엔티티(구조)를 만들고 save하는 API 통신을 날리면
그 구조대로 스키마가 생기며 저장됨!
- ex) 미리 스키마를 설계하지 않고도, 프로그램 코드 내에서 엔티티(구조)를 만들고 save하는 API 통신을 날리면
2) Item
- 한 개의 행(Row)를 의미.
- JSON 형태의 유연한 구조.
3) Key
다이나모 DB에서 Primary Key는 Partition Key와 Sort Key 두 개를 합친 복합 키를 권장한다
그 이유에 대해서 Partition Key(파티션 키)와 Sort Key(정렬 키)의 개념에 대해 파악하며 알아보자.
✅ 파티션 키 Partition Key(PK)
- 테이블 생성 시 PK 는 필수
- 데이터를 물리적으로 분산 저장하기 위한 기준.
- 같은 Partition Key를 가진 아이템들은 같은 파티션에 저장
- 무한하게 많은 파티션 중에서 내가 찾고자 하는 데이터가 어느 파티션에 있는지 찾아갈 수 있도록 도와주는 역할을 한다.
- RDB에서의 Primary Key(PK)와 약자는 같지만, 사용되는 방향이 다르다
{
"userId": "yeji0916"
}
✅ 정렬 키 Sort Key
- Partition Key 안에서 아이템을 정렬하는 기준.
{
"userId": "yeji0916", //PK
"createdAt": "2025-04-10T13:00:00" //SK
}
SK가 createdAt이므로 계정 생성일자에 따라서 PK가 정렬된다.
🧐 Quiz Time !
파티션 키(PK)가 userId 고
정렬 키(SK)가 createdAt인 경우에
아이템들은 어떤 순서로 정렬이 될까요?!
아이템 1
{
"userId": "yeji0916",
"createdAt": "2025-04-10"
}
아이템 2
{
"userId": "mina0409",
"createdAt": "2025-03-01"
}
아이템 3
{
"userId": "yeojin1017",
"createdAt": "2023-01-100"
}
.
.
.
정답은...!
더보기
무작위로 정렬 된다!
왜냐하면, 정렬 키(SK)는 '파티션 키(PK)' 안에서 아이템을 정렬하는 기준이다.
좀 더 자세히 설명하자면, '같은 파티션 키(PK)' 일 때 정렬 키(SK)의 정렬이 적용된다는 것이다.
모든 아이템들은 각각 파티션 키(PK)의 값이 다르므로, findAll을 했을 때 매번 무작위의 순서로 정렬된다.
회사에서 Dynamo DB를 사용하여 솔루션을 개발하던 도중
'뭐 대충 Redis랑 비슷하겠지...' 라고 생각하며 다뤘다가 큰코 다쳤던 경험을 양분삼아서 포스팅해봤습니다.
감사합니다 ^_^
반응형
'Programming > TWIL' 카테고리의 다른 글
[TWIL] DB JOIN 으로 인한 중복 증가 현상에 대하여 (0) | 2025.04.06 |
---|---|
[TWIL] 1:N 문제와 예시 (0) | 2025.03.23 |
[TWIL] 스프링 시큐리티 딥다이브 (0) | 2025.03.16 |
[TWIL] 왜 내가 설정한 로깅은 오락가락할까? 스프링 AOP와 프록시에 대하여 (3) | 2025.03.08 |
[TWIL] 웹 어플리케이션 아키텍처의 기초 (EC2/WAS/DOCKER) (0) | 2025.02.16 |