๋ชฉ์ฐจ
- ์๋ก
- ์๋ณ์๋ ๋ฌด์์ธ๊ฐ
- ์๋ณ์์ ์ข
๋ฅ
- ์ ์ญ ์๋ณ์์ ์ง์ญ ์๋ณ์
- ์๋ณ์๋ ์ธ์ ์์ฑ๋๋๊ฐ?
- ๋น ๋ฅธ ์๋ณ์ ์์ฑ๊ณผ ๋ฆ์ ์๋ณ์ ์์ฑ
- ๋น ๋ฅธ ์๋ณ์: ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ์ฒด๊ฐ ์์ฑ๋ ๋
- ๋ฆ์ ์๋ณ์: ๊ฐ์ฒด๊ฐ ์์ํ ๋ ๋
- ๋น ๋ฅธ ์๋ณ์ ์์ฑ๊ณผ ๋ฆ์ ์๋ณ์ ์์ฑ
- 3๊ฐ์ง ์๋ณ์ ์์ฑ ๋ฐฉ๋ฒ
- db ์์ ์์ฑ
- application ์์ ์์ฑ
- ๋ค๋ฅธ aggregate ์์ ์์ฑ
์๋ก
์ง๋์๊ฐ entity ๋ ๋ฌด์์ธ๊ฐ์ ๋ํด์ ์ด์ผ๊ธฐ๋ฅผ ๋๋ด๋ค.
์ง๋ ์๊ฐ์ ์ด์ผ๊ธฐํ๋ entity ๋ฅผ ๋ค์ ์ ๋ฆฌํ์๋ฉด,
entity ๋ ํต์ฌ ๋๋ฉ์ธ ๋ชจ๋ธ์ค ํ๋๋ก ๋๋ฉ์ธ ๊ฐ์ฒด๊ฐ ์ฐ์์ฑ์ ๊ฐ์ง๊ธฐ ์ํด ์๋ณ์๋ฅผ ๋ถ์ฌ๋ฐ์ ์์์ฑ ์ฅ์น์ ์์ํ๊ฐ ๋๋ ๋์ ๊ฐ์ฒด์ด๋ค.
์ด๋ฒ์๋ ์๋ณ์์ ๋ํด์ ์ด์ผ๊ธฐ๋ฅผ ํด๋ณด๋ ค ํ๋ค.
์๋ณ์๋ ๋ฌด์์ธ๊ฐ, Identifier
์๋ณ์๋ ๊ฐ์ฒด๋ฅผ ์ ์ผํ๊ฒ ์๋ณํ ์ ์๋ ๊ณ ์ ํ ๊ฐ ๋๋ ์์ฑ์ด๋ค.
์๋ณ์๋ ๋๋ฉ์ธ ๊ฐ์ฒด๋ฅผ ์๋ณํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋๋ฐ, ์์ ์ด์ผ๊ธฐ์ฒ๋ผ ์๋ณํด์ผํ๋ ๋๋ฉ์ธ ๊ฐ์ฒด๋ ์ํฐํฐ์ด๋ค.
๊ฒฐ๊ตญ ์ํฐํฐ์ ๋ํ id ์ธ ์ ์ด๋ค.
์๋ณ์๋ ์ผ๋ฐ์ ์ผ๋ก Relation Database ์์ Primary Key
๋ผ๊ณ ๋ถ๋ฆฌ๊ณ document database ์์๋ Key
๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋๋ฐ, ์์์ฑ ์ฅ์น์ ์ ์ฅ๋ ๋๋ฉ์ธ ๊ฐ์ฒด๋ฅผ ๊บผ๋ด์ค๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ row ๊ณ ์ ๊ฐ๊ณผ ๋์ผํ๋ค.
์ผ๋ฐ์ ์ผ๋ก key ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋งค์ฐ ๋ณต์กํ๋ค
key ๋ฅผ ๋ง๋ค์ด๋ธ๋ค๋ ๊ฒ์ ์์คํ ์์ ๊ณ ์ ํ ๊ฐ์ ์์ฑํด๋ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ถฉ๋ ๋ด์ฑ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ํ๋ค.
๊ทธ๋์ ๋ณดํต์ ๊ฒฝ์ฐ key ์ ๊ธธ์ด๋ฅผ ๋๋ ค ์ถฉ๋์ ๊ฐ๋ฅ์ฑ์ ์ค์ด๊ธฐ ์ํ ํ๋ณด๊ตฐ์ ํ ๋๋ ค๋ฒ๋ฆฌ๊ธฐ๋ ํ๋ค.
9141 <- 2^14 ๊ฐ์ง ๊ฒฝ์ฐ์ ์
1924175127931237 <- ๋์ถฉ 2^49 ๊ฐ์ง์ ๊ฒฝ์ฐ์ ์
์ถฉ๋๋ด์ฑ ํน์ฑ์ ๋ง์กฑํด๋ด๊ธฐ ์ํด์๋ ๋จ์ํ๊ฒ ๋์๋ฉด ๋ ๊น? ๊ทธ๋ ์ง ์์ ์๋ ์๋ค.
์ผ๋ฐ์ ์ธ ์ฃผ๋ฌธ ๋๋ฉ์ธ์์๋ id ๋ก ์ํตํ๋ ์ผ์ด์ค์ ์ดํด๊ด๊ณ์๋ค์ด ๋ง์ด ์๊ธฐ ๋๋ฌธ์ uuid ๋ guid ๊ฐ์ ๋ณต์กํ ๊ฐ๋ณด๋ค human readable ํ ๊ฐ์ด ํ์ํ๋ค.
โ 1c0db7f4-1e1e-4d0f-9c7c-f7fc0a486db2
โ
ORD-20230701-991572
๋ํ ๋๋ถ๋ถ์ ์ฐ๋ฆฌ๊ฐ ๊ฐ๋ฐํ๋ ํ๊ฒฝ์ multiple computing engine ์ผ๋ก ๊ตฌ์ฑ๋๊ธฐ ๋๋ฌธ์ ๋์์ฑ์ ๋ํด์ ์์ ํ๋๋ก ๊ณ ๋ ค๊ฐ ๋์ด์ผ ํ๋ค.
๋ํ key ๋ ๋ณด์์ ์ธก๋ฉด์์๋ ๊ณ ๋ ค๋์ด์ผ ํ๋ค.
์ด๋ค ๋๋ฉ์ธ์์๋ key ์์ฒด๊ฐ ์ ์ถ๊ฐ ๊ฐ๋ฅํ๋ฉด ์๋ ์ ์๋ค.
key ๊ฐ ์๋ ์ฆ๋ถ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค๋ฉด ํน์ key ๋ฅผ ์ ์ถํ ์ ์๋ ๋จ์๊ฐ ๋ ์ ์๊ณ , ์๋น์ค์ ์ด์ฉ์์ ์ฌ์ด์ฆ๋ ํน์ ๋น์ฆ๋์ค์ ์ฌ์ด์ฆ๊ฐ ์ ์ถ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
A ํ์ฌ์ ์ฃผ๋ฌธ id ๋ฅผ ์ฆ๋ถ์ผ๋ก ์ฌ์ฉํ๋ค๋ฉด B ํ์ฌ ์ ๋ตํ์์ A ํ์ฌ์ ์ต๊ทผ ์ฃผ๋ฌธ id ๋ฅผ ํตํด ์๋น์ค ์ด์ฉ์๊ฐ ํ๋ฃจ๋์ ์ผ๋ง๋ ์ฃผ๋ฌธ์ ํ๋์ง ์ฝ๊ฒ ์์ธกํ ์ ์์ ๊ฒ์ด๋ค.
์๋ณ์์ ์ข ๋ฅ
์๋ณ์์๋ ์ข ๋ฅ๊ฐ ์๋๋ฐ, ์๋ณ์ ํด์ผํ๋ ์ํฉ์ ๋ฐ๋ผ์ ์๋ณ์์ ์ข ๋ฅ๊ฐ ๋ฌ๋ผ์ง๋ค.
- ์ ์ญ ์๋ณ์
- ์ง์ญ ์๋ณ์
์ ์ญ ์๋ณ์
์ ์ญ ์๋ณ์๋ ์์คํ ์์ ๊ณ ์ ํ๊ฒ ์๋ณ๋์ด์ผ ํ๋ ๋์๋ค์๊ฒ ๋ถ์ฌํ๋ ์๋ณ๊ฐ์ด๋ค.
์ ์ญ ์๋ณ์๋ ์ค๋ณต๊ณผ ์ถฉ๋ ๊ทธ๋ฆฌ๊ณ ๋ณด์์ ์์๋ฅผ ๋ค๋ฐฉ๋ฉด์ผ๋ก ๊ณ ๋ คํด์ผํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ ์ญ์๋ณ์๋ ๋๋ฉ์ธ ํน์ ํ ์ด๋ธ ๋ด์์๋ง ์๋ณ์ฑ์ ๊ฐ์ง๋๊ฒ์ด ์๋๋ผ ์ ์ฒด์ ์ธ ๋ถ์ฐ ์์คํ ๋ ๋ฒจ์์ ์๋ณ์ฑ์ ์๊ตฌํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
์ง์ญ ์๋ณ์
๋ฐ๋ฉด์ ์ง์ญ์๋ณ์๋ ์์คํ ์ ์ญ์์ ์๋ณ์ฑ์ ๊ฐ์ง ํ์๋ ์์ง๋ง, ํน์ ๋ฐ์ดํฐ ๋ด๋ถ์์๋ง ์๋ณ์ฑ์ ๊ฐ์ง๋ฉด ๋๋ค.
๋น๊ต์ ์ ์ญ์๋ณ์๋ณด๋ค ๋ ์ ์ ๋ ธ๋ ฅ์ผ๋ก ์๋ณ๊ฐ์ ์์ฑํด๋ผ ์ ์๊ณ ๊ทธ ํ๋ณด๊ตฐ ์์ฒด๋ ์ ๊ธฐ ๋๋ฌธ์ ์ถฉ๋์ ๋น๊ต์ ์์ ํ๋ค.
๋์ ๋ฐ๋ผ์๋ ์ง์ญ ์๋ณ์์๊ฒ ์ปฌ๋ ์ ์ ์ธ๋ฑ์ค ํน์ ๋์๊ฐ ์๋ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ ๊ฐ์ ํ ๋นํ๊ธฐ๋ ํ๋ค.
์๋์ ๊ทธ๋ฆผ์ ์ ์ญ ์๋ณ์์ ์ง์ญ ์๋ณ์๋ฅผ ๋ํ๋ด๋ ๊ทธ๋ฆผ์ด๋ค.
๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๋ง๋ ์๋์ฐจ์ ๋ชจ์ต์ด๋ผ๊ณ ์๊ฐํ๋ฉด, Car ์ํฐํฐ๋ ์์คํ ์ ์ญ์ ์ผ๋ก ์๋ณ์ด ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ ์ญ ์๋ณ์๋ฅผ ๊ฐ์ง๋ง, ๋ฐํด(Wheel) ๋ ์, ๋ค, ์ข, ์ฐ๋ง ์๋ณ๋๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ง์ญ ์๋ณ์๋ฅผ ๊ฐ๋๋ค.
์๋ณ์๋ ์ธ์ ์์ฑ๋๋๊ฐ?
์๋ณ์๋ ์ธ์ ์์ฑ๋์ด ์ํฐํฐ์๊ฒ ํ ๋น๋๋๋? ์ ๋ฐ๋ผ์ 2๊ฐ์ง๋ก ๊ตฌ๋ถ๋ ์ ์๋ค.
- Entity ๊ฐ ์์ฑ๋ ํ
- Entity ๊ฐ ์์ฑ๋๊ธฐ ์
์ด๋ ๊ฒ Entity ์ ์์ฑ์ ๊ธฐ์ค์ผ๋ก ์์ ์ ๋ฐ๋ผ์ ๋น ๋ฅธ ์๋ณ์ ํ ๋น๋ฒ ๊ณผ ๋ฆ์ ์๋ณ์ ํ ๋น๋ฒ ์ผ๋ก ๋๋๋ค
Entity ๊ฐ ์์ฑ๋ ํ ์๋ณ์๋ฅผ ์์ฑ, ๋ฆ์ ์๋ณ์ ์์ฑ
๋ง ๊ทธ๋๋ก ์๋ณ์๋ฅผ Entity ๊ฐ ์์ฑ๋ ํ ์์ฑ & ํ ๋นํ๋ ๊ฒ์ด๋ค.
์ด ๋ฐฉ๋ฒ์ ์ผ๋ฐ์ ์ผ๋ก Database ์ id ์์ฑ ์์์ ์ด์ฉํ ๊ตฌํ์ด ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๋ค.
๋ค์๊ณผ ๊ฐ์ด MySQL ์์ AUTO_INCREMENT๋ก ์ฐ์ ์ฆ๋ถ ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์๋ค.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
);
์์ key ์์ฑ์ด ๋ณต์กํ๋ค๊ณ ์ด์ผ๊ธฐ ํ๋๋ฐ, ๊ทธ ๋ณต์กํ ๊ณผ์ ์ database ์ ๊ธฐ์ ๋ก ํด๊ฒฐํ๋ค.
database ์ ์์ ์ฑ๋ง ๋ณด์ฅ๋๋ค๋ฉด ๋ด๋ถ์ ์ผ๋ก thread-safe & concurrent safe ํ id ๋ฅผ ์ฆ๋ถํ์ฌ ๋ฐ๊ธํ๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ id ๋ฅผ ์์ฑํ ์ ์๋ค
ํ์ง๋ง ๋ฌธ์ ๋ ๋๋ฉ์ธ ์ด๋ฒคํธ์์ ๋ฐ์๋๋ค.
๋๋ฉ์ธ ์ด๋ฒคํธ๋ ๋๋ฉ์ธ์์ ๋ฐ์ํ ๋น์ฆ๋์ค์ ์ผ๋ก ์๋ฏธ์๋ ์ผ์ข ์ ์ฌ๊ฑด์ด๋ค. ๋๋ฉ์ธ๊ฐ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํด ์ฌ์ฉ๋๋๋ฐ, ์ด๋ DDD ์์ ๋งค์ฐ ์ค์ํ ์ผ์ ํ๊ธฐ ๋๋ฌธ์ ์ถํ ๊น๊ฒ ์ค๋ช ํ๋๋ก ํ๊ฒ ๋ค.
๋๋ถ๋ถ์ ์ํฐํฐ๋ ์์ฑ๋จ ์ด๋ผ๋ ์ด๋ฒคํธ๊ฐ ์ค์ํ ์ญํ ์ ์ํํ๋ค.
ํ์ง๋ง domain event ๊ฐ ๋ฐํ๋๋ ์์ ์๋ ์ฆ, ๋๋ฉ์ธ ํต์ฌ ์ํฐํฐ๊ฐ ์์ฑ๋ ์์ ์๋ database ์ ์ ๊ทผํ๊ธฐ ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ฆ์ ์๋ณ์ ํ ๋น์ผ๋ก domain entity ์ id ๋ฅผ ์ ์ ์๋ค.
Spring Data ์ Spring Events ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆ์ ์๋ณ์ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋๋ผ๋ ์์ฑ๋จ์ ๋ํ domain event ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ, (์ด๋ ์ญ์ ์ถํ ๋ค๋ฃจ๊ธฐ๋ก ํ๊ฒ ๋ค.)
Spring Data ์ Spring Events ๋ฅผ ํ์ฉํ๋ค๊ณ ํ๋๋ผ๋ id ์์ฑ์ ์ฃผ์ฒด๊ฐ ๋ชจ๋ DB ์ ์์กด์ ์ด๋ค๋ ๋ฌธ์ ๊ฐ ์๋ค.
๋๋ค๋ฅธ ๋ฌธ์ ๋ ์ ์ผ ์๋ณ์๊ฐ ์๋ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์ด ๋ฐฉ๋ฒ์ ์ผ๋ฐ์ ์ผ๋ก call ๋ง๋ค shared counter
๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด ๋๋ถ๋ถ์ด๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๋
๋ฆฝ๋ ์๋ฒ์์ ๋์ผํ id ๋ฅผ ์์ฑํ ์๋ ์๋ค
Entity ๊ฐ ์์ฑ๋๊ธฐ ์ ์๋ณ์๋ฅผ ์์ฑ, ๋น ๋ฅธ ์๋ณ์ ์์ฑ
์๋ณ์๋ฅผ ์์ฑํ๋ ๋๋ฒ์งธ ๋ฐฉ๋ฒ์ ๋ฐ๋ก ๋น ๋ฅธ ์๋ณ์ ์์ฑ์ด๋ค.
์์ ๋ฌธ์ ์ํฉ์ ํด๊ฒฐํ ์ ์๋ ํ๊ฐ์ง ํด๊ฒฐ๋ฐฉ๋ฒ์ผ๋ก, ์๋ณ์ ์์ฒด๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํด์ entity ๋ฅผ ์์ฑํ๋ ์์ฑ์ ๋ฉ์๋์ ์ธ์๋ก ๋๊ธฐ๋ ๋ฐฉ๋ฒ์ด๋ค.
public class User {
// id ๋ฅผ ์ธ๋ถ์์ ์์ฑํด์ ์ ๋ฌ
public static User newInstance(long id, String username) {
return new User(id, username);
}
private final long id; // invariant
private final String username;
// ...
}
์ด๋ ๊ฒ ๋๋ฉด entity ์ ์ ์ฅ์์๋ id ์์ฑ ์ฃผ์ฒด๊ฐ ๋๊ฐ ๋๋ ์๊ด ์์ด ์ผ๊ด๋๊ฒ ๋์๋ ์ ์๋ค.
์ด ๋ฐฉ๋ฒ์ DB ์ ์์กด์ ์ผ ์๋ ์๊ณ ๊ทธ๋ ์ง ์์ ์๋ ์์ง๋ง ํต์ฌ์ application ๋ด์์ id ๋ฅผ ์ธ์ ๋ ์ง ์์ฑํ ์ ์๋ค๋ ๊ฒ์ ์๋ค.
domain-event ์ ๋ํด์๋ ์์ ํ๊ณ , ์ธ๋ถ ํตํฉ์ ์ํ message ์ id ๋ฅผ ์์ฑํ ๋๋ ์ฌ์ฉ๋ ์ ์๋ค.
์ด ๋ฐฉ๋ฒ์ ๊ฐ์ธ์ ์ผ๋ก ๋๋ฉ์ธ์์ ์ค์ํ ์ญํ ์ ์ํํ๋ ์๋ณ์๊ฐ ํน์ ๊ธฐ์ ์ ์์กดํ์ง ์๊ฒ ๋ง๋ค ์ ์๊ณ ์๋ณ์ ์์ฑ์ ๋ํด ๊ฐ์์ ์ด๊ณ ํต์ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ธ์ ์ผ๋ก ๊ฐ์ฅ ์ ํธํ๋ ๋ฐฉ์์ด๋ค.
์ด ๋น ๋ฅธ ์๋ณ์ ํ ๋น๋ฒ์ ๊ตฌํ๋ฒ์ด ๋ค์ํ๋ฐ, ์๋์์ ๋ํ์ ์ธ ๊ตฌํ๋ฒ 3๊ฐ์ง๋ฅผ ์์๋ณด๋๋ก ํ์
์ ๋ฆฌ
- ์๋ณ์ ์์ฑ์ entity ์ ์์ฑ ์ ๊ณผ ํ์ ๋ฐ๋ผ ๋๋๋ค.
- entity ์์ฑ ์ : ๋น ๋ฅธ ์๋ณ์ ์์ฑ
- entity ์์ฑ ํ: ๋๋ฆฐ ์๋ณ์ ์์ฑ
- ๋๋ฆฐ ์๋ณ์ ์์ฑ
- ๋ณต์กํ ์๋ณ์ ์์ฑ์ ์ฑ ์์ ์ธ๋ถ์ ๋์์ ๋ฐ์ ์ฝ๊ฒ ํด๊ฒฐํ๋ค
- ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์กด์ ์ด๋ค.
- domain event ๋ ์ธ๋ถ ์์คํ ํตํฉ์ ์ ํ์ ์ด๋ค
- ๋ถ์ฐํ๊ฒฝ์์ ์ ์ผ ์๋ณ์๋ฅผ ์์ฑํ์ง ๋ชปํ ์ ์๋ค.
- ๋น ๋ฅธ ์๋ณ์ ์์ฑ
- ํน์ ๊ธฐ์ ์ด๋ ๊ตฌํ์ ์์กด์ ์ด์ง ์์ ์ ์๋ค.
- ์๋ณ์ ์์ฑ์ ์ ์ดํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๋ด์ ์๋ณ์ ์์ฑ ๋ฐฉ๋ฒ์ด ํต์ผ๋ ์ ์๋ค.
- ๋ณต์กํ ์๋ณ์ ์์ฑ์ ์ฑ ์์ ๊ฐ๋ดํด์ผ ํ๋ค
์๋ณ์๋ฅผ ์์ฑํ๋ ๋ค์ํ ๋ฐฉ๋ฒ
์ผ๋จ ๋น ๋ฅธ ์๋ณ์ ์์ฑ์ ์ ํํ๋ค๋ฉด ์๋ณ์๋ฅผ ์์ฑํ๋ ์ฑ ์์ ์ฐ๋ฆฌ๊ฐ ์ง์ ๊ด๋ฆฌํด์ผํ๋ค.
๋ช๊ฐ์ง ๋ฐฉ๋ฒ์๋ ์ญ์ ๋ณต์กํ id ์์ฑ์ ๋์ ํด์ฃผ๋ ์ธ๋ถ์ ๋์์ ๋ฐ์ ํด๊ฒฐํ ์๋ ์๋ค.
์๋ณ์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ 3๊ฐ์ง ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๋๋ก ํ์
- DB ์์ ์๋ณ์๋ฅผ ์์ฑ
- Application ๋ด์์ ์๋ณ์๋ฅผ ์์ฑ
- ์๋ณ์๋ฅผ ์์ฑํ๋ ์ฑ ์์ด ์๋ ๋ค๋ฅธ Bounded Context ์์ ์๋ณ์๋ฅผ ์์ฑ
DB ์์ ์๋ณ์๋ฅผ ์์ฑ
๊ฐ์ฅ ์ฝ๊ฒ ์๋ณ์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ผ๋ก Database ์ ๊ธฐ์ ์ ์ด์ฉํ๋ ๊ฒ์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ AUTO_INCREMENT ํ ์ด๋ธ์ ์ด์ฉํ์ฌ id ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด๋ฏ๋ก ์์ฑ ์ฃผ์ฒด๊ฐ DB ์ด๊ธฐ ๋๋ฌธ์ ๋๋ฆฐ ์๋ณ์ ์์ฑ๋ฒ์์๋ ์ฌ์ฉ๋ ์ ์๋ค.
Application ๋ด์์ ์๋ณ์๋ฅผ ์์ฑ
์ด ๋ฐฉ๋ฒ์ ๊ฐ์ฅ ๋ช ์์ ์ด๊ณ ๊ฐ์์ ์ธ ๋ฐฉ๋ฒ์ด๋ค.
Application ๋ด์์ ์๋ณ์๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค.
๋ํ์ ์ผ๋ก๋ EpochTimeBased Id, UUID ๋ GUID ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋๋ฐ, ์ด ๋ฐฉ๋ฒ๋ ๋ฌธ์ ๊ฐ ์กด์ฌํ๋ค.
- Id ์์ฑ์ ๋ณต์ก์ฑ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ฐ๋นํด์ผ ํ๋ค
- ๋ถ์ฐํ๊ฒฝ์์ ์์ฃผ ์ ์ผํ ์๋ณ์๋ฅผ ์์ฑํ๊ธฐ ์ด๋ ต๋ค
์๋ณ์ ์์ฑ์ ์ํ Bounded Context ์์ ์๋ณ์๋ฅผ ์์ฑ
์ค์ง ์๋ณ์ ์์ฑ์๋ง ๊ด์ฌ์ด ์๋ Bounded Context ๋ฅผ ๋ง๋ค๊ณ , ํด๋น BC ์์ id ๋ฅผ ํ๋ํ๋ ๋ฐฉ๋ฒ์ด๋ค
์๋ณ์ ์์ฑ ๋ฐฉ๋ฒ์ BC ๋ด๋ถ๋ก ์บก์ํ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ ํ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค.
์ด ๋ฐฉ๋ฒ์ ๋ถ์ฐํ๊ฒฝ์ ์ด์ ์ด ๋ง์ถฐ์ ธ ์๋ค.
๋ถ์ฐ ํ๊ฒฝ์์ ๋ง์ ๋ ๋ฆฝ๋ ์๋ฒ๋ค ์ฌ์ด์์ ์ ์ผํ id ์์ฑ์ ์ํด์ id ์์ฑ ์ฃผ์ฒด๋ฅผ ํต์ผ์์ผ ์ค๋ณต์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ํ์ ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ด ์๋ค.
- MySQL Centralizing Auto-Increment
- MySQL Cluster Mode
- MongoDB id generation
- Twitter Snowflake Id Generator
- Baidu UID generator
- Sonyflake Id Generator
์ ๋ฐฉ๋ฒ์ ๋ํด์ ํน์ง๊ณผ ์ฅ๋จ์ ์ ๋ํด์ ๋ถ์ฐํ๊ฒฝ์์ 7๊ฐ์ง ์ ์ผ id ์์ฑ๋ฒ ๋น๊ต ๋ฆฌ๋ทฐ ์์ ์ ๋ฆฌํด๋์๋ค.
๋ํ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค๋ฉด id ์์ฒด์๋ ์๋ฏธ์๋ ๋น์ฆ๋์ค ๊ท์น์ ์ถ๊ฐ์ํฌ ์ ์๋ค.
๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด๋, ์ด ๋ฐฉ๋ฒ์ ์ ํํ๊ธฐ ์ํด์๋ ๋งค์ฐ ์ ์ค์ ์ ์ค์ ๊ฐํด์ผ ํ๋ค.
์ด ๋ฐฉ๋ฒ์ ์๋ก ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ํ๊ฒฝ์ด๊ธฐ์ ๋คํธ์ํฌ ํต์ ์ด ์ผ๋ฐ์ ์ผ๋ก ํ์ํ๋ค.
๊ทธ๋ ๋ค๋ฉด ID ์์ฑ ์๋ฒ ์์ฒด๋ ์๋ฒฝํ Single Point of Failure ์ด๋ฏ๋ก ๋งค์ฐ ๊ฐํ๊ฒ HA ๊ตฌ์ฑ์ ํด์ผ๊ฑฐ๋ ์๋ง์ ์๋ฒ๋ค ์ฌ์ด์ Id ์์ฑ์ ๋ํ Orchestration ์ด ํ์ํ๋ค.
์ ๋ฆฌ
- id ์์ฑ ๋ฐฉ๋ฒ์ ํฌ๊ฒ 3๊ฐ์ง๊ฐ ์กด์ฌํจ
- DB ์์ id ์์ฑ
- application ๋ด์์ id ์์ฑ
- id ์์ฑ์ ์ํ Bounded Context ์์ ์์ฑ
- DB ์์ id ์์ฑ
- ์ฅ์
- ๊ตฌํ์ด ๊ฐ๋จํ๋ค
- ๋จ์
- DB ์์กด์ ์ด๋ค
- ๋ถ์ฐํ๊ฒฝ์ ์ ์ผํ ์๋ณ์๋ฅผ ์์ฑํ์ง ๋ชปํ ์ ์๋ค.
- ์ฅ์
- application ๋ด์์ id ์์ฑ
- ์ฅ์
- id ์์ฑ ๋ฐฉ๋ฒ์ ์ ์ดํ ์ ์๋ค
- ๋จ์
- id ์์ฑ์ ๋ณต์ก์ฑ์ ๊ฐ๋นํด์ผํ๋ค
- ๋ถ์ฐํ๊ฒฝ์ ์ ์ผํ ์๋ณ์๋ฅผ ์์ฑํ์ง ๋ชปํ ์ ์๋ค.
- ์ฅ์
- id ์์ฑ์ ์ํ Bounded Context ์์ ์์ฑ
- ์ฅ์
- ๋ถ์ฐ ํ๊ฒฝ์์๋ ์์ ํ ๋ฐฉ๋ฒ์ด๋ค
- id ์์ฑ ๋ฐฉ๋ฒ์ ์ ์ดํ ์ ์๋ค
- ๋จ์
- SPOF ์ด๋ค.
- ๊ด๋ฆฌ ํฌ์ธํธ๊ฐ ์ฆ๊ฐํ๋ค
- ์ฅ์
๋ง์น๋ฉฐ
์์์ Entity ๊ฐ ์์ฑ๋๊ธฐ ์ ๊ณผ ํ๋ก ์๋ณ์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด์๊ณ , ์๋ณ์ ์์ฒด๋ฅผ ์ด๋ป๊ฒ ์์ฑํ๋์ง์ ๋ํด์๋ ์ฌ๋ฌ ์ ํ์ง๋ฅผ ์์๋ณด์๋ค.
์ด๋ฒ ๋ด์ฉ์ DDD ์์ฒด์๋ ์กฐ๊ธ ๋จผ ๋ด์ฉ์ผ ์ ์์ง๋ง ์๋ณ์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋งค์ฐ ์ค์ํ๋ค.
๋๋ DB AI ๋ UUID ๋ฅผ ์ฌ์ฉํด์ ํน์ Twitter ๋ Baidu IdGenerator ๋ฅผ ์ด์ฉํด ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ์๋ณ์๋ฅผ ์์ฑํ๋ ์ ๋, id generation ์ ์ํ Bounded Context ๋ฅผ ๊ตฌํํ ์ ๋ ์๋ค.
๊ฒฐ๊ตญ์ 3๊ฐ์ง ๋ฐฉ๋ฒ ๋ชจ๋ ๋ฌธ์ ์ ์ ๋ด์ฐฉํ๋ ๊ฒฝํ์ด ๋ง์๋ฐ, ๊ทธ๋งํผ ์๋ณ์ ์์ฑ์ ์ฝ์ง ์์ ์ฃผ์ ์ด๋ค.
๊ฐ๊ฐ์ ํด๋ฒ์ด ๊ฐ์ง ๊ฐ์ , ๋จ์ ๊ทธ๋ฆฌ๊ณ ๋ณต์ก์ฑ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ํฉ์ ์๋ง์ ๋ฐฉ๋ฒ์ ์ ํํ๋๋ฐ ์๊ฐ์ ์์์ผ ํ๋ค.
์๋ณ์ ์์ฑ์ ๋ค๋ฅธ ์ฌ๋ฌ ์ํํธ์จ์ด ๋ฐฉ๋ฒ๋ก ๊ณผ ๋์ผํ๊ฒ ํ๊ฐ์ง master key ๊ฐ ์กด์ฌํ์ง ์๋๋ค.
๊ฐ๊ฐ์ ์ํฉ์ ์ ๋ถ์ํ๊ณ ์ ํํ ํด๊ฒฐ์ฑ ์ ์ฐพ๋๋ฐ ๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ๋ค
'๐ฌweb application > - DDD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DDD ์ aggregate ์ ๋ํ ์ด์ผ๊ธฐ (1) | 2024.04.10 |
---|---|
[DDD] Value Object ์ ๋ํ ์ฌ๋ฌ ์ด์ผ๊ธฐ (0) | 2023.07.23 |
[DDD] Entity ์ ๋ํ ์ฌ๋ฌ ์ด์ผ๊ธฐ (0) | 2023.07.15 |
Repository Pattern - ์ค์ ํธ (Spring ์์ DIP ๋ฅผ ํตํด Repository ์ ์ ์ธ๊ณผ ๊ตฌํ ๋ถ๋ฆฌ์ํค๊ธฐ) (6) | 2022.08.28 |
[DDD] Repository Pattern ์ด๋, ์ด๋ก ํธ (0) | 2022.08.23 |
๋๊ธ