- **ํํฐ์ ๋(Partitioning)**์ ํ๋์ ํฐ ํ ์ด๋ธ์ ๊ท์น์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ ์์ ๋ฌผ๋ฆฌ์ ์กฐ๊ฐ(partition)์ผ๋ก ๋๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ฒ
- **์ค๋ฉ(Sharding)**์ ํํฐ์ ๋์ ํน์ํ ํํ๋ก, ๋๋ ์กฐ๊ฐ(shard)์ ์๋ก ๋ค๋ฅธ ๋ฌผ๋ฆฌ์ ์๋ฒ์ ๋ถ์ฐ ์ ์ฅํ๋ ์ํ ํ์ฅ(horizontal scaling) ๊ธฐ๋ฒ
- ํต์ฌ ์ฐจ์ด: ํํฐ์ ๋์ ํ ์๋ฒ ์์์ ํ ์ด๋ธ์ ์ชผ๊ฐ๋ ๊ฒ, ์ค๋ฉ์ ์ฌ๋ฌ ์๋ฒ์ ๊ฑธ์ณ ๋ฐ์ดํฐ๋ฅผ ์ชผ๊ฐ๋ ๊ฒ
ํด๋น ๊ฐ๋ ์ด ํ์ํ ์ด์
ํ ๋๋ก ๋ฒํฐ๋ ์ ๋ต์ ๋ฌผ๋ฆฌ์ ํ๊ณ
API ์๋ต์ด ๋๋ ค์ง๋ฉด ๊ฐ์ฅ ๋จผ์ ๋ ์ค๋ฅด๋ ํด๊ฒฐ์ฑ ์ Vertical Scaling โ ์๋ฒ์ CPU, RAM, ๋์คํฌ๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๋ ๊ฒ์ด๋ค. ์ค์ ๋ก ๋๋ถ๋ถ์ ์๋น์ค๋ ์ด ๋ฐฉ๋ฒ์ผ๋ก ์ถฉ๋ถํ ์ค๋ ๋ฒํด๋ค. ํ์ง๋ง ์ด ์ ๋ต์๋ ์ฒ์ฅ์ด ์๋ค.
์๋ฒ 1๋์ ๋ฌผ๋ฆฌ์ ํ๊ณ:
- RAM: ์ต๋ ์ TB (๋น์ฉ ๊ธ์ฆ)
- ๋์คํฌ I/O: SSD๋ ์ด๋น ์ฒ๋ฆฌ๋์ ์ํ์ ์กด์ฌ
- CPU: ์ฝ์ด ์ ๋๋ ค๋ DB ์ฟผ๋ฆฌ๋ ๋ณ๋ ฌํ์ ํ๊ณ
- ๋น์ฉ: 2๋ฐฐ ์ฑ๋ฅ โ 2๋ฐฐ ๊ฐ๊ฒฉ, ๊ธฐํ๊ธ์์ ์ผ๋ก ๋น์ธ์ง
์๋ฅผ ๋ค์ด, users ํ
์ด๋ธ์ด 1์ต ๊ฑด์ด๊ณ SELECT * FROM users WHERE name = 'ํ๊ธธ๋'์ ์คํํ๋ค๊ณ ํ์. ์ธ๋ฑ์ค๊ฐ ์์ด๋ 1์ต ๊ฑด์ ์ธ๋ฑ์ค ํธ๋ฆฌ๋ฅผ ํ์ํด์ผ ํ๋ค. ์ด ํ
์ด๋ธ์ ์๋ณ 12๊ฐ ํํฐ์
์ผ๋ก ๋๋๋ฉด, WHERE created_at = '2025-01' ์กฐ๊ฑด์ด ํจ๊ป ์์ ๋ 833๋ง ๊ฑด๋ง ํ์ํ๋ฉด ๋๋ค. ์๋ฒ๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ๋ 12๋ฐฐ ๋นจ๋ผ์ง๋ ์
์ด๋ค.
ํ ๋๋ก ๋ชป ๋ฒํฐ๋ ์๊ฐ์ด ์ค๋ ์ด์
๋ฌธ์ ๋ ๋ฐ์ดํฐ๊ฐ ์ ํ์ผ๋ก ๊ณ์ ์ฆ๊ฐํ๋ค๋ ์ ์ด๋ค. ์ค๋ 1์ต ๊ฑด์ผ๋ก ์ถฉ๋ถํ ์๋ฒ๊ฐ ๋ด๋ ์๋ 3์ต ๊ฑด์ ๊ฐ๋นํด์ผ ํ๋ค. ์๋ฒ ์ ๊ทธ๋ ์ด๋ ๋น์ฉ์ ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ์ง๋ง, ์ค๋ฉ์ ์ ๋ ดํ ์๋ฒ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ผ๋ก ๊ฑฐ์ ์ ํ์ ์ผ๋ก ํ์ฅํ ์ ์๋ค.
flowchart LR subgraph Vertical["Vertical Scaling (ํ ๋ ๊ฐํ)"] direction TB V1["1์ต ๊ฑด: ์ 100๋ง ์"] --> V2["3์ต ๊ฑด: ์ 500๋ง ์"] V2 --> V3["10์ต ๊ฑด: ์ 3,000๋ง ์"] V3 --> V4["30์ต ๊ฑด: ???<br/>๋ฌผ๋ฆฌ์ ํ๊ณ"] end subgraph Horizontal["Horizontal Scaling (์ค๋ฉ)"] direction TB H1["1์ต ๊ฑด: ์๋ฒ 1๋<br/>์ 100๋ง ์"] --> H2["3์ต ๊ฑด: ์๋ฒ 3๋<br/>์ 300๋ง ์"] H2 --> H3["10์ต ๊ฑด: ์๋ฒ 10๋<br/>์ 1,000๋ง ์"] H3 --> H4["30์ต ๊ฑด: ์๋ฒ 30๋<br/>์ 3,000๋ง ์"] end
์ฑ๋ฅ ๋ง๊ณ ๋ ํ ๋๊ฐ ์ํํ ์ด์
์๋ฒ๊ฐ ํ ๋๋ฉด, ๊ทธ ํ ๋๊ฐ ์ฃฝ์ผ๋ฉด ์๋น์ค ์ ์ฒด๊ฐ ๋ฉ์ถ๋ค. ์ค๋ฉ๋ ํ๊ฒฝ์์๋ Shard 2๊ฐ ์ฃฝ์ด๋ Shard 1, 3์ ์ ์ ๋ ์ ์์ ์ผ๋ก ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๋ค. ํด๋ผ์ด์ธํธ ์ฑ์์ โ์ผ๋ถ ๊ธฐ๋ฅ์ด ์ผ์์ ์ผ๋ก ์ ํ๋ฉ๋๋คโ๋ผ๋ ๋ถ๋ถ ์ฅ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋ ๊ฒ์ด๋ค.
์ ๋ฆฌ: ๋จ๊ณ์ ์ ๊ทผ
๋๋ถ๋ถ์ ์๋น์ค๋ ์ด ์์๋ก ์งํ๋๋ค:
- ์ธ๋ฑ์ค ์ต์ ํ โ ์ฟผ๋ฆฌ ์์ฒด๋ฅผ ๋น ๋ฅด๊ฒ (๊ฐ์ฅ ๋จผ์ , ๊ฐ์ฅ ์ ๋ ด)
- Vertical Scaling โ ์๋ฒ ์คํ ์ ๊ทธ๋ ์ด๋ (๊ฐ๋จํ์ง๋ง ๋น์ฉ ์ฆ๊ฐ)
- ํํฐ์ ๋ โ ํ ์๋ฒ ์์์ ํ ์ด๋ธ ๋ถํ (์ด์ ๋ณต์ก๋ ๋ฎ์)
- Replication โ ์ฝ๊ธฐ ์ ์ฉ ๋ณต์ ๋ณธ์ผ๋ก ์ฝ๊ธฐ ๋ถํ ๋ถ์ฐ
- ์ค๋ฉ โ ์ฌ๋ฌ ์๋ฒ์ ๋ฐ์ดํฐ ๋ถ์ฐ (์ตํ์ ์๋จ, ์ด์ ๋ณต์ก๋ ๋์)
์ค๋ฉ์ด ์ตํ์ ์๋จ์ธ ์ด์ ๋, ํ๋ฒ ๋์ ํ๋ฉด cross-shard JOIN, ๋ถ์ฐ ํธ๋์ญ์ , ๋ฐ์ดํฐ ์ฌ๋ฐฐ์น ๋ฑ ์ด์ ๋ณต์ก๋๊ฐ ๊ธ๊ฒฉํ ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค. โํ ์ ์๋ ํ ์ ํ๋ ๊ฒ ์ต์ ์ด์ง๋ง, ํด์ผ ํ ๋๋ ๋ฐ๋์ ํด์ผ ํ๋โ ๊ธฐ์ ์ด๋ค.
AS-IS
flowchart TD Client[ํด๋ผ์ด์ธํธ ์ฑ] --> API[API ์๋ฒ] API --> DB[(๋จ์ผ DB ์๋ฒ<br/>users ํ ์ด๋ธ: 1์ต ๊ฑด)] style DB fill:#ffcccc DB --> Problem["๋ฌธ์ :<br/>- SELECT ์ฟผ๋ฆฌ ์ ์ด ์์<br/>- ๋์คํฌ I/O ํฌํ<br/>- ๋ฐฑ์ ์ ๋ช ์๊ฐ<br/>- ์๋ฒ ํ ๋๊ฐ ์ฃฝ์ผ๋ฉด ์ ์ฒด ์ฅ์ "]
TO-BE (ํํฐ์ ๋)
flowchart TD Client[ํด๋ผ์ด์ธํธ ์ฑ] --> API[API ์๋ฒ] API --> DB[(DB ์๋ฒ 1๋)] DB --> P1[users_2024<br/>3์ฒ๋ง ๊ฑด] DB --> P2[users_2025<br/>4์ฒ๋ง ๊ฑด] DB --> P3[users_2026<br/>3์ฒ๋ง ๊ฑด] style DB fill:#ccffcc Note["ํ ์๋ฒ ์์์ ํ ์ด๋ธ๋ง ๋ถํ <br/>โ ์ฟผ๋ฆฌ ์ ํ์ํ ํํฐ์ ๋ง ์ค์บ"]
TO-BE (์ค๋ฉ)
flowchart TD Client[ํด๋ผ์ด์ธํธ ์ฑ] --> API[API ์๋ฒ / Router] API --> S1[(Shard 1<br/>์๋ฒ A<br/>user_id 1~33M)] API --> S2[(Shard 2<br/>์๋ฒ B<br/>user_id 33M~66M)] API --> S3[(Shard 3<br/>์๋ฒ C<br/>user_id 66M~100M)] style S1 fill:#cce5ff style S2 fill:#cce5ff style S3 fill:#cce5ff Note["์ฌ๋ฌ ์๋ฒ์ ๋ฐ์ดํฐ ๋ถ์ฐ<br/>โ ์ฝ๊ธฐ/์ฐ๊ธฐ ๋ถํ๋ฅผ ๋๋"]
ํํฐ์ ๋ vs ์ค๋ฉ: ํต์ฌ ๋น๊ต
| ๊ตฌ๋ถ | ํํฐ์ ๋ (Partitioning) | ์ค๋ฉ (Sharding) |
|---|---|---|
| ๋ฐ์ดํฐ ์์น | ํ ์๋ฒ ์์์ ํ ์ด๋ธ ๋ถํ | ์ฌ๋ฌ ์๋ฒ์ ๋ฐ์ดํฐ ๋ถ์ฐ |
| ๋ชฉ์ | ์ฟผ๋ฆฌ ์ฑ๋ฅ ํฅ์, ๊ด๋ฆฌ ํธ์ | ์ํ ํ์ฅ(horizontal scaling) |
| ๋ณต์ก๋ | ์๋์ ์ผ๋ก ๋ฎ์ (DB๊ฐ ์์์ ๋ผ์ฐํ ) | ๋์ (๋ผ์ฐํฐ, ์ค๋ ํค ๊ด๋ฆฌ ํ์) |
| ์ฅ์ ์ํฅ | ์๋ฒ 1๋ ์ฃฝ์ผ๋ฉด ์ ์ฒด ์ํฅ | ์ผ๋ถ ์ค๋๋ง ์ํฅ (๋๋จธ์ง ์ ์) |
| JOIN | ํํฐ์ ๊ฐ JOIN ์์ ๋ก์ | ์ค๋ ๊ฐ JOIN ๋งค์ฐ ์ด๋ ต๊ฑฐ๋ ๋ถ๊ฐ |
| ํ์ฅ ํ๊ณ | ์๋ฒ 1๋์ ๋ฌผ๋ฆฌ์ ํ๊ณ | ์๋ฒ ์ถ๊ฐ๋ก ๊ฑฐ์ ๋ฌดํ ํ์ฅ |
ํํฐ์ ๋ 3๊ฐ์ง ๋ฐฉ๋ฒ
1. Range Partitioning (๋ฒ์ ๊ธฐ๋ฐ)
ํน์ ์ปฌ๋ผ์ ๊ฐ ๋ฒ์๋ก ๋๋๋ค. ์๊ณ์ด ๋ฐ์ดํฐ์ ๊ฐ์ฅ ์ ํฉ.
-- ๋ ์ง ๋ฒ์๋ก ํํฐ์
๋
CREATE TABLE orders (
order_id int,
order_date date,
amount int
) PARTITION BY RANGE (order_date);
-- 2025๋
1์ ํํฐ์
CREATE TABLE orders_2025_01 PARTITION OF orders
FOR VALUES FROM ('2025-01-01') TO ('2025-02-01');
-- 2025๋
2์ ํํฐ์
CREATE TABLE orders_2025_02 PARTITION OF orders
FOR VALUES FROM ('2025-02-01') TO ('2025-03-01');ํด๋ผ์ด์ธํธ ๊ด์ ์์ ๋ณด๋ฉด: SELECT * FROM orders WHERE order_date = '2025-01-15' ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ด๋ฉด, DB๊ฐ ์๋์ผ๋ก orders_2025_01 ํํฐ์
๋ง ์ค์บํ๋ค. ๋๋จธ์ง 11๊ฐ์์น ๋ฐ์ดํฐ๋ ์์ ๋ณด์ง ์๋๋ค. ์ด๊ฒ์ Partition Pruning์ด๋ผ ํ๋ค.
2. List Partitioning (๋ชฉ๋ก ๊ธฐ๋ฐ)
ํน์ ์ปฌ๋ผ์ ๊ฐ ๋ชฉ๋ก์ผ๋ก ๋๋๋ค. ์ง์ญ, ์นดํ ๊ณ ๋ฆฌ ๋ฑ ์ด์ฐ์ ์ธ ๊ฐ์ ์ ํฉ.
CREATE TABLE users (
user_id int,
country text,
name text
) PARTITION BY LIST (country);
CREATE TABLE users_kr PARTITION OF users
FOR VALUES IN ('KR');
CREATE TABLE users_us PARTITION OF users
FOR VALUES IN ('US');
CREATE TABLE users_jp PARTITION OF users
FOR VALUES IN ('JP');3. Hash Partitioning (ํด์ ๊ธฐ๋ฐ)
์ปฌ๋ผ ๊ฐ์ ํด์ ํจ์๋ฅผ ์ ์ฉํ์ฌ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐํ๋ค. ๋ฒ์๋ ๋ชฉ๋ก์ผ๋ก ๋๋๊ธฐ ์ด๋ ค์ธ ๋ ์ฌ์ฉ.
CREATE TABLE sessions (
session_id int,
user_id int,
data text
) PARTITION BY HASH (user_id);
-- 4๊ฐ๋ก ๊ท ๋ฑ ๋ถํ (modulus 4, remainder 0~3)
CREATE TABLE sessions_p0 PARTITION OF sessions
FOR VALUES WITH (MODULUS 4, REMAINDER 0);
CREATE TABLE sessions_p1 PARTITION OF sessions
FOR VALUES WITH (MODULUS 4, REMAINDER 1);
CREATE TABLE sessions_p2 PARTITION OF sessions
FOR VALUES WITH (MODULUS 4, REMAINDER 2);
CREATE TABLE sessions_p3 PARTITION OF sessions
FOR VALUES WITH (MODULUS 4, REMAINDER 3);์ค๋ฉ 3๊ฐ์ง ๋ฐฉ๋ฒ
1. Range-Based Sharding (๋ฒ์ ๊ธฐ๋ฐ)
ํํฐ์ ๋์ Range์ ๊ฐ์ ์๋ฆฌ์ด์ง๋ง, ๊ฐ ๋ฒ์๊ฐ ๋ค๋ฅธ ์๋ฒ์ ์ ์ฅ๋๋ค.
Shard 1 (์๋ฒ A): user_id 1 ~ 1,000,000
Shard 2 (์๋ฒ B): user_id 1,000,001 ~ 2,000,000
Shard 3 (์๋ฒ C): user_id 2,000,001 ~ 3,000,000
๋จ์ : ์ ๊ท ๊ฐ์ ์๊ฐ ๊ณ์ Shard 3์๋ง ๋ชฐ๋ฆฌ๋ ํซ์คํ(hotspot) ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ.
2. Hash-Based Sharding (ํด์ ๊ธฐ๋ฐ)
Shard Key์ ํด์ ํจ์๋ฅผ ์ ์ฉํ์ฌ ์ด๋ ์๋ฒ์ ์ ์ฅํ ์ง ๊ฒฐ์ ํ๋ค.
shard_number = hash(user_id) % ์๋ฒ_์
์: hash(12345) % 3 = 1 โ Shard 2 (์๋ฒ B)
hash(67890) % 3 = 0 โ Shard 1 (์๋ฒ A)
์ฅ์ : ๋ฐ์ดํฐ๊ฐ ๊ท ๋ฑํ๊ฒ ๋ถ์ฐ๋จ. ๋จ์ : ์๋ฒ๋ฅผ ์ถ๊ฐํ ๋(๋ฆฌ์ค๋ฉ) ๋๋ถ๋ถ์ ๋ฐ์ดํฐ ์ฌ๋ฐฐ์น ํ์.
3. Directory-Based Sharding (๋๋ ํ ๋ฆฌ ๊ธฐ๋ฐ)
๋ณ๋์ lookup table๋ก โ์ด ๋ฐ์ดํฐ๋ ์ด๋ ์๋ฒ์?โ๋ฅผ ๊ด๋ฆฌํ๋ค.
Lookup Table:
โโโโโโโโโโโโฌโโโโโโโโโโ
โ user_id โ shard โ
โโโโโโโโโโโโผโโโโโโโโโโค
โ 12345 โ Shard 1 โ
โ 67890 โ Shard 2 โ
โ ... โ ... โ
โโโโโโโโโโโโดโโโโโโโโโโ
๊ฐ์ฅ ์ ์ฐํ์ง๋ง, lookup table ์์ฒด๊ฐ ๋จ์ผ ์ฅ์ ์ง์ (SPOF)์ด ๋ ์ ์๋ค.
Shard Key ์ ํ์ด ์ค์ํ ์ด์
Shard Key๋ โ์ด๋ค ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ๋๋ ๊ฒ์ธ๊ฐโ๋ฅผ ๊ฒฐ์ ํ๋ ์ปฌ๋ผ์ด๋ค. ์๋ชป ๊ณ ๋ฅด๋ฉด ํน์ ์๋ฒ์ ๋ถํ๊ฐ ๋ชฐ๋ฆฌ๋ ํซ์คํ์ด ๋ฐ์ํ๋ค.
์ข์ Shard Key์ ์กฐ๊ฑด 3๊ฐ์ง:
| ์กฐ๊ฑด | ์๋ฏธ | ๋์ ์ |
|---|---|---|
| ๋์ Cardinality | ๊ฐ๋ฅํ ๊ฐ์ ์ข ๋ฅ๊ฐ ๋ง์์ผ ํจ | gender (M/F ๋ ๊ฐ์ง๋ฟ) |
| ๊ท ๋ฑํ Frequency | ๊ฐ ๊ฐ์ ์ถํ ๋น๋๊ฐ ๋น์ทํด์ผ ํจ | country (ํ๊ตญ ์ ์ 90%๋ฉด ํ ์ค๋์ ๋ชฐ๋ฆผ) |
| ๋น๋จ์กฐ์ ๋ณํ | ์๊ฐ์ ๋ฐ๋ผ ํ ๋ฐฉํฅ์ผ๋ก ์ฆ๊ฐํ๋ฉด ์ ๋จ | created_at (์ต์ ์ค๋๋ง ๋จ๊ฑฐ์์ง) |
ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์๊ฐ ์ฒด๊ฐํ๋ ์ํฅ
์ค๋ฉ๋ DB๋ฅผ ์ฌ์ฉํ๋ ์๋น์ค์ API๋ฅผ ํธ์ถํ ๋, ํด๋ผ์ด์ธํธ ์ชฝ์์ ์์์ผ ํ ์ :
1. ์ ๋ ฌ/ํ์ด์ง๋ค์ด์ ์ด ๋๋ ค์ง ์ ์์
ํด๋ผ์ด์ธํธ: GET /users?sort=created_at&page=3
โ ์๋ฒ๋ ๋ชจ๋ ์ค๋์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ํฉ์น ํ ์ ๋ ฌํด์ผ ํจ
โ ๋จ์ผ DB๋ณด๋ค ์๋ต์ด ๋๋ฆด ์ ์์
2. Cross-Shard ์กฐํ์ ์ ์ฝ
ํด๋ผ์ด์ธํธ: GET /users/123/friends (user 123์ ์น๊ตฌ ๋ชฉ๋ก)
โ user 123์ Shard 1์ ์์ง๋ง
โ ์น๊ตฌ๋ค์ Shard 1, 2, 3์ ํฉ์ด์ ธ ์์
โ ์ฌ๋ฌ ์ค๋๋ฅผ ๋์์ ์กฐํํด์ผ ํจ (fan-out query)
โ ์๋ต ์ง์ฐ ๊ฐ๋ฅ
3. ์ผ๊ด์ฑ(Consistency) ์ด์
ํด๋ผ์ด์ธํธ: POST /transfer (A โ B ์ก๊ธ)
โ A์ ์์ก์ Shard 1, B์ ์์ก์ Shard 2
โ ๋ ์๋ฒ์ ๊ฑธ์น ํธ๋์ญ์
์ด ํ์ (๋ถ์ฐ ํธ๋์ญ์
)
โ ์คํจ ์ ๋ถ๋ถ๋ง ๋ฐ์๋ ์ ์์
โ ํด๋ผ์ด์ธํธ๋ "์ฒ๋ฆฌ ์ค" ์ํ๋ฅผ ๋ค๋ฃฐ ์ค๋น ํ์
4. ํน์ API๋ง ๋๋ฆฐ ์ด์
GET /user/123 โ Shard Key๋ก ๋ฐ๋ก ์ฐพ์ โ ๋น ๋ฆ (ms)
GET /users?name=ํ๊ธธ๋ โ ๋ชจ๋ ์ค๋ ์ค์บ ํ์ โ ๋๋ฆผ (์ด)
Shard Key๊ฐ ์๋ ์ปฌ๋ผ์ผ๋ก ๊ฒ์ํ๋ฉด, ๋ชจ๋ ์ค๋๋ฅผ ๋ค ๋ค์ ธ์ผ ํ๊ธฐ ๋๋ฌธ์ Scatter-Gather ํจํด์ด ๋์ด ๋๋ ค์ง๋ค.
์ธ์ ํํฐ์ ๋? ์ธ์ ์ค๋ฉ?
flowchart TD A{ํ ์ด๋ธ์ด ๋๋ฌด ํฐ๊ฐ?} -->|Yes| B{ํ ์๋ฒ๋ก ๊ฐ๋น ๊ฐ๋ฅ?} A -->|No| Z[ํ์ฌ ๊ตฌ์กฐ ์ ์ง] B -->|Yes| C[ํํฐ์ ๋์ผ๋ก ์ถฉ๋ถ] B -->|No| D{์ฝ๊ธฐ/์ฐ๊ธฐ ๋ถํ<br/>๋ถ์ฐ์ด ํ์ํ๊ฐ?} D -->|Yes| E[์ค๋ฉ ๋์ ] D -->|No| F[Replication์ผ๋ก<br/>์ฝ๊ธฐ ๋ถ์ฐ]
์ผ๋ฐ์ ์ผ๋ก ํํฐ์ ๋์ ๋จผ์ ์ ์ฉํ๊ณ , ๊ทธ๋๋ ํ๊ณ์ ๋๋ฌํ๋ฉด ์ค๋ฉ์ผ๋ก ํ์ฅํ๋ค. ์ค๋ฉ์ ์ด์ ๋ณต์ก๋๊ฐ ํฌ๊ฒ ์ฆ๊ฐํ๋ฏ๋ก ์ตํ์ ์๋จ์ ๊ฐ๊น๋ค.