V1 Migration - 100-hours-a-week/9-team-Devths-WIKI GitHub Wiki
0. ๋์ ๋ฐฐ๊ฒฝ ๋ฐ ๋ชฉํ
๊ธฐ์กด V1 ํ๊ฒฝ(10.0.0.0/16)์ EC2 ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์๋ก์ด ์ํคํ ์ฒ์ธ V2 VPC(192.168.10.0/16)์ RDS๋ก ์ด์ ํด์ผ ํ๋ ์ํฉ์ด์์ต๋๋ค. ์๋น์ค ์ค๋จ์ ์ต์ํํ๊ณ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ ์ ์งํ๋ฉฐ, ๋ณด์๊ณผ ๋น์ฉ ํจ์จ์ฑ์ ๋ชจ๋ ์ก๊ธฐ ์ํด AWS DMS(Database Migration Service) ๋ฅผ ํ์ฉํ ๋ง์ด๊ทธ๋ ์ด์ ์ ๊ฒฐ์ ํ์ต๋๋ค.
1. ๋คํธ์ํฌ ์ค๊ณ: ์ VPC Peering์ธ๊ฐ?
๋จ์ํ ๋ฐ์ดํฐ ์ด๋์ ๋์ด, ์ํฐํ๋ผ์ด์ฆ๊ธ ์์ ์ฑ์ ํ๋ณดํ๊ธฐ ์ํด VPC Peering์ ์ฐ์ ์ ์ผ๋ก ๊ตฌ์ถํ์ต๋๋ค.
- ๋ณด์ (Security): ๋ฐ์ดํฐ๊ฐ ๊ณต์ฉ ์ธํฐ๋ท์ ํ์ง ์๊ณ AWS ๋ด๋ถ๋ง์ผ๋ก๋ง ํ๋ฆ ๋๋ค. DB ํฌํธ(5432)๋ฅผ ์ธ๋ถ๋ก ๊ฐ๋ฐฉํ ํ์ ์์ด ์๋ VPC ๋์ญ์๋ง ํ์ฉํ๋ฉด ๋๋ฏ๋ก ํดํน ์ํ์ ์์ฒ ์ฐจ๋จํฉ๋๋ค.
- ๋น์ฉ ์ ๊ฐ (Cost Efficiency): ์ธํฐ๋ท ๊ฒฝ์ ์ ๋ฐ์ํ๋ ๋์ 'Data Transfer Out' ๋น์ฉ์ ํผํ๊ณ , ๋์ผ ๋ฆฌ์ ๋ด ๋ด๋ถ ํต์ ๋น์ฉ๋ง ์ง๋ถํ์ฌ ์๋ฐฑ GB์ ๋ฐ์ดํฐ๋ฅผ ๊ฒฝ์ ์ ์ผ๋ก ์ ์กํฉ๋๋ค.
- ์ฑ๋ฅ ๋ฐ ์์ ์ฑ (Reliability): ๊ณต์ฉ ์ธํฐ๋ท์ ๋ณ๋์ฑ(Jitter) ์์ด ์ ์ง์ฐ(Low Latency) ์ ์ก์ด ๊ฐ๋ฅํ์ฌ, ๋์ฉ๋ ๋ง์ด๊ทธ๋ ์ด์ ์ค ์ฐ๊ฒฐ ๋๊น์ผ๋ก ์ธํ ์ฌ์์ ๋ฆฌ์คํฌ๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
2. ์ํฌ๋ก๋ ๋ถ์ ๋ฐ ๋ถํ ํ ์คํธ ์ ๋ต
๋จ์ ๋ณต์ ๊ฐ ์๋, ์๋น์ค ํน์ฑ์ ๋ง๋ ๋ง์ด๊ทธ๋ ์ด์ ๊ฒ์ฆ์ ์ํด 'ํ์ค์ฑ' ์๋ ์๋๋ฆฌ์ค๋ฅผ ์ค๊ณํ์ต๋๋ค.
- Read vs Write ์ง์ค๋: ์ผ๋ฐ ๊ฒ์ํ๊ณผ ๋ฌ๋ฆฌ ์ฑ๋ด ์๋น์ค๋ ๋ํ ๊ธฐ๋ก ์ ์ฅ ๋ฐ ์ํ ์ ์ง๋ฅผ ์ํ Write ๋น์ค์ด ๋งค์ฐ ๋์ต๋๋ค.
- ๋ถํ ์๋๋ฆฌ์ค: ์ฑ๋ด์ ๊ธด ํธ๋์ญ์ ํน์ฑ์ ๋ฐ์ํ์ฌ DB ์ปค๋ฅ์ ํ(Connection Pool) ๊ณ ๊ฐ ๋ฐ ๋ฐ๋๋ฝ(Deadlock) ์ํฉ์ ์๋์ ์ผ๋ก ์ฃผ์ , ํ๊ฒ RDS๊ฐ ์ด์ ํธ๋ํฝ์ ๊ฒฌ๋ ์ ์๋์ง ์ฌ์ ์ ๊ฒ์ฆํ๊ณ ์ ํฉ๋๋ค. (Staging์์ ์ฒดํฌ ์์ )
3. ํธ๋ฌ๋ธ์ํ ๋ฐ ํด๊ฒฐ ๊ณผ์
3.1 ์์ค ์๋ํฌ์ธํธ ์ ์ ๋ถ๊ฐ (PostgreSQL ์ค์ )
DMS ๋ณต์ ์ธ์คํด์ค๊ฐ ์์ค DB์ ์ ์ํ์ง ๋ชปํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
- ์ 1๊ด๋ฌธ (
postgresql.conf):listen_addresses๊ฐlocalhost๋ก ์ ํ๋์ด ์์ด ์ธ๋ถ ์ ํธ๋ฅผ ์ฐจ๋จํ๊ณ ์์์ต๋๋ค. ์ด๋ฅผํ๋ผ์ด๋น IP๋ก ์์ ํ์ฌ ๊ท๋ฅผ ์ด์ด์ฃผ์์ต๋๋ค. - ์ 2๊ด๋ฌธ (
pg_hba.conf): ์ ๋ถ์ฆ ๊ฒ์ฌ ๋จ๊ณ์ ๋๋ค. DMS ๋ณต์ ์ธ์คํด์ค์ ํ๋ผ์ด๋น IP์ ๋ํดscram-sha-256๋ฐฉ์์ ์ ์ ๊ถํ์ ๋ช ์์ ์ผ๋ก ์ถ๊ฐํ์ต๋๋ค.
3.2 ์ค์๊ฐ ๋๊ธฐํ(CDC)๋ฅผ ์ํ wal_level ๋ณ๊ฒฝ
DMS์ ํต์ฌ์ธ CDC(Change Data Capture) ๊ธฐ๋ฅ์ ์ํด ๋ก๊ทธ ์์ค์ replica์์ logical๋ก ๊ฒฉ์ํด์ผ ํ์ต๋๋ค.
- ๋ฌธ์ :
wal_level๋ณ๊ฒฝ์ ๋จ์ 'Reload'๊ฐ ์๋ DB ํ๋ก์ธ์ค ์ฌ์์์ด ํ์์ ์ ๋๋ค. - ๋์ ์ ๋ต: * ๊ฐ๋ฐ ํ๊ฒฝ: ์๋ฒฝ ์๊ฐ๋ ์ ๊ฒ ์ฐฝ(Maintenance Window)์ ํ์ฉํ ์ฆ์ ์ฌ์์.
- ์ด์ ํ๊ฒฝ (Blue-Green): ์ด์ DB์ EBS ์ค๋ ์ท์ผ๋ก Green ์๋ฒ๋ฅผ ๋ณต์ ํ, Green ์๋ฒ์์ ์ค์ ์ ๋ณ๊ฒฝํ๊ณ ์ฌ์์ํ์ฌ ๋ค์ดํ์์ ์ต์ํํ๋ ์ ๋ต์ ์ฑํํ์ต๋๋ค.
3.3 ํ๊ฒ RDS PK ์ ์ฝ ์กฐ๊ฑด ์๋ฐ (ID Null ์๋ฌ)
๋ง์ด๊ทธ๋ ์ด์
์ค null value in column "id" violates not-null constraint ์๋ฌ์ ํจ๊ป 500 ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.
- ์์ธ: DMS์ ์๋ ํ
์ด๋ธ ์์ฑ ์ต์
(
Drop tables on target) ์ฌ์ฉ ์, ๋ฐ์ดํฐ ํ์ ์ ๋ณต์ฌ๋์ง๋ง Serial/Identity/Sequence ๊ฐ์ ์๋ ์ฆ๊ฐ(Auto-increment) ์์ฑ์ด ๋๋ฝ๋๋ ํ์์ด ํ์ธ๋์์ต๋๋ค. - ํด๊ฒฐ:
pg_dump๋ฅผ ์ฌ์ฉํด ์คํค๋ง(๊ตฌ์กฐ)๋ง ๋จผ์ ํ๊ฒ RDS์ ์์ฑํ์ฌ Sequence๋ฅผ ์ ์งํ์ต๋๋ค.- DMS ์ค์ ์
TargetTablePrepMode = TRUNCATE๋ก ๋ณ๊ฒฝํ์ฌ, ์ด๋ฏธ ์ ์๋ ์คํค๋ง ๊ตฌ์กฐ๋ฅผ ๊ฑด๋๋ฆฌ์ง ์๊ณ ๋ฐ์ดํฐ๋ง ์ฑ์ฐ๋๋ก ์์ ํ์ต๋๋ค.
4. ๋ฐฐ์ด ์ ๋ฐ ๊ฒฐ๋ก
- ๋๊ตฌ์ ํ๊ณ ์ดํด: DMS๋ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ฒจ์ฃผ์ง๋ง, ์ธ๋ฑ์ค๋ ์๋ ์ฆ๊ฐ ๊ฐ(Sequence) ๊ฐ์ ์์ธํ DB ์ค๋ธ์ ํธ๊น์ง ์๋ฒฝํ๊ฒ ์ฌํํ์ง๋ ์์ต๋๋ค. "์คํค๋ง๋ ์๋, ๋ฐ์ดํฐ๋ DMS" ๋ผ๋ ๊ณต์์ ์ค์์ฑ์ ๋ฐฐ์ ์ต๋๋ค.
- ๋คํธ์ํฌ๊ฐ ์ฐ์ : ์์ ์ ์ธ ๋ง์ด๊ทธ๋ ์ด์ ์ ๊ธฐ๋ฐ์ ํํํ VPC ์ค๊ณ(Peering)์์ ์์๋จ์ ํ์ธํ์ต๋๋ค.
- ๋ฐ์ดํฐ ์ฑ๊ฒฉ์ ๋ฐ๋ฅธ ๋ถ๋ฆฌ: ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธธ ํ์๋ ์์ต๋๋ค. Redis์
ratelimit๊ฐ์ ํ๋ฐ์ฑ ๋ฐ์ดํฐ๋ ๊ณผ๊ฐํ ์ ์ธํ์ฌ ๋ง์ด๊ทธ๋ ์ด์ ์ ํจ์จ์ฑ์ ๋์์ต๋๋ค.