TL;DR
- ๋ฐ์ดํฐ ๋ ์ดํฌ๋ ํ์ผ์ ๊ณ ์น์ง ์์ผ๋ฏ๋ก ์คํค๋ง๊ฐ ๋ค๋ฅธ ํ์ผ์ด ํ ํ ์ด๋ธ์ ๊ณต์กด
- ํ๋จ ๊ธฐ์ค์ ํธํ์ฑ ๋ฐฉํฅ. backward๋ ์ปจ์๋จธ ๋จผ์ , forward๋ ํ๋ก๋์ ๋จผ์ ๋ฐฐํฌ
- ์ปฌ๋ผ ์ด๋ฆ ๋ณ๊ฒฝ๊ณผ ํ์ ๋ณ๊ฒฝ์ด ์ํ ๊ตฌ๊ฐ. ํ์ผ ํฌ๋งท๋ง์ผ๋ก๋ ๋ชป ํ๊ณ ํ ์ด๋ธ ํฌ๋งท์ field-id๊ฐ ํ์
AI-assisted
1. ์คํค๋ง๋ ๊ณ์ ๋ฐ๋๋ค
ํ ์ด๋ธ์ ํ ๋ฒ ์ค๊ณํ๊ณ ๋๋๋ ๊ฒฝ์ฐ๋ ์๊ณ ๋ฐ๋๋ ์ด์ ๋ ๋์ฒด๋ก ์ ์ผ๋ก ์ขํ์ง๋ค.
- ์ ๊ท ์งํ ์๊ตฌ: ๋ง์ผํ
์์ ์ ์
์ฑ๋๋ณ ๋ถ์์ ์์ฒญํ๋ฉด
utm_source์ปฌ๋ผ์ด ๋ถ๋๋ค - ์์ค ์์คํ
๋ณ๊ฒฝ: ์๋ฅ ์๋น์ค๊ฐ
user_name์first_name๊ณผlast_name์ผ๋ก ์ชผ๊ฐ๋ฉด ๊ทธ๋๋ก ๋ฐ๋ผ์จ๋ค - CDC๋ก ๋ค์ด์ค๋ DDL: ์ด์ DB์์
ALTER TABLE์ด ์คํ๋๋ฉด ๋ณ๊ฒฝ ์ด๋ฒคํธ๊ฐ ํ์ดํ๋ผ์ธ์ผ๋ก ํ๋ฌ์จ๋ค
์ด์ DB๋ผ๋ฉด ALTER TABLE๋ก ๋๋ ์ผ์ธ๋ฐ ๋ฐ์ดํฐ ๋ ์ดํฌ์์๋ ์๋ ์ด์ ๋ก ์ฌ์ ์ด ๋ค๋ฅด๋ค.
- ์คํค๋ง๊ฐ ํฉ์ด์ ธ ์๋ค: DB๋ ์นดํ๋ก๊ทธ์ ์คํค๋ง ์ ์๊ฐ ํ๋๋ฟ์ด๊ณ ๋ฐ์ดํฐ ํ์ผ๋ DB ํ๋ก์ธ์ค๋ง ๋ง์ง๋ค. ๋ ์ดํฌ๋ ํ์ผ๋ง๋ค ์๊ธฐ ์คํค๋ง๋ฅผ ํ๊ณ ์์ด ๊ณ ์น ๋์์ด ์์ญ๋ง ๊ฐ๋ค
- ์์์ฑ์ด ์๋ค: DB์ DDL์ ๋ฝ์ ๊ฑธ๊ณ ์ปค๋ฐํ๋ฏ๋ก ์ค๊ฐ ์ํ๊ฐ ๋ ธ์ถ๋์ง ์๋๋ค. ํ์ผ 10๋ง ๊ฐ๋ฅผ ๋ค์ ์ฐ๋ ๋์ค์ ๋๊ฐ ์กฐํํ๋ฉด ์ ๋ฐ์ ์ ์คํค๋ง ์ ๋ฐ์ ์ ์คํค๋ง์ธ ์ํ๊ฐ ๊ทธ๋๋ก ๋ณด์ธ๋ค
- ์ฐ๋ ์ฃผ์ฒด๊ฐ ์ฌ๋ฟ์ด๋ค: DB๋ ๋จ์ผ ์ง์ ์ ์ด๋ค. ๋ ์ดํฌ์ ๊ฐ์ ๊ฒฝ๋ก์๋ Spark ๋ฐฐ์น, Flink ์คํธ๋ฆฌ๋ฐ, ๋ค๋ฅธ ํ job์ด ๊ฐ์ ์ด๋ค. โ์ง๊ธ๋ถํฐ ์ ์คํค๋ง๋ก ์ฐ์ธ์โ๋ฅผ ๊ฐ์ ํ ์ฃผ์ฒด๊ฐ ์๋ค
2. ํ์ผ์ ๊ณ ์น์ง ์๊ธฐ ๋๋ฌธ์ ์๊ธฐ๋ ๋ฌธ์
๋ฐฐ์น๊ฐ ๋ ๋๋ง๋ค ํ ์ด๋ธ์ ํ์ผ์ด ์์ด๊ณ ๊ฐ ํ์ผ์๋ ๊ทธ๋์ ์คํค๋ง๊ฐ ๋ฐํ ์๋ค.
s3://lake/orders/
dt=2024-03-01/part-0.parquet id, user_name, amount
dt=2024-03-02/part-0.parquet id, user_name, amount
...
dt=2026-08-01/part-0.parquet id, user_name, amount, country โ ์ปฌ๋ผ ์ถ๊ฐ
dt=2026-08-02/part-0.parquet id, user_name, amount, country์ปฌ๋ผ์ ์ถ๊ฐํ๋ค๊ณ 2024๋ ํ์ผ์ ๋ค์ ์ฐ์ง๋ ์๋๋ค.
- ์ฌ์์ฑ ๋น์ฉ: ํํ๋ฐ์ดํธ๋ฅผ ๋ค์ ์ฐ๋ ค๋ฉด ์๊ฐ๊ณผ ์ปดํจํธ๊ฐ ๊ทธ๋งํผ ๋ ๋ค
- ๊ฐ์ฒด ์คํ ๋ฆฌ์ง ์ ์ฝ: S3 ๊ฐ์ฒด๋ ๋ถ๋ถ ์์ ์ด ์ ๋๋ค. ํต์งธ๋ก ๋ฎ์ด์ฐ๋ ๊ฒ๋ง ๊ฐ๋ฅํ๋ค
- ์ฝ๋ ์ชฝ์ด ์ฌ๋ฟ: ๋์๋ณด๋, ML ํ์ดํ๋ผ์ธ, ๋ฆฌ๋ฒ์ค ETL์ด ๊ฐ์ ๋ค๋ฅธ ์์ ์ ๋ฐฐํฌ๋๋ค. ๋ชจ๋๋ฅผ ํ ๋ฒ์ ๋ง์ถ ์ ์๋ค
๊ทธ๋์ ํ ํ ์ด๋ธ ์์ ์คํค๋ง๊ฐ ๋ค๋ฅธ ํ์ผ์ด ๊ณต์กดํ๋ ์ํ๋ฅผ ์ ์ ๋ก ์ค๊ณํ๋ค. ์ฝ๋ ์์ ์ ์ฐจ์ด๋ฅผ ํก์ํ๋ ๊ท์น์ด ์คํค๋ง ์งํ๋ค.
writer schema์ reader schema
- writer schema: ๊ทธ ํ์ผ์ ๋ง๋ค ๋ ์ด ์คํค๋ง. ํ์ผ์ ๋ฐํ ๋ฐ๋์ง ์๋๋ค
- reader schema: ์ง๊ธ ์ฝ๋ ์ฝ๋๊ฐ ๊ธฐ๋ํ๋ ์คํค๋ง
- ๋์ด ์ด๊ธ๋ ์๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ๋ฉ์ธ์ง๊ฐ ์คํค๋ง ์งํ์ ์ค์ฒด์ด๊ณ ํ์ผ์ด ๋ถ๋ณ์ด๋ฏ๋ก ๋ง์ถ๋ ์ผ์ ํญ์ ์ฝ๋ ์ชฝ์์ ์ผ์ด๋๋ค
3. ํธํ์ฑ ๋ฐฉํฅ
์คํค๋ง ๋ณ๊ฒฝ์ ์น์ธํ ์ง ํ๋จํ๋ ๊ธฐ์ค์ผ๋ก, ๋ ๋ฐฉํฅ์ด ์๋ค.
backward ์ ์คํค๋ง๋ก ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๋ค
v2 ์ฝ๋ โ v1 ๋ฐ์ดํฐ โ
forward ์ ์คํค๋ง๋ก ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๋ค
v1 ์ฝ๋ โ v2 ๋ฐ์ดํฐ โ
full ์๋ฐฉํฅ ๋ชจ๋๋ฐ์ดํฐ๋ฅผ ์ฐ๋ ์ชฝ๊ณผ ์ฝ๋ ์ชฝ์ ๊ฐ์ ์๊ฐ์ ๋ฐฐํฌํ ์๋ ์๋ค. ์ด๋ ์ชฝ์ ๋จผ์ ์ฌ๋ ค๋ ์ ๊นจ์ง๋์ง๋ฅผ ํธํ์ฑ ๋ฐฉํฅ์ด ์ ํ๋ค.
- backward๋ง ๋ณด์ฅ: ์ฝ๋ ์ชฝ(์ปจ์๋จธ, downstream job)์ ๋จผ์ ๋ฐฐํฌํ๋ค. ์ ์ฝ๋๊ฐ ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์์ผ๋ฏ๋ก ๊ทธ์ฌ์ด ๋ค์ด์ค๋ ์ ๋ฐ์ดํฐ๋ ์ฒ๋ฆฌ๋๋ค
- forward๋ง ๋ณด์ฅ: ์ฐ๋ ์ชฝ(ํ๋ก๋์, ingestion job)์ ๋จผ์ ๋ฐฐํฌํ๋ค. ์ ์ฝ๋๊ฐ ์ ๋ฐ์ดํฐ์ ๋ชจ๋ฅด๋ ํ๋๋ฅผ ๋ฌด์ํ๊ณ ์ฝ๋๋ค
- full: ์์๋ฅผ ์ ๊ฒฝ ์ฐ์ง ์์๋ ๋๋ค. ๋์ ํ์ฉ๋๋ ์คํค๋ง ๋ณ๊ฒฝ์ด ์ข์์ง๋ค
๊ธฐ๋ณธ๊ฐ์ผ๋ก backward๋ฅผ ๋๋ ๊ณณ์ด ๋ง๋ค. ๋ถ์ ํ์ดํ๋ผ์ธ์์๋ ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ฝ๋ ์ผ์ด ์ฆ์์ ์ ์ฝ๋๊ฐ ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ง ๋ชปํ๋ฉด ๊ณง๋ฐ๋ก ์ฅ์ ๊ฐ ๋๋ค.
๋ฐฉํฅ ์ด๋ฆ์ด ํท๊ฐ๋ฆด ๋
- ์ด๋ฆ์ ์ ์คํค๋ง ๊ธฐ์ค์ด๋ค. backward๋ โ๋ค์ชฝ(์ ๋ฐ์ดํฐ)์ ํฅํด ํธํ๋๋คโ๋ ๋ป์ด๋ค
- ํ๋จํ ๋๋ ์ด๋ฆ ๋์ โ๋๊ฐ ๋จผ์ ๋ฐฐํฌ๋์ด์ผ ์ ๊นจ์ง๋โ๋ฅผ ๋ฌผ์ผ๋ฉด ๋น ๋ฅด๋ค
- backward๋ฉด ์ปจ์๋จธ ๋จผ์ , forward๋ฉด ํ๋ก๋์ ๋จผ์ ๋ค
4. ๋ณ๊ฒฝ ์ ํ๋ณ ์์ ๋
| ๋ณ๊ฒฝ | backward | forward | ์ ํ์ผ ์ฝ๊ธฐ ๊ฒฐ๊ณผ |
|---|---|---|---|
| ๊ธฐ๋ณธ๊ฐ ์๋ ์ปฌ๋ผ ์ถ๊ฐ | ์์ | ์์ | ์ ํ์ผ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฑ์์ง |
| ๊ธฐ๋ณธ๊ฐ ์๋ ์ปฌ๋ผ ์ถ๊ฐ | ๊นจ์ง | ์์ | ์ ํ์ผ์์ ๊ฐ์ ๋ง๋ค ๋ฐฉ๋ฒ์ด ์์ |
| ์ปฌ๋ผ ์ญ์ | ์์ | ๊ธฐ๋ณธ๊ฐ์ด ์๋ ํ๋๋ฉด ์์ | ์ ์ฝ๋๊ฐ ์ ์ฝ์ผ๋ฏ๋ก ๋ฌดํด |
| ์ปฌ๋ผ ์ด๋ฆ ๋ณ๊ฒฝ | aliases๋ field-id๊ฐ ์์ผ๋ฉด ์์ | ๊นจ์ง | ๋์ ์๋จ์ด ์์ผ๋ฉด ์กฐ์ฉํ null |
ํ์
ํ์ฅ (intโlong) | ์์ | ๊นจ์ง | ๋์ ํ์ ์ด ์ข์ ๊ฐ์ ๋ด์ |
ํ์
์ถ์ (longโint) | ๊นจ์ง | ์์ | ์ ์ฝ๋๊ฐ ์ ๊ฐ์ ๋ด์ง ๋ชปํด ์์ธ |
ํ์
๋ณ๊ฒฝ (intโstring) | ๊นจ์ง | ๊นจ์ง | reader๊ฐ ์์ธ๋ฅผ ๋์ง |
| ์ปฌ๋ผ ์์ ๋ณ๊ฒฝ | ์์ | ์์ | ์ด๋ฆ์ผ๋ก ๋งค์นญํ๋ฏ๋ก ๋ฌด๊ด |
๋ ๊ตฌ๊ฐ์ด ์ค๋ฌด์์ ์ฌ๊ณ ๋ฅผ ๋ธ๋ค.
์ปฌ๋ผ ์ด๋ฆ ๋ณ๊ฒฝ์ ๋์ ์๋จ์ด ์์ผ๋ฉด ์๋ฌ ์์ด ํ๋ฆฐ ๊ฒฐ๊ณผ๋ฅผ ๋ธ๋ค.
-- user_name์ customer_name์ผ๋ก ๋ฐ๊พธ๊ณ ์ ํ์ผ๋ถํฐ ๊ทธ ์ด๋ฆ์ผ๋ก ์ ์ฅํ ๋ค
SELECT customer_name, count(*) FROM orders GROUP BY 1;
-- 2024~2025 ๊ตฌ๊ฐ์ด ์ ๋ถ null ํ ์ค๋ก ๋ญ์น๋คreader๋ โ์์ฒญํ ์ปฌ๋ผ์ด ์ด ํ์ผ์ ์๋คโ๊ณ ํ๋จํด null์ ๋๋ ค์ค๋ค. ์์ธ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ ์ง๊ณ ์ซ์๋ง ์กฐ์ฉํ ์ด๊ธ๋๋ค.
ํ์
๋ณ๊ฒฝ์ ๊ทธ ์๋ฆฌ์์ ์คํจํ๋ค. amount๋ฅผ INT๋ก ์๋ค๊ฐ STRING์ผ๋ก ๋ฐ๊พธ๋ฉด ์ ํ์ผ์ 4๋ฐ์ดํธ ์ ์๋ฅผ ๋ฌธ์์ด๋ก ํด์ํ ๋ฐฉ๋ฒ์ด ์๋ค.
Parquet column cannot be converted in file s3://lake/orders/dt=2024-03-01/part-0.parquet
Column: [amount], Expected: string, Found: INT32
์ฃผ์: ์๋ฌ๋ณด๋ค ์กฐ์ฉํ null์ด ์ํํ๋ค
- ํ์ ๋ณ๊ฒฝ์ ํ์ดํ๋ผ์ธ์ด ๋ฉ์ถ๋ฏ๋ก ๊ณง๋ฐ๋ก ๋ฐ๊ฒฌ๋๋ค
- ์ด๋ฆ ๋ณ๊ฒฝ์ ์๋ฌด ์ ํธ๊ฐ ์๋ค. ๋์๋ณด๋ ์ซ์๊ฐ ์ค์ด๋ ๊ฒ์ ๋๊ตฐ๊ฐ ์์์ฑ ๋๊น์ง ๋ฐฉ์น๋๋ค
- ์คํค๋ง๋ฅผ ๋ฐ๊พผ ๋ค์๋ ๊ณผ๊ฑฐ ๊ตฌ๊ฐ์ ์ํ๋งํด
null๋น์จ์ ํ์ธํ๋ค
5. ํ์ผ ํฌ๋งท ๊ด์
ํ์ผ ํฌ๋งท๋ง๋ค ๋์ ๋ฒ์๊ฐ ๋ค๋ฅด๋ค.
Avro๋ ๊ท๊ฒฉ์ ๋งค์นญ ๊ท์น์ ๋ฃ์๋ค. ํ์ผ ํค๋์ writer schema๊ฐ ๋ค์ด ์๊ณ ์ฝ๋ ์ชฝ์ด reader schema๋ฅผ ๋ฐ๋ก ๋๊ธฐ๋ฉด ๋์ ๋์กฐํด ํด์ํ๋ค.
{
"name": "country",
"type": "string",
"default": "UNKNOWN"
}{
"name": "customer_name",
"type": "string",
"aliases": ["user_name"]
}default: ์ ํ์ผ์ ์๋ ํ๋๋ฅผ ์ด ๊ฐ์ผ๋ก ์ฑ์ด๋ค. backward ํธํ์ ํต์ฌ ์ฅ์น๋คaliases: ์ ์ด๋ฆ์ ์ ์ด๋๋ฉด reader๊ฐ ๊ทธ ์ด๋ฆ์ผ๋ก๋ ํ๋๋ฅผ ์ฐพ๋๋ค- ํ์
์น๊ฒฉ:
intโlongโfloatโdouble,stringโbytes๊ฐ ๊ท๊ฒฉ์ ์ ์๋ผ ์๋ค
Parquet๊ณผ ORC๋ ์คํค๋ง๋ฅผ ๊ธฐ๋ก๋ง ํ๋ค. ํ์ผ๋ง๋ค ์ปฌ๋ผ ๊ตฌ์ฑ์ด ๋ค๋ฅผ ๋ ์ด๋ป๊ฒ ํฉ์น ์ง๋ ๊ท๊ฒฉ ๋ฐ์ด๊ณ ์์ง์ด ์ ํ๋ค.
# ํ์ผ๋ณ ์คํค๋ง๋ฅผ ํฉ์ณ์ ์ฝ๊ธฐ. ํ์ผ ์๋งํผ footer๋ฅผ ์ฝ์ด์ผ ํด์ ๋๋ฆฌ๋ค
spark.read.option("mergeSchema", "true").parquet("s3://lake/orders/")์ปฌ๋ผ ์ถ๊ฐ์ ์ญ์ ๋ ์ด ๋ฐฉ์์ผ๋ก ํก์๋์ง๋ง ์ด๋ฆ ๋ณ๊ฒฝ์ ๋ถ๊ฐ๋ฅํ๋ค. ์ด๋ฆ์ด ๊ณง ์๋ณ์๋ผ์ ๋ฐ๊พธ๋ ์๊ฐ ๋ค๋ฅธ ์ปฌ๋ผ์ด ๋๋ค.
6. ํ ์ด๋ธ ํฌ๋งท ๊ด์
ํ ์ด๋ธ ํฌ๋งท์ ์ด๋ฆ ๋์ ID๋ก ์ปฌ๋ผ์ ์๋ณํด ์ด ๋ฌธ์ ๋ฅผ ํผ๋ค.
ํ
์ด๋ธ ์คํค๋ง 1: order_id 2: user_name 3: amount
โ rename
1: order_id 2: customer_name 3: amount
2024๋
Parquet field-id 2์ ์ ์ฅ๋ ๊ฐ โ ์ ์ด๋ฆ์ผ๋ก ๊ทธ๋๋ก ์ฝํ
2026๋
Parquet field-id 2์ ์ ์ฅ๋ ๊ฐ โ ๋์ผIceberg๋ ์ปฌ๋ผ๋ง๋ค field-id๋ฅผ ๋ถ์ฌํ๊ณ Parquet ํ์ผ ์์๋ ๊ทธ ID๋ฅผ ์ฌ๋๋ค. ์ด๋ฆ์ด ๋ฐ๋์ด๋ ID๋ก ์ฐพ์ผ๋ฏ๋ก ๊ธฐ์กด ํ์ผ์ ๋ค์ ์ธ ํ์๊ฐ ์๋ค.
ALTER TABLE analytics.orders RENAME COLUMN user_name TO customer_name;
-- ๋ฉํ๋ฐ์ดํฐ๋ง ์์ ๋๋ค. ๋ฐ์ดํฐ ํ์ผ์ ๊ทธ๋๋ก๋คDelta๋ Column Mapping์ ์ผ๋ฉด ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
ALTER TABLE orders SET TBLPROPERTIES (
'delta.columnMapping.mode' = 'name',
'delta.minReaderVersion' = '2',
'delta.minWriterVersion' = '5'
);| ๋์ | Iceberg | Delta | Hudi |
|---|---|---|---|
| ์ปฌ๋ผ ์ถ๊ฐ | ์ง์ | ์ง์ | ์ง์ |
| ์ปฌ๋ผ ์ญ์ | ์ง์ | Column Mapping ํ์ | schema.on.read ํ์ฑํ ํ์ |
| ์ปฌ๋ผ ์ด๋ฆ ๋ณ๊ฒฝ | ์ง์ | Column Mapping ํ์ | schema.on.read ํ์ฑํ ํ์ |
| ์ปฌ๋ผ ์์ ๋ณ๊ฒฝ | ์ง์ | REPLACE COLUMNS๋ก ๊ฐ๋ฅ | ์ง์ |
| ํ์ ์น๊ฒฉ | ์ง์ | ์ง์ | ์ง์ |
| ํํฐ์ ์คํ ๋ณ๊ฒฝ | ์ง์, ์ฌ์์ฑ ๋ถํ์ | Liquid Clustering์ผ๋ก ๋์ | ์ ํ์ |
ํํฐ์ ์คํ ์งํ: Iceberg์๋ง ์๋ ๊ฒ
- ํํฐ์ ๊ธฐ์ค์ ์ผ๋ณ์์ ์๊ฐ๋ณ๋ก ๋ฐ๊ฟ๋ ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ์์ฑํ์ง ์๋๋ค
- ์ ํ์ผ์ ์ ์คํ, ์ ํ์ผ์ ์ ์คํ์ผ๋ก ๊ธฐ๋ก๋๊ณ query planning์ด ๋์ ํจ๊ป ์ฒ๋ฆฌํ๋ค
- Hive ๋ฐฉ์์์๋ ํํฐ์ ์ปฌ๋ผ์ด ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ผ ๋ฐ๊พธ๋ ค๋ฉด ์ ์ฒด๋ฅผ ๋ค์ ์จ์ผ ํ๋ค
7. ์คํธ๋ฆฌ๋ฐ ๊ด์
Kafka์๋ ํ ์ด๋ธ ํฌ๋งท์ด ์๊ณ ํ๋ก๋์์ ์ปจ์๋จธ๊ฐ ๊ฐ์ ๋ฐฐํฌ๋๋ฏ๋ก ์คํค๋ง ๋ถ์ผ์น๊ฐ ์์ ๋ฐ์ํ๋ค.
ํ๋ก๋์ v2 ๋ฐฐํฌ โ country ํ๋๊ฐ ๋ถ์ ๋ฉ์์ง ๋ฐํ
์ปจ์๋จธ A (v1) โ country๋ฅผ ๋ชจ๋ฆ. ๋ฌด์ํ๊ณ ์ฝ์ด์ผ ํจ
์ปจ์๋จธ B (v2) โ country๋ฅผ ์ฌ์ฉSchema Registry๊ฐ ์คํค๋ง๋ฅผ ์ค์์์ ๊ด๋ฆฌํ๊ณ ๋ฐฐํฌ ์ ์ ํธํ์ฑ์ ๊ฒ์ฌํ๋ค. ์ ์ฑ ์ ์ฃผ์ ๋ณ๋ก ์ค์ ํ๋ค.
# ํน์ ํ ํฝ์ ํธํ์ฑ ์ ์ฑ
์ค์
curl -X PUT http://schema-registry:8081/config/orders-value \
-H "Content-Type: application/json" \
-d '{"compatibility": "BACKWARD"}'| ์ ์ฑ | ๊ฒ์ฌ ๋ฒ์ |
|---|---|
BACKWARD | ์ง์ ๋ฒ์ ๊ณผ backward ํธํ. ๊ธฐ๋ณธ๊ฐ |
BACKWARD_TRANSITIVE | ๋ชจ๋ ์ด์ ๋ฒ์ ๊ณผ backward ํธํ |
FORWARD | ์ง์ ๋ฒ์ ๊ณผ forward ํธํ |
FORWARD_TRANSITIVE | ๋ชจ๋ ์ด์ ๋ฒ์ ๊ณผ forward ํธํ |
FULL | ์ง์ ๋ฒ์ ๊ณผ ์๋ฐฉํฅ ํธํ |
FULL_TRANSITIVE | ๋ชจ๋ ์ด์ ๋ฒ์ ๊ณผ ์๋ฐฉํฅ ํธํ |
NONE | ๊ฒ์ฌํ์ง ์์ |
_TRANSITIVE๊ฐ ๋ถ์ ์ ์ฑ
์ ์ ์ฒด ์ด๋ ฅ์ ๊ฒ์ฌํ๋ค. ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ฒ๋ฆฌํ๋ ํ์ดํ๋ผ์ธ์ด๋ผ๋ฉด ์ด์ชฝ์ ์ด๋ค. ์ง์ ๋ฒ์ ๋ง ๋ณด๋ ์ ์ฑ
์ผ๋ก๋ v1 ๋ฐ์ดํฐ๋ฅผ v3 ์ฝ๋๊ฐ ์ฝ์ ์ ์๋ค๋ ๋ณด์ฅ์ด ์๋ค.
์ ์ฑ ์ NONE์ผ๋ก ๋๋ฉด
- ํธํ์ฑ ๊ฒ์ฌ๊ฐ ์ฌ๋ผ์ ธ ์ด๋ค ๋ณ๊ฒฝ์ด๋ ๋ฑ๋ก๋๋ค
- ์ปจ์๋จธ๊ฐ ๋ฐํ์์ ์ญ์ง๋ ฌํ ์ค๋ฅ๋ก ๋ฉ์ถ๋ค. ๊ทธ๋๋ ์ด๋ฏธ ๋ฌธ์ ๋ฉ์์ง๊ฐ ํ ํฝ์ ์์ธ ๋ค๋ค
- ๊ฐ๋ฐ ํ๊ฒฝ์์๋ง ์ฐ๊ณ ์ด์์์๋ ์ต์
BACKWARD๋ฅผ ๊ฑด๋ค
8. ์ํฐํจํด
- ์ปฌ๋ผ ์ด๋ฆ ์ฌํ์ฉ: ์ง์ด ์ปฌ๋ผ์ ์ด๋ฆ์ ๋ค๋ฅธ ์๋ฏธ๋ก ๋ค์ ์ฐ๋ฉด ์ ํ์ผ์ ๊ฐ์ด ์ ์๋ฏธ๋ก ์ฝํ๋ค. ์ด๋ฆ์ ์ํด์ํค๊ณ ์ ์ด๋ฆ์ ๋ง๋ ๋ค
- ํ์
์ผ๋ก ์๋ฏธ ๋ฐ๊พธ๊ธฐ:
status๋ฅผINT์ฝ๋์์STRING๋ ์ด๋ธ๋ก ๋ฐ๊พธ๋ ์. ์ ์ปฌ๋ผ์ ๋ง๋ค๊ณ ์ ์ปฌ๋ผ์ ์ ์งํ๋ค ์ฌ์ฉ์ฒ๊ฐ ์ฌ๋ผ์ง๋ฉด ์ง์ด๋ค mergeSchema์์ ํ์ฑํ: ํธํ์ง๋ง ์คํ๋ก ์๊ธด ์ปฌ๋ผ๊น์ง ์คํค๋ง์ ๋ค์ด์จ๋ค.user_id์userid๊ฐ ๋ฐ๋ก ์์ธ๋ค- ๊ฒ์ฆ ์๋ ๋ณ๊ฒฝ: ์คํค๋ง๋ฅผ ๋ฐ๊พผ ๋ค ๊ณผ๊ฑฐ ๊ตฌ๊ฐ์
null๋น์จ์ ํ์ธํ์ง ์์ผ๋ฉด ์กฐ์ฉํ ์์ค์ ๋์น๋ค - ํ ์ด๋ธ ํฌ๋งท ์์ด rename: ๊ฒฝ๋ก ๊ธฐ๋ฐ Parquet ํ ์ด๋ธ์์ ์ด๋ฆ์ ๋ฐ๊พธ๋ ๊ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ฒ๋ฆฌ๋ ๊ฒ๊ณผ ๊ฐ๋ค. ์ฎ๊ธธ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ์ ์ฒด ์ฌ์์ฑ์ด ์ ์ผํ ์๋จ์ด๋ค
9. ์ธต๋ณ ๋์ ๋ฒ์
๋ณ๊ฒฝ ์ ํ์ ๋ฐ๋ผ ํ์ํ ์ธต์ด ๋ค๋ฅด๋ค.
| ํ๋ ค๋ ๊ฒ | ํ์ํ ๊ฒ |
|---|---|
| ์ปฌ๋ผ ์ถ๊ฐยท์ญ์ | ํ์ผ ํฌ๋งท๋ง์ผ๋ก ๊ฐ๋ฅ. ์์ง ์ค์ ์ผ๋ก ํก์ |
| ์ปฌ๋ผ ์ด๋ฆ ๋ณ๊ฒฝ | ํ
์ด๋ธ ํฌ๋งท์ field-id. Avro๋ผ๋ฉด aliases |
| ํ์ ํ์ฅ | ํ์ผ ํฌ๋งท ๊ท๊ฒฉ์ด ์ ์ํ ์น๊ฒฉ ๋ฒ์ ์์์ |
| ํํฐ์ ๊ธฐ์ค ๋ณ๊ฒฝ | Iceberg์ ํํฐ์ ์คํ ์งํ |
| ํ๋ก๋์ยท์ปจ์๋จธ ์์ฐจ ํก์ | Schema Registry ํธํ์ฑ ์ ์ฑ |
๋ ์ดํฌ๋ฅผ ์๋ก ์ค๊ณํ๋ค๋ฉด ํ ์ด๋ธ ํฌ๋งท์ ์ฒ์๋ถํฐ ๋์ ํ๋ ํธ์ด ๋ซ๋ค.