diff --git a/content/post/DevCourse/day-44/index.md b/content/post/DevCourse/day-44/index.md
index d4af1ac..756ecb9 100644
--- a/content/post/DevCourse/day-44/index.md
+++ b/content/post/DevCourse/day-44/index.md
@@ -12,18 +12,124 @@ tags = [
]
+++
+
+
# ๐ย ๊ณต๋ถ ๋ด์ฉ
## Airflow ์ค์ต : DAG ๊ตฌํํ๊ธฐ
## Primary Key Uniqueness ๋ณด์ฅํ๊ธฐ
+### ํด์ฆ
+
+```python
+# Weather_to_Redshift_v2.py
+
+INSERT INTO {schema}.{table}
+SELECT date, temp, min_temp, max_temp FROM (
+SELECT *, ROW_NUMBER() OVER (PARTITION BY date ORDER BY created_date DESC) seq
+FROM t
+)
+WHERE seq = 1;
+```
+
+> ์ฌ๊ธฐ์ transaction์ผ๋ก ์ฒ๋ฆฌ๋์ด์ผ ํ๋ ์ต์ ๋ฒ์์ SQL๋ค์?
+
+### Upsert
+
+> Insert & Update
+
+- primary key๋ฅผ ๊ธฐ์ค์ผ๋ก
+ - ์กด์ฌํ๋ ๋ ์ฝ๋๋ผ๋ฉด, ์ ์ ๋ณด๋ก ์์
+ - ์กด์ฌํ์ง ์๋ ๋ ์ฝ๋๋ผ๋ฉด ์ ๋ ์ฝ๋ ์ ์ฌ
+- DW๋ง๋ค UPSERT๋ฅผ ํจ์จ์ ์ผ๋ก ์คํํด์ฃผ๋ ๋ฌธ๋ฒ์ ์ง์ํด์ค
+ - [์์ธํ ์ค๋ช
](#mysql-to-redshift-dag)
+
## Backfill
-###
+> ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ๋ฐ ์คํจํ๊ฑฐ๋, ์ฝ์ด์จ ๋ฐ์ดํฐ์ ๋ฌธ์ ๋๋ฌธ์ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ์ฌ์คํํ์ฌ ๋ค์ ์ฝ์ด์์ผ ํ๋ ๊ณผ์
+
+### Incremental Update ์คํจ
+
+- ํ๋ฃจ์ ํ ๋ฒ ๋์ํ๋ incremental update
+- ์ค๊ฐ์ ๋ฉฐ์น ๋์ ์ด ๊ณผ์ ์ด ์คํจํ ๊ฒฝ์ฐ, ๊ทธ ์ดํ์ ์คํ์๋ ์ํฅ์ ์ฃผ๊ฒ ๋์ด์์
+- ์คํจํ ๋ถ๋ถ์ ์ฌ์คํ -> ์ผ๋ง๋ ์ค์ํ๊ฐ?
+
+### Backfill์ ์ฉ์ด์ฑ
+
+> ์คํจํ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ์ ์ฌ์คํ์ด ์ผ๋ง๋ ์ฉ์ดํ ๊ตฌ์กฐ์ธ๊ฐ?
+
+- full refresh
+
+ - ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ๋ค์ ์คํํ๋ฉด ๋จ
+ - backfill ๋ถํ์
+
+- Incremental Update
+ - ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์ฝ์ด์์ผ ํ๋ฉด ์ฒ์๋ถํฐ ๋ชจ๋ ๋ค ์ฌ์คํํด์ผ ํจ ( ํจ์จ์ฑ์ ๋ ์ข์ ์ ์์ง๋ง, ์ด์&์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง)
+ - backfill ํ์
+
+> Airflow : backfill์ ์ฝ๊ฒ ํ ์ ์๋๋ก ๋์์ธ๋จ
+
+### Backfill of Daily DAG
+
+#### Daily DAG
+
+- ์ง๊ธ ์๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ด์ ๋ ์ง๋ฅผ ๊ณ์ฐ, ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ด
+- ๋งค์ผ ๋ฌธ์ ์์ด ๋์ํ๋ฉด OK, BUT ๋ฐ์ดํฐ ์ฝ์ด์ค๊ธฐ์ ์คํจํ๋ ๊ฒฝ์ฐ ? -> ํน์ ๋ ์ง์ ๋ฐ์ดํฐ๊ฐ ๋น ์ ธ์์ -> ์คํจํ ๋ ๊ธฐ์ค์ผ๋ก ์ ๋ ์ ๋ฐ์ดํฐ๋ฅผ ์
๋ฐ์ดํธ ํ๋ ์ฝ๋๋ฅผ ์๋ก ์์ฑํด์ผ ํจ (์ํ๋ ๋ ์ง๋ฅผ ํ๋์ฝ๋ฉํ๋ ๋ฐฉ์)
+
+ ```python
+ from datetime import datetime, timedelta
+ # y = datetime.now() - timedelta(1)
+ # yesterday = datetime.strftime(y, '%Y-%m-%d')
+ yesterday = '2023-01-01'
+ ```
+
+- ์ค์ํ๊ธฐ ์ฝ๊ณ ์์ ํ๋ ๋ฐ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆผ
+
+**`DAG๋ฅผ ์์ฑํ ๋ ๋ถํฐ backfill์ ์ฝ๊ฒ ๋ง๋ค์ด์ผ ํจ`**
+
+### Backfill์ ์ฉ์ดํ๊ฒ ํ๋ ๊ตฌ์กฐ
+
+- ๋ ์ง๋ณ๋ก backfill ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ก
+- ๋ ์ง๋ ์์คํ
์์ ETL ์ธ์๋ก ์ ๊ณต
+- ๋ ์ง๋ฅผ ๋ฐ๋ก ๊ณ์ฐํ์ง ์๊ณ , ์์คํ
์ด ์ ํด์ค ๋ ์ง๋ฅผ ์ฌ์ฉ
+
+#### Airflow์ ๊ตฌ์กฐ
+
+- ETL๋ณ๋ก ์คํ๋ ์ง, ๊ฒฐ๊ณผ๋ฅผ ๋ฉํ๋ฐ์ดํฐ DB์ ๊ธฐ๋ก
+- ๋ชจ๋ DAG ์คํ์ `execution_date` ์ง์
+- `execution_date`๋ฅผ ๋ฐํ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ๋๋ก ์ฝ๋ ์์ฑ
+
+## DAG Parameter
+
+### date ๊ด๋ จ parameter ์ ๋ฆฌ
+
+[Daily Incremental Update](#daily-dag) ๊ตฌํ
+
+#### start_date
+
+- 2020-11-07์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ด
+- 2020-11-08 ๋ถํฐ ETL ๋์
+
+ -> start_date : 2020-11-07
+
+## MySQL to Redshift DAG
# ๐ย CHECK
_(์ด๋ ต๊ฑฐ๋ ์๋กญ๊ฒ ์๊ฒ ๋ ๊ฒ ๋ฑ ๋ค์ ํ์ธํ ๊ฒ๋ค)_
+### openweathermap api
+
+- https://openweathermap.org/api/one-call-3
+- ๊ตฌ๋
ํ ์ดํ์ ๋ฐ๋ก ํ๊ฐ๊ฐ ์๋๋ ๋ฌธ์ ๊ฐ ์์..
+- ๊ธฐ์กด ์ฝ๋๋ฅผ 2.5 -> 3.0 ์ผ๋ก ๋ฐ๊ฟ์ผ ํจ
+
# โ ๋๋ ์