Programming/TWIL

다이나모 DB에 대하여

LazyCat 2025. 4. 13. 19:32
반응형

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 통신을 날리면
      그 구조대로 스키마가 생기며 저장됨!

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랑 비슷하겠지...' 라고 생각하며 다뤘다가 큰코 다쳤던 경험을 양분삼아서 포스팅해봤습니다.

 

감사합니다 ^_^

반응형