๋ฌธ์ ํด๊ฒฐ
CoreRx ์ด์ ์ค ๋ฐ์ํ ์ ์๋ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํฉ๋๋ค. ์บ์ ๋ถ์ผ์น, ETL ์คํจ, Docker/Superset ์ด์๋ฅผ ๋ค๋ฃน๋๋ค.
์บ์ ๊ด๋ จ ๋ฌธ์
๋์๋ณด๋ ๋ฐ์ดํฐ๊ฐ ์ค๋๋จ
์ฆ์: ๋์๋ณด๋์ ํ์๋๋ ๋ฐ์ดํฐ๊ฐ ์ต์ ์ ๋ก๋ ๋ด์ฉ์ ๋ฐ์ํ์ง ์์ต๋๋ค.
์์ธ๊ณผ ํด๊ฒฐ:
| ํ์ธ ์์ | ํ์ธ ์ฌํญ | ํด๊ฒฐ ๋ฐฉ๋ฒ |
|---|---|---|
| 1 | ์บ์ ๋ฉํ ์ํ ํ์ธ | ๋ฐ์ดํฐ ๊ด๋ฆฌ ํญ์์ last_refreshed ํ์ธ |
| 2 | ์บ์ ๊ฐฑ์ ์ด ์คํ๋์ง ์์ | refresh_all_kpi_cache() ์๋ ์คํ |
| 3 | ์บ์ ๊ฐฑ์ ์ด failed ์ํ | error_message ํ์ธ ํ ์์ธ ํด๊ฒฐ |
| 4 | ETL ์์ฒด๊ฐ ์คํ๋์ง ์์ | ETL ์คํฌ๋ฆฝํธ ์คํ ์ด๋ ฅ ํ์ธ |
์บ์ ๋ถ์ผ์น (์๋ณธ๊ณผ ์บ์ ์์น ๋ค๋ฆ)
์ฆ์: SQL Lab์์ ์๋ณธ ํ ์ด๋ธ์ ์ง์ ์กฐํํ ๊ฒฐ๊ณผ์ ์บ์ ํ ์ด๋ธ์ ์์น๊ฐ ๋ค๋ฆ ๋๋ค.
์์ธ๊ณผ ํด๊ฒฐ:
| ์์ธ | ํด๊ฒฐ ๋ฐฉ๋ฒ |
|---|---|
| ์บ์ ๊ฐฑ์ ํ ์๋ณธ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋จ | ์บ์ ์ฌ๊ฐฑ์ ์คํ |
| ์บ์ ๊ฐฑ์ ์ค ์๋ฌ๋ก ๋ถ๋ถ๋ง ๊ฐฑ์ ๋จ | ์ ์ฒด ์บ์ ์ฌ๊ฐฑ์ ์คํ |
| ์๋ณธ ์ฟผ๋ฆฌ์ ์บ์ Function์ ์ง๊ณ ๊ธฐ์ค ์ฐจ์ด | ๊ธ์ก ๋จ์(์ vs ๋ฐฑ๋ง์), ๊ธฐ๊ฐ ๋ฒ์, ํํฐ ์กฐ๊ฑด ํ์ธ |
์กฐ์น ์ ์ฐจ:
corerx_cache_meta์์ ํด๋น ์บ์์ ์ํ์ ๊ฐฑ์ ์๊ฐ์ ํ์ธํฉ๋๋ค.- ์ํ๊ฐ
failed์ด๋ฉดerror_message๋ฅผ ํ์ธํฉ๋๋ค. - ์ ์ฒด ์บ์๋ฅผ ์ฌ๊ฐฑ์ ํฉ๋๋ค.
SELECT refresh_all_kpi_cache(
'4b5b1d04-23f6-42a7-9fe5-acb0a9998c55',
'manual'
);์บ์ ๊ฐฑ์ ์คํจ (status = failed)
์ฆ์: corerx_cache_meta์ ์ํ๊ฐ failed๋ก ํ์๋ฉ๋๋ค.
์ผ๋ฐ์ ์ธ ์์ธ:
| ์๋ฌ ๋ฉ์์ง | ์์ธ | ํด๊ฒฐ |
|---|---|---|
| out of memory | PostgreSQL ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ | work_mem ์ค์ ํ์ธ ๋ฐ ์กฐ์ |
| deadlock detected | ๋์ ๊ฐฑ์ ์ถฉ๋ | ๋จ์ผ ์ธ์ ์์ ์ฌ์คํ |
| relation does not exist | ํ ์ด๋ธ ๋ฏธ์กด์ฌ | create_tables.py ์คํ ๋๋ ๋ง์ด๊ทธ๋ ์ด์
ํ์ธ |
| division by zero | ๋ถ๋ชจ๊ฐ 0์ธ ๋ฐ์ดํฐ | NULLIF ์ฒ๋ฆฌ ํ์ธ. DB Function ์ ๊ฒ |
ETL ๊ด๋ จ ๋ฌธ์
UBIST ์์ ํ์ฑ ์คํจ
์ฆ์: ubist_import.py ์คํ ์ ํค๋ ํ์ฑ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
์์ธ๊ณผ ํด๊ฒฐ:
| ์์ธ | ํด๊ฒฐ ๋ฐฉ๋ฒ |
|---|---|
| UBIST ์์ ํ์ผ ํ์ ๋ณ๊ฒฝ | ์ ํ์ผ์ ์ปฌ๋ผ ๊ตฌ์กฐ ํ์ธ. ํค๋ ํ(1~2ํ) ๋งคํ ์ฝ๋ ์์ ํ์ |
| ํ์ผ์ด ์์๋จ | UBIST์์ ํ์ผ ์ฌ๋ค์ด๋ก๋ |
| ์ธ์ฝ๋ฉ ๋ฌธ์ | ์์ ํ์ผ์ ๋ค์ ์ ์ฅ (UTF-8) |
๋๋ฒ๊น ์ ์ฐจ:
--dry-run์ต์ ์ผ๋ก ๋จผ์ ํ ์คํธํฉ๋๋ค.- ์๋ฌ ๋ฉ์์ง์์ ์คํจํ ํ ๋ฒํธ๋ฅผ ํ์ธํฉ๋๋ค.
- ํด๋น ํ์ ๋ฐ์ดํฐ๋ฅผ ์์ ์์ ์ง์ ํ์ธํฉ๋๋ค.
python3 scripts/ubist_import.py --file "UBIST_D1 Sales.xlsx" --dry-runETL ์คํ ์ค DB ์ฐ๊ฒฐ ๋๊น
์ฆ์: ETL ์คํ ์ค connection reset ๋๋ server closed the connection ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
์์ธ๊ณผ ํด๊ฒฐ:
| ์์ธ | ํด๊ฒฐ ๋ฐฉ๋ฒ |
|---|---|
| ๋คํธ์ํฌ ๋ถ์์ | ์๋ฒ ๋คํธ์ํฌ ์ํ ํ์ธ ํ ์ฌ์คํ |
| PostgreSQL ํ์์์ | statement_timeout ์ค์ ํ์ธ (๋์ฉ๋ ETL์ ์ ํ ํด์ ํ์) |
| Docker ์ปจํ ์ด๋ ์ฌ์์ | Supabase Docker ์ํ ํ์ธ (docker ps) |
supply_qty ํ์ ์๋ฌ
์ฆ์: ๋งค์ถ ์ง๊ณ ์ cannot cast text to numeric ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
์์ธ: kpis_gap_rows.supply_qty๋ TEXT ํ์
์
๋๋ค. ํฉ์ฐ ์ ๋ฐ๋์ CAST๊ฐ ํ์ํฉ๋๋ค.
ํด๊ฒฐ: ๋ชจ๋ ์ฟผ๋ฆฌ์์ supply_qty::numeric ๋๋ CAST(supply_qty AS numeric)์ ์ฌ์ฉํฉ๋๋ค.
์ฃผ์:
supply_qty์ปฌ๋ผ์ ๊ธฐ์กด ํ ์ด๋ธ(kpis_gap_rows)์ ์ปฌ๋ผ์ด๋ฏ๋ก ํ์ ๋ณ๊ฒฝ(ALTER)์ด ๊ธ์ง๋ฉ๋๋ค. KPIS, CSO Web ์ฌ์ดํธ์์ ๊ณต์ ํ๋ ํ ์ด๋ธ์ ๋๋ค.
Docker/Superset ๊ด๋ จ ๋ฌธ์
Superset ์ปจํ ์ด๋ ์์ ์คํจ
์ฆ์: Superset Docker ์ปจํ ์ด๋๊ฐ ์์๋์ง ์๊ฑฐ๋, ์์ ํ ์ฆ์ ์ข ๋ฃ๋ฉ๋๋ค.
ํ์ธ ์ ์ฐจ:
- Docker ์ปจํ ์ด๋ ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
sudo docker compose -f docker-compose.superset.yml ps- ์คํจํ ์ปจํ ์ด๋์ ๋ก๊ทธ๋ฅผ ํ์ธํฉ๋๋ค.
sudo docker compose -f docker-compose.superset.yml logs --tail 100์ผ๋ฐ์ ์ธ ์์ธ:
| ์์ธ | ํด๊ฒฐ ๋ฐฉ๋ฒ |
|---|---|
| ํฌํธ ์ถฉ๋ (8050) | ํด๋น ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ํ๋ก์ธ์ค ํ์ธ ๋ฐ ์ข ๋ฃ |
| ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ | ์๋ฒ ๋ฉ๋ชจ๋ฆฌ ํ์ธ. ๋ถํ์ํ ์ปจํ ์ด๋ ์ ๋ฆฌ |
| ๋ณผ๋ฅจ ๊ถํ ๋ฌธ์ | Docker ๋ณผ๋ฅจ ๊ถํ ํ์ธ |
Superset ๋์๋ณด๋ ์ ์ ๋ถ๊ฐ
์ฆ์: ๋ธ๋ผ์ฐ์ ์์ ๋์๋ณด๋ URL์ ์ ์ํ ์ ์์ต๋๋ค.
ํ์ธ ์ ์ฐจ:
| ํ์ธ ์์ | ํ์ธ ์ฌํญ | ๋ช ๋ น์ด |
|---|---|---|
| 1 | Docker ์ปจํ ์ด๋ ์คํ ์ค | sudo docker ps |
| 2 | Superset ํฌํธ ๋ฆฌ์ค๋ | sudo ss -tlnp | grep 8050 |
| 3 | Nginx ํ๋ก์ ๋์ | sudo nginx -t && sudo systemctl status nginx |
| 4 | SSL ์ธ์ฆ์ ์ ํจ | sudo certbot certificates |
Superset ์ฌ๋ฐฐํฌ
๋ฌธ์ ํด๊ฒฐ ํ Superset์ ์ฌ๋ฐฐํฌํด์ผ ํ๋ ๊ฒฝ์ฐ:
bash scripts/redeploy_superset.sh์ด ์คํฌ๋ฆฝํธ๋ Docker ์ปจํ ์ด๋๋ฅผ ์ค์ง, ์ฌ๋น๋, ์ฌ์์ํฉ๋๋ค.
PostgreSQL ๊ด๋ จ ๋ฌธ์
DB ์ฐ๊ฒฐ ์คํจ
์ฆ์: ETL ์คํฌ๋ฆฝํธ ๋๋ Superset์์ DB ์ฐ๊ฒฐ์ด ์คํจํฉ๋๋ค.
ํ์ธ ์ ์ฐจ:
- Supabase Docker ์ปจํ ์ด๋ ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
sudo docker ps | grep supabase- PostgreSQL ํฌํธ(5432)๊ฐ ๋ฆฌ์ค๋ ์ค์ธ์ง ํ์ธํฉ๋๋ค.
sudo ss -tlnp | grep 5432- ์ง์ ์ฐ๊ฒฐ์ ์๋ํฉ๋๋ค.
psql -h localhost -p 5432 -U postgres -d postgres๋์คํฌ ์ฉ๋ ๋ถ์กฑ
์ฆ์: ETL ์คํ ๋๋ ์บ์ ๊ฐฑ์ ์ no space left on device ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค.
ํ์ธ ๋ฐ ํด๊ฒฐ:
- ๋์คํฌ ์ฌ์ฉ๋์ ํ์ธํฉ๋๋ค.
df -h- Docker ์ด๋ฏธ์ง/๋ณผ๋ฅจ ์ ๋ฆฌ๋ก ๊ณต๊ฐ์ ํ๋ณดํฉ๋๋ค.
sudo docker system prune -f- PostgreSQL WAL ๋ก๊ทธ๊ฐ ๊ณผ๋ํ๊ฒ ์์ธ ๊ฒฝ์ฐ ์ฒดํฌํฌ์ธํธ๋ฅผ ์คํํฉ๋๋ค.
๊ณตํต ์ง๋จ ์ ์ฐจ
๋ฌธ์ ๋ฐ์ ์ ๋ค์ ์์๋ก ์ง๋จํฉ๋๋ค:
- ์ฆ์ ํ์ธ: ๋์๋ณด๋ ํ๋ฉด, ์๋ฌ ๋ฉ์์ง, ๋ก๊ทธ๋ฅผ ์์งํฉ๋๋ค.
- ์๋น์ค ์ํ ํ์ธ: Docker ์ปจํ ์ด๋, Nginx, PostgreSQL ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
- ๋ก๊ทธ ํ์ธ: Superset ๋ก๊ทธ, PostgreSQL ๋ก๊ทธ, ETL ์คํฌ๋ฆฝํธ ์ถ๋ ฅ์ ํ์ธํฉ๋๋ค.
- ์์ธ ํน์ : ๋คํธ์ํฌ, ๋์คํฌ, ๋ฉ๋ชจ๋ฆฌ, ๋ฐ์ดํฐ ๋ฌธ์ ์ค ์ด๋ค ๊ฒ์ธ์ง ๊ตฌ๋ถํฉ๋๋ค.
- ํด๊ฒฐ ํ ๊ฒ์ฆ: ๋ฌธ์ ํด๊ฒฐ ํ ์บ์ ๊ฐฑ์ โ ๋์๋ณด๋ ํ์ธ์ผ๋ก ์ ์ ๋์์ ๊ฒ์ฆํฉ๋๋ค.
๋ค์ ๋จ๊ณ
- ์บ์ ๊ด๋ฆฌ โ ์บ์ ๊ฐฑ์ ์ ๋ต ์์ธ
- ETL ํ์ดํ๋ผ์ธ โ ETL ์คํฌ๋ฆฝํธ ์ฌ์ฉ๋ฒ
- ๋ฐ์ดํฐ ๊ด๋ฆฌ โ ๋ฐ์ดํฐ ์ ๋ก๋ ๋ฐ ์์คํ ๊ด๋ฆฌ