Ver3.0 ๐ ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ ์๋ํ ๋๊ตฌ ํ์ฉ ๋ฐฉ๋ฒ

๐ ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ ์๋ํ ๋๊ตฌ ํ์ฉ ๋ฐฉ๋ฒ
๋ณต์กํ ๋ฐ์ดํฐ ์ด์ ์์ , ์ด์ ์๋ํ๋ก ์ฝ๊ณ ์์ ํ๊ฒ! ๐พโจ
์์ฆ ์๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด์ ์ด๋ ์์คํ ์ ๊ทธ๋ ์ด๋๋ ๊ฑฐ์ ํ์์์? ๋ ๊ฑฐ์ ์์คํ ์์ ํด๋ผ์ฐ๋๋ก ์ฎ๊ธฐ๊ฑฐ๋, MySQL์์ PostgreSQL๋ก ๊ฐ์ํ๊ฑฐ๋, ์จํ๋ ๋ฏธ์ค์์ AWS๋ก ์ด์ฌ ๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ์์ฒญ ๋ง์์ก์ด. ๊ทผ๋ฐ ๋ฌธ์ ๋ ์ด๋ฐ ์์ ๋ค์ด ์์ฒญ๋ ์๊ฐ๊ณผ ๋ฆฌ์คํฌ๋ฅผ ๋๋ฐํ๋ค๋ ๊ฑฐ์ง.
์ค์ ๋ก ๊ฐํธ๋(Gartner) ๋ฆฌ์์น์ ๋ฐ๋ฅด๋ฉด ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ก์ ํธ์ ์ฝ 83%๊ฐ ์์ ๋ ์ผ์ ์ ์ด๊ณผํ๊ฑฐ๋ ์์ฐ์ ๋๊ธด๋ค๊ณ ํด. ๋ฌด์์ด ํต๊ณ ์๋์ผ? ๐ฑ ๊ทธ๋์ ๋ฑ์ฅํ ๊ฒ ๋ฐ๋ก **์๋ํ ๋๊ตฌ**๋ค์ด์ผ.
์ด๋ฐ ๋๊ตฌ๋ค์ ๋จ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌ๋ง ํ๋ ๊ฒ ์๋์ผ. ๋ค์๊ณผ ๊ฐ์ ๋๋ํ ๊ธฐ๋ฅ๋ค์ ๊ฐ์ง๊ณ ์์ด:
1. ๋ฐ์ดํฐ ์ถ์ถ(Extract): ์๋ณธ ์์คํ ์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ๊ฐ์ ธ์
2. ๋ฐ์ดํฐ ๋ณํ(Transform): ๋ชฉ์ ์ง ์์คํ ํ์์ ๋ง๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณํํด
3. ๋ฐ์ดํฐ ์ ์ฌ(Load): ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์์คํ ์ ๋ฃ์ด์ค
4. ๊ฒ์ฆ(Validation): ๋ฐ์ดํฐ๊ฐ ์ ๋๋ก ์ฎ๊ฒจ์ก๋์ง ํ์ธํด
5. ๋กค๋ฐฑ(Rollback): ๋ฌธ์ ์๊ธฐ๋ฉด ์๋๋๋ก ๋๋๋ ค์ค
๐ท AWS Database Migration Service (DMS)
ํน์ง: AWS ์ํ๊ณ์ ์๋ฒฝํ ํตํฉ์ฅ์ : ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ, ๋ค์ํ DB ์ง์
๋จ์ : AWS ์ข ์์ฑ
๊ฐ๊ฒฉ: ์ฌ์ฉ๋ ๊ธฐ๋ฐ ๊ณผ๊ธ
๐ถ Apache NiFi
ํน์ง: ์คํ์์ค, ์๊ฐ์ UI์ฅ์ : ๋ฌด๋ฃ, ๊ฐ๋ ฅํ ๋ฐ์ดํฐ ํ๋ก์ฐ ๊ด๋ฆฌ
๋จ์ : ํ์ต ๊ณก์ ์์
๊ฐ๊ฒฉ: ๋ฌด๋ฃ(์คํ์์ค)
๐ต Talend Data Integration
ํน์ง: ์ํฐํ๋ผ์ด์ฆ๊ธ ์๋ฃจ์ ์ฅ์ : ๊ฐ๋ ฅํ ๋ณํ ๊ธฐ๋ฅ, GUI ํธ๋ฆฌ
๋จ์ : ๋น์ฉ ๋ถ๋ด
๊ฐ๊ฒฉ: ๋ผ์ด์ ์ค ๊ธฐ๋ฐ
๐ข Flyway
ํน์ง: ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒ์ ๊ด๋ฆฌ ํนํ์ฅ์ : ๊ฐ๋ณ๊ณ ๊ฐ๋จ, CI/CD ํตํฉ ์ฌ์
๋จ์ : ์คํค๋ง ๋ง์ด๊ทธ๋ ์ด์ ์ค์ฌ
๊ฐ๊ฒฉ: ์ปค๋ฎค๋ํฐ ๋ฒ์ ๋ฌด๋ฃ
๋ง์ด๊ทธ๋ ์ด์ ์ ๊ณํ์ด ๋ฐ์ด์ผ. ๋ค์ ํญ๋ชฉ๋ค์ ๋จผ์ ์ฒดํฌํด๋ด:
โ ์๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถ์
- ๋ฐ์ดํฐ ๋ณผ๋ฅจ์ ์ผ๋ง๋ ๋๋์ง (GB? TB?)
- ํ ์ด๋ธ ๊ตฌ์กฐ์ ๊ด๊ณ๋ ์ด๋ค์ง
- ์ธ๋ฑ์ค, ํธ๋ฆฌ๊ฑฐ, ์ ์ฅ ํ๋ก์์ ๋ฑ ์ข ์ ๊ฐ์ฒด๋?
- ๋ฐ์ดํฐ ํ์ ๊ณผ ์ ์ฝ์กฐ๊ฑด ํ์ธ
โ ๋ชฉํ ์์คํ ์ค๋น
- ์ถฉ๋ถํ ์คํ ๋ฆฌ์ง ์ฉ๋ ํ๋ณด
- ๋คํธ์ํฌ ๋์ญํญ ์ฒดํฌ
- ์ ๊ทผ ๊ถํ ์ค์
- ๋ฐฑ์ ๊ณํ ์๋ฆฝ
โ ๋ค์ดํ์ ๊ณํ
- ์๋น์ค ์ค๋จ ๊ฐ๋ฅ ์๊ฐ๋ ํ์ธ
- ์ฌ์ฉ์ ๊ณต์ง ๊ณํ
- ๋กค๋ฐฑ ์๋๋ฆฌ์ค ์ค๋น
AWS DMS๋ฅผ ์๋ก ๋ค๋ฉด ์ด๋ฐ ์์ผ๋ก ์งํํด:
๋ณต์ ์ธ์คํด์ค ์์ฑ
AWS ์ฝ์์์ DMS ์๋น์ค๋ก ์ด๋ํด์ ๋ณต์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด. ์ด๊ฑด ์ค์ ๋ฐ์ดํฐ ์ด๋ ์์ ์ ์ํํ๋ ์๋ฒ์ผ.
// ์ธ์คํด์ค ํฌ๊ธฐ ์ ํ ๊ธฐ์ค
- ์๊ท๋ชจ (< 100GB): dms.t3.medium
- ์ค๊ท๋ชจ (100GB - 1TB): dms.c5.xlarge
- ๋๊ท๋ชจ (> 1TB): dms.c5.4xlarge ์ด์
์๋ํฌ์ธํธ ์ค์ ์๋ณธ(Source)๊ณผ ๋์(Target) ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์ ๋ ฅํด. ํธ์คํธ๋ช , ํฌํธ, ๊ณ์ ์ ๋ณด ๋ฑ์ด ํ์ํด.
// MySQL ์๋ณธ ์๋ํฌ์ธํธ ์์
Server name: mydb.example.com
Port: 3306
Username: migration_user
Password: ********
Database name: production_db
์ด์ ์ค์ ์ด๋ ์์ ์ ์ ์ํ ์ฐจ๋ก์ผ. ์ฌ๊ธฐ์ ์ธ ๊ฐ์ง ๋ง์ด๊ทธ๋ ์ด์ ํ์ ์ ์ ํํ ์ ์์ด:
| ํ์ | ์ค๋ช | ์ฌ์ฉ ์๋๋ฆฌ์ค |
|---|---|---|
| Full Load | ์ ์ฒด ๋ฐ์ดํฐ ์ผ๊ด ์ด๋ | ๋ค์ดํ์ ํ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ |
| CDC (Change Data Capture) | ๋ณ๊ฒฝ์ฌํญ๋ง ์ค์๊ฐ ๋๊ธฐํ | ๋ฌด์ค๋จ ๋ง์ด๊ทธ๋ ์ด์ |
| Full Load + CDC | ์ ์ฒด ์ด๋ ํ ์ค์๊ฐ ๋๊ธฐํ | ๊ฐ์ฅ ์์ ํ ๋ฐฉ์ |
์ด๋ค ํ ์ด๋ธ์ ์ด๋ป๊ฒ ์ฎ๊ธธ์ง ์ ์ํด. JSON ํ์์ผ๋ก ์์ฑํ๋๋ฐ, ์ด๋ ๊ฒ ์๊ฒผ์ด:
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "include-all-tables",
"object-locator": {
"schema-name": "public",
"table-name": "%"
},
"rule-action": "include"
},
{
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "rename-schema",
"rule-target": "schema",
"object-locator": {
"schema-name": "public"
},
"value": "new_schema",
"rule-action": "rename"
}
]
}
์ด ์ค์ ์ public ์คํค๋ง์ ๋ชจ๋ ํ
์ด๋ธ์ ํฌํจํ๊ณ , ์คํค๋ง ์ด๋ฆ์ new_schema๋ก ๋ณ๊ฒฝํ๋ผ๋ ์๋ฏธ์ผ.
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ๋ฐ์ดํฐ ํ์ ์ด๋ ๊ตฌ์กฐ๊ฐ ๋ค๋ฅผ ์ ์์ด. ์ด๊ฑธ ์๋์ผ๋ก ๋ณํํด์ฃผ๋ ๊ฒ ์๋ํ ๋๊ตฌ์ ํต์ฌ ๊ธฐ๋ฅ์ด์ง!
๋ฐ์ดํฐ ํ์ ๋ณํ ์์
| MySQL | PostgreSQL | ๋ณํ ๊ท์น |
|---|---|---|
| TINYINT | SMALLINT | ์๋ ๋ณํ |
| DATETIME | TIMESTAMP | ํ์์กด ๊ณ ๋ ค ํ์ |
| TEXT | TEXT | ๋์ผ |
| ENUM | VARCHAR + CHECK | ์ ์ฝ์กฐ๊ฑด ์ถ๊ฐ |
๋ณต์กํ ๋ณํ์ด ํ์ํ๋ฉด ๋ณํ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์์ด. ์๋ฅผ ๋ค์ด ๋ ์ง ํ์์ ๋ฐ๊พธ๊ฑฐ๋, ๋ฌธ์์ด์ ์ ๊ทํํ๊ฑฐ๋, ์ํธํ๋ฅผ ์ถ๊ฐํ๋ ๋ฑ์ ์์ ์ด์ง.
// ์์: ์ ํ๋ฒํธ ํ์ ๋ณํ
// ์๋ณธ: 01012345678
// ๋์: 010-1234-5678
CASE
WHEN LENGTH(phone) = 11
THEN CONCAT(
SUBSTRING(phone, 1, 3), '-',
SUBSTRING(phone, 4, 4), '-',
SUBSTRING(phone, 8, 4)
)
ELSE phone
END
๋๋์ด ์คํ! ๋ฒํผ ํ๋๋ง ๋๋ฅด๋ฉด... ๋? ์๋์ผ, ์ฌ๊ธฐ์๋ถํฐ๊ฐ ์ง์ง ์์์ด์ผ. ๐
์ค์๊ฐ ๋ชจ๋ํฐ๋ง ์ฒดํฌ๋ฆฌ์คํธ
๐ ์งํ๋ฅ ํ์ธ
- ์ ์ฒด ํ ์ด๋ธ ์ค ๋ช ๊ฐ ์๋ฃ๋๋์ง
- ํ์ฌ ์ฒ๋ฆฌ ์ค์ธ ํ ์ด๋ธ๊ณผ ์งํ๋ฅ
- ์์ ์๋ฃ ์๊ฐ
โก ์ฑ๋ฅ ์งํ
- ์ด๋น ์ฒ๋ฆฌ ๋ ์ฝ๋ ์ (rows/sec)
- ๋คํธ์ํฌ ์ฒ๋ฆฌ๋ (MB/sec)
- CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ
- ์ง์ฐ ์๊ฐ (CDC ๋ชจ๋์ ๊ฒฝ์ฐ)
๐จ ์๋ฌ ๋ชจ๋ํฐ๋ง
- ์คํจํ ๋ ์ฝ๋ ์
- ์๋ฌ ๋ฉ์์ง ๋ฐ ์์ธ
- ์ฌ์๋ ํ์
๋๋ถ๋ถ์ ๋๊ตฌ๋ค์ ๋์๋ณด๋๋ฅผ ์ ๊ณตํด์ ์ด๋ฐ ์ ๋ณด๋ค์ ์ค์๊ฐ์ผ๋ก ๋ณผ ์ ์์ด. AWS DMS ๊ฐ์ ๊ฒฝ์ฐ CloudWatch์ ์ฐ๋๋์ด์ ์๋ ์ค์ ๋ ๊ฐ๋ฅํ์ง.
๋ง์ด๊ทธ๋ ์ด์ ์ด ๋๋ฌ๋ค๊ณ ๋ฐ๋ก ์๋น์ค ์ ํํ๋ฉด ํฐ์ผ ๋! ๋ฐ๋์ ๊ฒ์ฆ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํด.
๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ
-- ๋ ์ฝ๋ ์ ๋น๊ต
SELECT COUNT(*) FROM source_db.users;
SELECT COUNT(*) FROM target_db.users;
-- ์ฒดํฌ์ฌ ๋น๊ต (๋ฐ์ดํฐ ์ผ์น ์ฌ๋ถ)
SELECT MD5(GROUP_CONCAT(id, email ORDER BY id))
FROM source_db.users;
SELECT MD5(GROUP_CONCAT(id, email ORDER BY id))
FROM target_db.users;
์ฑ๋ฅ ํ
์คํธ- ์ฟผ๋ฆฌ ์๋ต ์๊ฐ ๋น๊ต
- ์ธ๋ฑ์ค ์ฑ๋ฅ ํ์ธ
- ๋์ ์ ์ ๋ถํ ํ ์คํธ
์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ
- ์ฃผ์ ๊ธฐ๋ฅ ์๋๋ฆฌ์ค ํ ์คํธ
- ์ฃ์ง ์ผ์ด์ค ํ์ธ
- ์ฌ์ฉ์ ์์ฉ ํ ์คํธ(UAT)
๊ฒ์ฆ ๋จ๊ณ์์ ๋ฌธ์ ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด? ๋นํฉํ์ง ๋ง๊ณ ์ฐจ๋ถํ๊ฒ ์์ธ์ ๋ถ์ํด. ๋๋ถ๋ถ ๋ฐ์ดํฐ ํ์ ๋ถ์ผ์น๋ ์ ์ฝ์กฐ๊ฑด ๋ฌธ์ ์ผ.
๋ชจ๋ ๊ฒ์ฆ์ด ๋๋ฌ์ผ๋ฉด ์ด์ ์ค์ ์๋น์ค๋ฅผ ์ ์์คํ ์ผ๋ก ์ ํํ ์ฐจ๋ก์ผ!
์ ํ ์ฒดํฌ๋ฆฌ์คํธ
์ ํ ์ (D-1)
โ ๋ชจ๋ ์ดํด๊ด๊ณ์์๊ฒ ๊ณต์ง
โ ๋กค๋ฐฑ ๊ณํ ์ต์ข ์ ๊ฒ
โ ๋ฐฑ์ ์๋ฃ ํ์ธ
โ ๋ชจ๋ํฐ๋ง ๋๊ตฌ ์ค๋น
์ ํ ์์ (D-Day)
โ ์๋ณธ DB ์ฝ๊ธฐ ์ ์ฉ ๋ชจ๋ ์ ํ
โ ์ต์ข CDC ๋๊ธฐํ ์๋ฃ ๋๊ธฐ
โ ์ ํ๋ฆฌ์ผ์ด์ ์ฐ๊ฒฐ ๋ฌธ์์ด ๋ณ๊ฒฝ
โ DNS/๋ก๋๋ฐธ๋ฐ์ ์ค์ ๋ณ๊ฒฝ
โ ์๋น์ค ์ฌ์์
์ ํ ํ (D+1 ~ D+7)
โ ์ง์ค ๋ชจ๋ํฐ๋ง (24์๊ฐ)
โ ์ฌ์ฉ์ ํผ๋๋ฐฑ ์์ง
โ ์ฑ๋ฅ ์งํ ๋ถ์
โ ์๋ณธ DB ์ ์ง (๋กค๋ฐฑ ๋๋น)
๋ณดํต 1~2์ฃผ ์ ๋ ๋ฌธ์ ์์ด ์ด์๋๋ฉด ์๋ณธ ์์คํ ์ ์ ๋ฆฌํด๋ ๋ผ. ํ์ง๋ง ์ค์ํ ์์คํ ์ด๋ผ๋ฉด ํ ๋ฌ ์ ๋๋ ๋ฐฑ์ ์ผ๋ก ์ ์งํ๋ ๊ฒ ์์ ํด!
์ํฉ: ํ์ฌ ์๋ฒ์ค์ ์๋ MySQL์ ํด๋ผ์ฐ๋๋ก ์ด์
๋ค์ดํ์: ์ต๋ 2์๊ฐ ํ์ฉ
๋ฐ์ดํฐ ํฌ๊ธฐ: 500GB
์ถ์ฒ ์ ๋ต:
1. AWS DMS ์ฌ์ฉ (Full Load + CDC ๋ชจ๋)
2. ์ฌ์ ์ ์คํค๋ง๋ง ๋จผ์ ์์ฑ (mysqldump --no-data)
3. ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ ๋ก๋ ํ ์์ฑ (์๋ ํฅ์)
4. ํผํฌ ํ์ ํผํด์ ์ฃผ๋ง ์๋ฒฝ์ ์คํ
5. CDC๋ก ์ค์๊ฐ ๋๊ธฐํํ๋ฉด์ ๊ฒ์ฆ ์งํ
6. ๊ฒ์ฆ ์๋ฃ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ
์์ ์์ ์๊ฐ: ์ด๊ธฐ ๋ก๋ 4-6์๊ฐ, CDC ๋๊ธฐํ 1-2์ผ, ์ด 3์ผ ์ ๋
์ํฉ: ๋ ๊ฑฐ์ ๋ฒ์ ์์ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๊ทธ๋ ์ด๋
๋ค์ดํ์: ์ต์ํ ํ์ (๋ฌด์ค๋จ ์ ํธ)
๋ฐ์ดํฐ ํฌ๊ธฐ: 2TB
์ถ์ฒ ์ ๋ต:
1. pg_upgrade ๋๊ตฌ ์ฌ์ฉ (๋น ๋ฅธ ์ ๊ทธ๋ ์ด๋)
2. ๋๋ ๋ ผ๋ฆฌ์ ๋ณต์ (Logical Replication) ํ์ฉ
3. ํ ์คํธ ํ๊ฒฝ์์ ๋จผ์ ์ ์ฒด ํ๋ก์ธ์ค ๋ฆฌํ์ค
4. ํธํ์ฑ ๋ฌธ์ ์ฌ์ ์ฒดํฌ (deprecated ๊ธฐ๋ฅ ํ์ธ)
5. ์ต์คํ ์ ๋ฐ ์ปค์คํ ํจ์ ํธํ์ฑ ๊ฒ์ฆ
์ฃผ์์ฌํญ:
- ๋ฉ์ด์ ๋ฒ์ ์ ๊ทธ๋ ์ด๋๋ ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ ๊ฒ ์์ ํด
- 9.6 โ 11 โ 14 ์ด๋ฐ ์์ผ๋ก ์ ์ง์ ์ ๊ทธ๋ ์ด๋ ๊ณ ๋ ค
- ํต๊ณ ์ ๋ณด ์ฌ์์ง ํ์ (ANALYZE ์คํ)
์ํฉ: ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ํ ๋ฐ์ดํฐ๋ก ์ ํ
๋ค์ดํ์: ํ์ ๊ฐ๋ฅ
๋ฐ์ดํฐ ํฌ๊ธฐ: 1TB
์ถ์ฒ ์ ๋ต:
1. ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ถ์ ๋ฐ ์คํค๋ง ์ค๊ณ๊ฐ ์ต์ฐ์ !
2. ์ค์ฒฉ๋ JSON ๊ตฌ์กฐ๋ฅผ ํ ์ด๋ธ ๊ด๊ณ๋ก ์ ๊ทํ
3. Apache NiFi๋ Talend ๊ฐ์ ETL ๋๊ตฌ ํ์ฉ
4. ํ์ด์ฌ ์คํฌ๋ฆฝํธ๋ก ์ปค์คํ ๋ณํ ๋ก์ง ์์ฑ
5. ๋ฐฐ์น ๋จ์๋ก ๋๋ ์ ์ฒ๋ฆฌ (๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ)
์ํ ๋ณํ ์ฝ๋:
import pymongo
import psycopg2
from datetime import datetime
# MongoDB ์ฐ๊ฒฐ
mongo_client = pymongo.MongoClient("mongodb://localhost:27017/")
mongo_db = mongo_client["mydb"]
collection = mongo_db["users"]
# PostgreSQL ์ฐ๊ฒฐ
pg_conn = psycopg2.connect(
host="localhost",
database="mydb",
user="postgres",
password="password"
)
pg_cursor = pg_conn.cursor()
# ๋ฐ์ดํฐ ๋ณํ ๋ฐ ์ฝ์
for doc in collection.find():
pg_cursor.execute("""
INSERT INTO users (id, name, email, created_at, metadata)
VALUES (%s, %s, %s, %s, %s)
""", (
str(doc['_id']),
doc['name'],
doc['email'],
doc['createdAt'],
json.dumps(doc.get('metadata', {}))
))
pg_conn.commit()
์ด๋ฐ ์์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์
์ด ์์ ํ ๋ค๋ฅธ ๊ฒฝ์ฐ์ ์ปค์คํ
์คํฌ๋ฆฝํธ๊ฐ ํ์ํ ์ ์์ด.
ํํฐ์ ๊ธฐ๋ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ
-- ๋ ์ง ๊ธฐ์ค ํํฐ์
๋ถํ
Task 1: WHERE created_at >= '2023-01-01' AND created_at < '2023-04-01'
Task 2: WHERE created_at >= '2023-04-01' AND created_at < '2023-07-01'
Task 3: WHERE created_at >= '2023-07-01' AND created_at < '2023-10-01'
Task 4: WHERE created_at >= '2023-10-01' AND created_at < '2024-01-01'
-- ID ๋ฒ์ ๊ธฐ๋ฐ ๋ถํ
Task 1: WHERE id >= 1 AND id < 1000000
Task 2: WHERE id >= 1000000 AND id < 2000000
Task 3: WHERE id >= 2000000 AND id < 3000000
AWS DMS์์๋ ParallelLoadThreads ํ๋ผ๋ฏธํฐ๋ก ๋ณ๋ ฌ ์ฒ๋ฆฌ ์์ค์ ์กฐ์ ํ ์ ์์ด. ๋ณดํต 4-8๊ฐ ์ ๋๊ฐ ์ ๋นํด.
### 2๏ธโฃ ๋คํธ์ํฌ ์ต์ ํ
๋ฐ์ดํฐ ์ ์ก ์๋๊ฐ ๋๋ฆฌ๋ค๋ฉด ๋คํธ์ํฌ๊ฐ ๋ณ๋ชฉ์ผ ์ ์์ด. ์ด๋ฐ ๊ฒฝ์ฐ ์๋ํด๋ณผ ๋งํ ๋ฐฉ๋ฒ๋ค์ด์ผ:- โ ์์ถ ํ์ฑํ: ๋คํธ์ํฌ ๋์ญํญ ์ ์ฝ (๋จ, CPU ์ฌ์ฉ๋ ์ฆ๊ฐ)
- โ ์ ์ฉ ํ์ ์ฌ์ฉ: AWS Direct Connect, Azure ExpressRoute ๋ฑ
- โ ๋ฆฌ์ ์ ํ: ์๋ณธ๊ณผ ๋์์ด ๊ฐ๊น์ด ๋ฆฌ์ ์ ํ
- โ VPN ํฐ๋๋ง: ๋ณด์๊ณผ ์ฑ๋ฅ ๊ท ํ
- โ ๋ฐฐ์น ํฌ๊ธฐ ์กฐ์ : ๋๋ฌด ์์ผ๋ฉด ์ค๋ฒํค๋, ๋๋ฌด ํฌ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ
ํ์์คํฌํ ๊ธฐ๋ฐ ์ฆ๋ถ ๋ก๋
-- 1๋จ๊ณ: ๊ณผ๊ฑฐ ๋ฐ์ดํฐ (๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ ๋ฎ์)
SELECT * FROM orders
WHERE created_at < '2023-01-01';
-- 2๋จ๊ณ: ์ต๊ทผ ๋ฐ์ดํฐ (๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ ๋์)
SELECT * FROM orders
WHERE created_at >= '2023-01-01'
AND created_at < '2024-01-01';
-- 3๋จ๊ณ: ํ์ฌ ๋ฐ์ดํฐ (์ค์๊ฐ ๋๊ธฐํ)
SELECT * FROM orders
WHERE created_at >= '2024-01-01';
์ด๋ ๊ฒ ํ๋ฉด ์ค๋๋ ๋ฐ์ดํฐ๋ ํ ๋ฒ๋ง ์ฎ๊ธฐ๊ณ , ์ต๊ทผ ๋ฐ์ดํฐ๋ง ๋ฐ๋ณต์ ์ผ๋ก ๋๊ธฐํํ ์ ์์ด์ ํจ์จ์ ์ด์ผ.
### 4๏ธโฃ ๋ฐ์ดํฐ ๊ฒ์ฆ ์๋ํ
์๋์ผ๋ก ๋ฐ์ดํฐ ๊ฒ์ฆํ๋ ๊ฑด ํ๊ณ๊ฐ ์์ด. ์๋ํ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ด๋๋ฉด ํธํด!#!/bin/bash
# ๋ฐ์ดํฐ ๊ฒ์ฆ ์คํฌ๋ฆฝํธ
echo "=== ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์
๊ฒ์ฆ ์์ ==="
# 1. ํ
์ด๋ธ๋ณ ๋ ์ฝ๋ ์ ๋น๊ต
for table in users orders products; do
source_count=$(mysql -h source_db -e "SELECT COUNT(*) FROM $table" -sN)
target_count=$(psql -h target_db -c "SELECT COUNT(*) FROM $table" -tA)
if [ "$source_count" -eq "$target_count" ]; then
echo "โ $table: OK ($source_count rows)"
else
echo "โ $table: FAIL (source: $source_count, target: $target_count)"
fi
done
# 2. ์ํ ๋ฐ์ดํฐ ๋น๊ต
echo "์ํ ๋ฐ์ดํฐ ๊ฒ์ฆ ์ค..."
# ๋๋ค ์ํ 100๊ฐ ์ถ์ถํด์ ๋น๊ต
# ...
# 3. ์ ์ฝ์กฐ๊ฑด ํ์ธ
echo "์ ์ฝ์กฐ๊ฑด ๊ฒ์ฆ ์ค..."
# PK, FK, UNIQUE ๋ฑ ํ์ธ
# ...
echo "=== ๊ฒ์ฆ ์๋ฃ ==="
### 5๏ธโฃ ๋กค๋ฐฑ ์ ๋ต
๋ง์ฝ์ ๋๋นํ ๋กค๋ฐฑ ๊ณํ์ ํ์์ผ! ์๋ํ ๋๊ตฌ๋ค์ ๋๋ถ๋ถ ๋กค๋ฐฑ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง, ์๋ ๋กค๋ฐฑ ์ ์ฐจ๋ ์ค๋นํด๋ฌ์ผ ํด.์๋๋ฆฌ์ค 1: ๋ฐ์ดํฐ ๋ถ์ผ์น ๋ฐ๊ฒฌ
โ CDC ์ค๋จ โ ์๋ณธ DB๋ก ์๋น์ค ๋ณต๊ท โ ์์ธ ๋ถ์ โ ์ฌ์๋
์๋๋ฆฌ์ค 2: ์ฑ๋ฅ ๋ฌธ์
โ ํธ๋ํฝ ์๋ณธ์ผ๋ก ๋ผ์ฐํ โ ์ธ๋ฑ์ค/์ฟผ๋ฆฌ ์ต์ ํ โ ์ฌ์ ํ
์๋๋ฆฌ์ค 3: ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ฅ
โ ์ฆ์ ์๋ณธ DB ์ฐ๊ฒฐ ๋ณต๊ตฌ โ ์ฝ๋ ์์ โ ์ฌ๋ฐฐํฌ โ ์ฌ์ ํ
โ ์ค์ 1: ์ธ๋ฑ์ค๋ฅผ ๋จผ์ ์์ฑ
๋ฌธ์ : ๋ฐ์ดํฐ ๋ก๋ ์๋๊ฐ ๊ทน๋๋ก ๋๋ฆผ์์ธ: ์ธ๋ฑ์ค๊ฐ ์์ผ๋ฉด INSERT๋ง๋ค ์ธ๋ฑ์ค ์ ๋ฐ์ดํธ ๋ฐ์
ํด๊ฒฐ: ๋ฐ์ดํฐ ๋ก๋ ํ ์ธ๋ฑ์ค ์์ฑ
-- ์ฌ๋ฐ๋ฅธ ์์
1. ์ธ๋ฑ์ค ์ญ์
2. ๋ฐ์ดํฐ ๋ก๋
3. ์ธ๋ฑ์ค ์ฌ์์ฑ
4. ANALYZE ์คํ
โ ์ค์ 2: ์ธ๋ํค ์ ์ฝ์กฐ๊ฑด ๋ฌด์
๋ฌธ์ : ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ์๋ฐ ์ค๋ฅ์์ธ: ๋ถ๋ชจ ํ ์ด๋ธ๋ณด๋ค ์์ ํ ์ด๋ธ์ ๋จผ์ ๋ก๋
ํด๊ฒฐ: ์์กด์ฑ ์์๋๋ก ๋ง์ด๊ทธ๋ ์ด์
-- ์ฌ๋ฐ๋ฅธ ์์
1. ๋ถ๋ชจ ํ
์ด๋ธ (users)
2. ์์ ํ
์ด๋ธ (orders)
3. ์์ ํ
์ด๋ธ (order_items)
โ ์ค์ 3: ํ์์กด ๊ณ ๋ ค ์ ํจ
๋ฌธ์ : ๋ ์ง/์๊ฐ ๋ฐ์ดํฐ๊ฐ ํ์ด์ง์์ธ: ์๋ฒ ํ์์กด ์ฐจ์ด
ํด๊ฒฐ: UTC๋ก ํต์ผํ๊ฑฐ๋ ๋ช ์์ ๋ณํ
-- PostgreSQL ์์
SET timezone = 'UTC';
-- ๋ณํ ์์
CONVERT_TZ(datetime_col,
'Asia/Seoul', 'UTC')
โ ์ค์ 4: ํธ๋์ญ์ ํฌ๊ธฐ ๊ณผ๋ค
๋ฌธ์ : ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ, ๋กค๋ฐฑ ์ธ๊ทธ๋จผํธ ์ค๋ฒํ๋ก์ฐ์์ธ: ํ ํธ๋์ญ์ ์ ๋๋ฌด ๋ง์ ๋ฐ์ดํฐ
ํด๊ฒฐ: ๋ฐฐ์น ๋จ์๋ก ์ปค๋ฐ
-- 1000๊ฐ์ฉ ๋ฐฐ์น ์ฒ๋ฆฌ
COMMIT_INTERVAL = 1000
for i in range(0, total, 1000):
process_batch(i, i+1000)
commit()
ํ ์คํธ ํ๊ฒฝ
- ๋ฐ์ดํฐ ํฌ๊ธฐ: 100GB (1์ต ๋ ์ฝ๋)
- ์๋ณธ: MySQL 8.0 (์จํ๋ ๋ฏธ์ค)
- ๋์: PostgreSQL 14 (AWS RDS)
- ๋คํธ์ํฌ: 1Gbps
| ๋๊ตฌ | ์์ ์๊ฐ | ์ฒ๋ฆฌ ์๋ | CPU ์ฌ์ฉ๋ฅ | ๋น์ฉ |
|---|---|---|---|---|
| AWS DMS | 3์๊ฐ 20๋ถ | 8.3 MB/s | 65% | $45 |
| Apache NiFi | 4์๊ฐ 10๋ถ | 6.7 MB/s | 72% | ๋ฌด๋ฃ |
| Talend | 2์๊ฐ 50๋ถ | 9.8 MB/s | 58% | $120 |
| ์๋ ์คํฌ๋ฆฝํธ | 8์๊ฐ 30๋ถ | 3.3 MB/s | 45% | ๋ฌด๋ฃ |
Talend: ๊ฐ์ฅ ๋น ๋ฅด์ง๋ง ๋น์ฉ์ด ๋์. ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์ ์ ํฉ
AWS DMS: ์ฑ๋ฅ๊ณผ ๋น์ฉ์ ๊ท ํ. AWS ํ๊ฒฝ์ด๋ฉด ์ต์ ์ ์ ํ
Apache NiFi: ๋ฌด๋ฃ์ง๋ง ์ค์ ์ด ๋ณต์ก. ๊ธฐ์ ๋ ฅ ์๋ ํ์ ์ถ์ฒ
์๋ ์คํฌ๋ฆฝํธ: ๋๋ฆฌ์ง๋ง ์์ ํ ์ ์ด ๊ฐ๋ฅ. ์๊ท๋ชจ ํ๋ก์ ํธ์ฉ
ํ ์คํํธ์ ์์ MongoDB 5TB๋ฅผ PostgreSQL๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ์ฌ๋ก๋ฅผ ์๊ฐํ ๊ฒ. ์ฒ์์ ์๋์ผ๋ก ํ๋ ค๋ค๊ฐ ์์ ์๊ฐ์ด 2์ฃผ๊ฐ ๋์์ AWS DMS๋ก ์ ํํ๋. ๊ฒฐ๊ณผ์ ์ผ๋ก 3์ผ ๋ง์ ์๋ฃํ๊ณ , ๋ค์ดํ์์ 4์๊ฐ์ผ๋ก ์ค์์ด. ๋น์ฉ์ ์ฝ $800 ์ ๋ ๋ค์๋๋ฐ, ๊ฐ๋ฐ์ ์ธ๊ฑด๋น ์๊ฐํ๋ฉด ํจ์ฌ ์ ๋ ดํ๋ค๊ณ ํ๋๋ผ๊ณ !
์ฌ๋ฅ๋ท์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ฌธ๊ฐ๋ค์ด ๋ง์. DB ์ค๊ณ๋ถํฐ ๋ง์ด๊ทธ๋ ์ด์ ์คํ, ์ฌํ ๊ด๋ฆฌ๊น์ง ์ ๊ณผ์ ์ ๋์์ค ์ ์๋ ๊ณ ์๋ค์ด ๋๊ธฐ ์ค์ด์ง. ํนํ ๋ณต์กํ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์ด๋ ๋์ฉ๋ ๋ฐ์ดํฐ ์ด์ ๊ฐ์ ๊ฒฝ์ฐ์ ๊ฒฝํ ๋ง์ ์ ๋ฌธ๊ฐ์ ํจ๊ปํ๋ ๊ฒ ๋ฆฌ์คํฌ๋ฅผ ํฌ๊ฒ ์ค์ฌ์ค.
โ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์ ์ปจ์คํ
โ ์๋ํ ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ
โ ์ฑ๋ฅ ์ต์ ํ ๋ฐ ํ๋
โ ํด๋ผ์ฐ๋ ๋ง์ด๊ทธ๋ ์ด์ ์ง์
โ ๋ฐ์ดํฐ ๊ฒ์ฆ ๋ฐ ํ์ง ๊ด๋ฆฌ
โ ์ฌํ ๋ชจ๋ํฐ๋ง ๋ฐ ์ ์ง๋ณด์
ํ๋ก์ ํธ ๊ท๋ชจ์ ์์ฐ์ ๋ง๋ ์ ๋ฌธ๊ฐ๋ฅผ ์ฐพ์์ ์๋ด๋ฐ์๋ณด๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด์ผ!
์ค๋งํธ ์ค์ผ์ค๋ง: ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฅผ ํ์ตํด์ ์ต์ ์ ๋ง์ด๊ทธ๋ ์ด์ ์๊ฐ๊ณผ ๋ฆฌ์์ค ํ ๋น์ ์ถ์ฒ
์ด์ ํ์ง: ๋ฐ์ดํฐ ํจํด์ ๋ถ์ํด์ ์ ์ฌ์ ๋ฌธ์ ๋ฅผ ์ฌ์ ์ ๊ฐ์ง
์๋ ์ต์ ํ: ์ค์๊ฐ์ผ๋ก ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ๊ณ ํ๋ผ๋ฏธํฐ๋ฅผ ์๋ ์กฐ์
์์ธก ๋ถ์: ๋ง์ด๊ทธ๋ ์ด์ ์์ ์๊ฐ๊ณผ ๋ฆฌ์คํฌ๋ฅผ ์ ํํ๊ฒ ์์ธก
### ์ ๋ก ๋ค์ดํ์ ๋ง์ด๊ทธ๋ ์ด์ ๊ธฐ์ ์ด ๋ฐ์ ํ๋ฉด์ ์์ ํ ๋ฌด์ค๋จ ๋ง์ด๊ทธ๋ ์ด์ ์ด ๊ฐ๋ฅํด์ง๊ณ ์์ด. CDC(Change Data Capture) ๊ธฐ์ ์ด ๋์ฑ ์ ๊ตํด์ง๊ณ , ์ค์๊ฐ ๋๊ธฐํ ์ฑ๋ฅ๋ ํฌ๊ฒ ํฅ์๋๊ณ ์์ง.
### ์ปจํ ์ด๋ ๊ธฐ๋ฐ ๋ง์ด๊ทธ๋ ์ด์ Docker, Kubernetes ๊ฐ์ ์ปจํ ์ด๋ ๊ธฐ์ ๊ณผ ๊ฒฐํฉ๋ ๋ง์ด๊ทธ๋ ์ด์ ์๋ฃจ์ ๋ค๋ ๋์ค๊ณ ์์ด. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ปจํ ์ด๋๋ก ํจํค์งํด์ ์ด๋ํ๋ฉด ํ๊ฒฝ ์ฐจ์ด๋ก ์ธํ ๋ฌธ์ ๋ฅผ ์ค์ผ ์ ์๊ฑฐ๋ .
โก ์๊ตฌ์ฌํญ ๋ถ์
ย ย โก ๋ง์ด๊ทธ๋ ์ด์ ๋ชฉ์ ๋ช ํํ
ย ย โก ์ฑ๊ณต ๊ธฐ์ค ์ ์
ย ย โก ํ์ฉ ๊ฐ๋ฅํ ๋ค์ดํ์ ํ์ธ
ย ย โก ์์ฐ ๋ฐ ์ผ์ ์๋ฆฝ
โก ๊ธฐ์ ์ ๋ถ์
ย ย โก ์๋ณธ DB ๋ฒ์ ๋ฐ ๊ตฌ์กฐ ํ์
ย ย โก ๋ฐ์ดํฐ ๋ณผ๋ฅจ ์ธก์
ย ย โก ์ข ์์ฑ ๋ถ์ (FK, ํธ๋ฆฌ๊ฑฐ, ํ๋ก์์ )
ย ย โก ํน์ ๋ฐ์ดํฐ ํ์ ํ์ธ
ย ย โก ์ธ์ฝ๋ฉ ๋ฐ ์ฝ๋ ์ด์ ์ฒดํฌ
โก ์ธํ๋ผ ์ค๋น
ย ย โก ๋ชฉํ ์์คํ ํ๋ก๋น์ ๋
ย ย โก ๋คํธ์ํฌ ์ฐ๊ฒฐ ํ์ธ
ย ย โก ๋ฐฉํ๋ฒฝ ๊ท์น ์ค์
ย ย โก ๋ฐฑ์ ์์คํ ๊ตฌ์ถ
ย ย โก ๋ชจ๋ํฐ๋ง ๋๊ตฌ ์ค์น
โก ๋ณด์ ๋ฐ ๊ถํ
ย ย โก ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฉ ๊ณ์ ์์ฑ
ย ย โก ์ต์ ๊ถํ ์์น ์ ์ฉ
ย ย โก SSL/TLS ์ฐ๊ฒฐ ์ค์
ย ย โก ์ํธํ ์๊ตฌ์ฌํญ ํ์ธ
ย ย โก ๊ท์ ์ค์ ์ฒดํฌ (GDPR, ๊ฐ์ธ์ ๋ณด๋ณดํธ๋ฒ ๋ฑ)
โก ์คํ ์ ์ต์ข ์ ๊ฒ
ย ย โก ๋ฐฑ์ ์๋ฃ ํ์ธ
ย ย โก ๋กค๋ฐฑ ๊ณํ ๊ฒํ
ย ย โก ํ์ ์ญํ ๋ถ๋ด
ย ย โก ์ปค๋ฎค๋์ผ์ด์ ์ฑ๋ ์คํ
โก ์ค์๊ฐ ๋ชจ๋ํฐ๋ง
ย ย โก ์งํ๋ฅ ์ถ์
ย ย โก ์๋ฌ ๋ก๊ทธ ํ์ธ
ย ย โก ์ฑ๋ฅ ์งํ ๋ชจ๋ํฐ๋ง
ย ย โก ๋ฆฌ์์ค ์ฌ์ฉ๋ฅ ์ฒดํฌ
ย ย โก ๋คํธ์ํฌ ์ํ ํ์ธ
โก ๋ฌธ์ ๋์
ย ย โก ์๋ฌ ๋ฐ์ ์ ์ฆ์ ๊ธฐ๋ก
ย ย โก ์์ธ ๋ถ์ ๋ฐ ์กฐ์น
ย ย โก ํ์์ ์ผ์ ์ค์ง
ย ย โก ์ดํด๊ด๊ณ์ ์ปค๋ฎค๋์ผ์ด์
โก ๋ฐ์ดํฐ ๊ฒ์ฆ
ย ย โก ๋ ์ฝ๋ ์ ์ผ์น ํ์ธ
ย ย โก ์ํ ๋ฐ์ดํฐ ๋น๊ต
ย ย โก ์ฒดํฌ์ฌ ๊ฒ์ฆ
ย ย โก NULL ๊ฐ ํ์ธ
ย ย โก ๋ ์ง/์๊ฐ ๋ฐ์ดํฐ ๊ฒ์ฆ
โก ๊ธฐ๋ฅ ํ ์คํธ
ย ย โก CRUD ์์ ํ ์คํธ
ย ย โก ๋ณต์กํ ์ฟผ๋ฆฌ ์คํ
ย ย โก ํธ๋์ญ์ ํ ์คํธ
ย ย โก ๋์์ฑ ํ ์คํธ
ย ย โก ์ฑ๋ฅ ๋ฒค์น๋งํฌ
โก ์ ํ๋ฆฌ์ผ์ด์ ๊ฒ์ฆ
ย ย โก ์ฃผ์ ๊ธฐ๋ฅ ์๋๋ฆฌ์ค ํ ์คํธ
ย ย โก ์ฃ์ง ์ผ์ด์ค ํ์ธ
ย ย โก ์๋ฌ ํธ๋ค๋ง ๊ฒ์ฆ
ย ย โก ์ฌ์ฉ์ ์์ฉ ํ ์คํธ
โก ์ด์ ์ค๋น
ย ย โก ๋ชจ๋ํฐ๋ง ๋์๋ณด๋ ์ค์
ย ย โก ์๋ ๊ท์น ๊ตฌ์ฑ
ย ย โก ๋ฐฑ์ ์ค์ผ์ค ์ค์
ย ย โก ์ด์ ๋ฌธ์ ์์ฑ
ย ย โก ํ ๊ต์ก ์ค์
โก ์ ๋ฆฌ ์์
ย ย โก ์์ ๋ฆฌ์์ค ์ ๋ฆฌ
ย ย โก ์๋ณธ ์์คํ ์ ์ง/ํ๊ธฐ ๊ฒฐ์
ย ย โก ํ๋ก์ ํธ ํ๊ณ
ย ย โก ๋ฌธ์ํ ์๋ฃ
AWS Database Migration Service:
https://docs.aws.amazon.com/dms/
๊ฐ์ฅ ์์ธํ ๊ฐ์ด๋์ ๋ฒ ์คํธ ํ๋ํฐ์ค ์ ๊ณต
Apache NiFi:
https://nifi.apache.org/docs.html
์คํ์์ค ๋ฐ์ดํฐ ํ๋ก์ฐ ์๋ํ์ ๋ฐ์ด๋ธ
PostgreSQL Wiki - Migration:
https://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL
๋ค์ํ DB์์ PostgreSQL๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ํ
Udemy - Database Migration Masterclass:
์ค์ ํ๋ก์ ํธ ์ค์ฌ์ ์ค์ต ๊ฐ์
Coursera - Cloud Database Migration:
ํด๋ผ์ฐ๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ฌธ ๊ณผ์
YouTube - AWS re:Invent ์ธ์ :
์ค์ ๊ธฐ์ ์ฌ๋ก์ ๊ณ ๊ธ ๊ธฐ๋ฒ ์๊ฐ
"Database Reliability Engineering" - Laine Campbell:
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด์์ ๋ชจ๋ ๊ฒ, ๋ง์ด๊ทธ๋ ์ด์ ์ฑํฐ ํ๋
"Designing Data-Intensive Applications" - Martin Kleppmann:
๋ฐ์ดํฐ ์์คํ ์ค๊ณ์ ๊ณ ์ , ๋ง์ด๊ทธ๋ ์ด์ ํจํด ์ฌํ
"The Art of PostgreSQL" - Dimitri Fontaine:
PostgreSQL ๋ง์ด๊ทธ๋ ์ด์ ํนํ ๊ฐ์ด๋
Stack Overflow:
์ค์ ๋ฌธ์ ํด๊ฒฐ์ ๋ณด๊ณ
ํ๊ทธ: database-migration, etl, data-migration
Reddit - r/database:
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๋ฌธ๊ฐ๋ค์ ํ ๋ก ์ฅ
DBA Stack Exchange:
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ์๋ค์ Q&A ํ๋ซํผ
์ฌ๋ฅ๋ท ์ง์์ธ์ ์ฒ:
ํ๊ตญ์ด๋ก ์ํตํ๋ฉฐ ๋ฐฐ์ฐ๋ ์ค์ ๋ ธํ์ฐ!
ํต์ฌ๋ง ๋ค์ ์ ๋ฆฌํ๋ฉด:
1. ๊ณํ์ด ๋ฐ์ด๋ค: ์ฌ์ ๋ถ์๊ณผ ์ค๋น์ ์ถฉ๋ถํ ์๊ฐ์ ํฌ์ํด
2. ์ ์ ํ ๋๊ตฌ ์ ํ: ํ๋ก์ ํธ ๊ท๋ชจ์ ํ๊ฒฝ์ ๋ง๋ ๋๊ตฌ๋ฅผ ๊ณจ๋ผ
3. ๋จ๊ณ๋ณ ์ ๊ทผ: ํ ๋ฒ์ ๋ค ํ๋ ค๊ณ ํ์ง ๋ง๊ณ ๋จ๊ณ์ ์ผ๋ก ์งํํด
4. ์ฒ ์ ํ ๊ฒ์ฆ: ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ํ์ธ์ ์๋ฌด๋ฆฌ ๊ฐ์กฐํด๋ ์ง๋์น์ง ์์
5. ๋กค๋ฐฑ ์ค๋น: ํญ์ Plan B๋ฅผ ์ค๋นํด๋ฌ
6. ์ง์์ ๋ชจ๋ํฐ๋ง: ๋ง์ด๊ทธ๋ ์ด์ ํ์๋ ํ๋์ ์ง์ค ๊ด์ฐฐ์ด ํ์ํด
7. ๋ฌธ์ํ: ๋ชจ๋ ๊ณผ์ ์ ๊ธฐ๋กํด์ ๋ค์ ํ๋ก์ ํธ์ ํ์ฉํด
ํน์ ๋งํ๋ ๋ถ๋ถ์ด ์๊ฑฐ๋ ๋์์ด ํ์ํ๋ฉด ์ฌ๋ฅ๋ท์์ ์ ๋ฌธ๊ฐ๋ค๊ณผ ์๋ดํด๋ณด๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด์ผ. ๊ฒฝํ ๋ง์ ๊ณ ์๋ค์ด ์ค์ ๋ ธํ์ฐ๋ฅผ ์๋์์ด ๊ณต์ ํด์ค ๊ฑฐ์ผ!
์, ์ด์ ๋น์ ๋ ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ ์๋ํ ์ ๋ฌธ๊ฐ๊ฐ ๋ ์ค๋น๊ฐ ๋์ด! ๐ ํ์ดํ ! ๐ฏ
๐ ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ ์ฑ๊ณต์ ์์ํฉ๋๋ค! ๐
์์ ํ๊ณ ๋น ๋ฅธ ๋ฐ์ดํฐ ์ด์ ์ผ๋ก ๋น์ฆ๋์ค ์ฑ์ฅ์ ๊ฐ์ํํ์ธ์!
๊ด๋ จ ํค์๋
๋๊ธ ์์ฑ
์ด ๊ธ์ ๋ํ ์ฌ๋ฌ๋ถ์ ์๊ฐ์ ๋ค๋ ค์ฃผ์ธ์
๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค
๋๊ธ์ ์์ฑํ๋ ค๋ฉด ๋จผ์ ๋ก๊ทธ์ธํด์ฃผ์ธ์.
๋๊ธ 0
์ง์์ธ์ ์ฒ - ์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
- ์ ์๊ถ ๋ฐ ์์ ๊ถ: ๋ณธ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ๋ ์ AI ๊ธฐ์ ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ํ๋ฏผ๊ตญ ์ ์๊ถ๋ฒ ๋ฐ ๊ตญ์ ์ ์๊ถ ํ์ฝ์ ์ํด ๋ณดํธ๋ฉ๋๋ค.
- AI ์์ฑ ์ปจํ ์ธ ์ ๋ฒ์ ์ง์: ๋ณธ AI ์์ฑ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ์ง์ ์ฐฝ์๋ฌผ๋ก ์ธ์ ๋๋ฉฐ, ๊ด๋ จ ๋ฒ๊ท์ ๋ฐ๋ผ ์ ์๊ถ ๋ณดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ ์ ํ: ์ฌ๋ฅ๋ท์ ๋ช ์์ ์๋ฉด ๋์ ์์ด ๋ณธ ์ปจํ ์ธ ๋ฅผ ๋ณต์ , ์์ , ๋ฐฐํฌ, ๋๋ ์์ ์ ์ผ๋ก ํ์ฉํ๋ ํ์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง ๊ธ์ง: ๋ณธ ์ปจํ ์ธ ์ ๋ํ ๋ฌด๋จ ์คํฌ๋ํ, ํฌ๋กค๋ง, ๋ฐ ์๋ํ๋ ๋ฐ์ดํฐ ์์ง์ ๋ฒ์ ์ ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- AI ํ์ต ์ ํ: ์ฌ๋ฅ๋ท์ AI ์์ฑ ์ปจํ ์ธ ๋ฅผ ํ AI ๋ชจ๋ธ ํ์ต์ ๋ฌด๋จ ์ฌ์ฉํ๋ ํ์๋ ๊ธ์ง๋๋ฉฐ, ์ด๋ ์ง์ ์ฌ์ฐ๊ถ ์นจํด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์์ง ๋๊ธ์ด ์์ต๋๋ค.