์บ์ ๊ด๋ฆฌ
CoreRx๋ ๋ชจ๋ KPI ๊ณ์ฐ์ PostgreSQL DB Function์ผ๋ก ์ฌ์ ์ํํ์ฌ ์บ์ ํ ์ด๋ธ์ ์ ์ฅํฉ๋๋ค. ๋์๋ณด๋(BI ๋๊ตฌ)๋ ์บ์ ํ ์ด๋ธ๋ง ์กฐํํ๋ฏ๋ก, ์บ์ ๊ฐฑ์ ์ ๋ต์ด ๋ฐ์ดํฐ ์ ํฉ์ฑ๊ณผ ๋์๋ณด๋ ์ฑ๋ฅ์ ํต์ฌ์ ๋๋ค.
์บ์ ์ํคํ ์ฒ
์์น
- ์๋ณธ ํ
์ด๋ธ ์ง์ ์กฐํ ๊ธ์ง: ๋์๋ณด๋๋ ๋ฐ๋์
corerx_cache_*์บ์ ํ ์ด๋ธ๋ง ์กฐํํฉ๋๋ค. - DB Function์ผ๋ก ์ง๊ณ: ๋ชจ๋ KPI ๊ณ์ฐ์ PostgreSQL Function์์ ์ํํฉ๋๋ค.
- TRUNCATE + INSERT ํจํด: ๊ฐ ์บ์ ํจ์๋ ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ณ ์๋ก ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ์ฝ์ ํฉ๋๋ค.
์บ์ ํ ์ด๋ธ ๋ชฉ๋ก
| ์บ์ ํ ์ด๋ธ | ์๋ณธ ํ ์ด๋ธ | ๋ด์ฉ |
|---|---|---|
| corerx_cache_sales_monthly | kpis_gap_rows, erp_orders | ์๋ณ ๋งค์ถ ์ง๊ณ (๊ฒฝ๋ก, ์ ํ, ๊ฑฐ๋์ฒ๋ณ) |
| corerx_cache_product_ranking | kpis_gap_rows, kpis_standard_codes | ์ ํ ์์, ์ฝํจ๊ตฐ๋ณ ๋น์ค |
| corerx_cache_account_summary | kpis_gap_rows | ๊ฑฐ๋์ฒ ์์ฝ (์ง์ญ, ์ ํ, ๋งค์ถ, ์ฑ์ฅ๋ฅ ) |
| corerx_cache_market_share | corerx_ubist_data | ์์ฅ์ ์ ์จ (MS%, ์ฝํจ๊ตฐ๋ณ, ๊ฒฝ์์ฌ) |
| corerx_cache_cso_status | csoweb_settlements, corerx_cso_preemption | CSO ์ฑ๊ณผ (ํก์์จ, ์ ์ฐ ์ํ) |
| corerx_cache_meta | - | ์บ์ ๋ฉํ์ ๋ณด (๊ฐฑ์ ์ผ์, ์ํ, ํ ์) |
refresh_all_kpi_cache()
์ ์ฒด ์บ์๋ฅผ ์ผ๊ด ๊ฐฑ์ ํ๋ ๋ง์คํฐ ํจ์์ ๋๋ค.
์คํ ๋ฐฉ์
๋ด๋ถ์ ์ผ๋ก 5๊ฐ์ ๊ฐ๋ณ ์บ์ ๊ฐฑ์ ํจ์๋ฅผ ์์ฐจ ์คํํฉ๋๋ค:
refresh_cache_sales_monthly(company_id)โ ์๋ณ ๋งค์ถ ์บ์refresh_cache_product_ranking(company_id)โ ์ ํ ์์ ์บ์refresh_cache_account_summary(company_id)โ ๊ฑฐ๋์ฒ ์์ฝ ์บ์refresh_cache_market_share(company_id)โ ์์ฅ์ ์ ์จ ์บ์refresh_cache_cso_status(company_id)โ CSO ์ฑ๊ณผ ์บ์
๊ฐ ํจ์ ์๋ฃ ์ corerx_cache_meta ํ
์ด๋ธ์ ์ํ๊ฐ ๊ธฐ๋ก๋ฉ๋๋ค.
์๋ ์คํ
Superset SQL Lab ๋๋ psql์์ ์ง์ ์คํํ ์ ์์ต๋๋ค.
SELECT refresh_all_kpi_cache(
'4b5b1d04-23f6-42a7-9fe5-acb0a9998c55',
'manual'
);| ํ๋ผ๋ฏธํฐ | ์ค๋ช |
|---|---|
| company_id | ํ์ฌ UUID (ํ๊ตญ์ ๋์จ์ ์ฝ: 4b5b1d04-23f6-42a7-9fe5-acb0a9998c55) |
| trigger | ๊ฐฑ์ ์ฌ์ (manual / ubist_upload / erp_import ๋ฑ) |
๊ฐ๋ณ ์บ์๋ง ๊ฐฑ์
ํน์ ์บ์๋ง ๊ฐฑ์ ํด์ผ ํ๋ ๊ฒฝ์ฐ ๊ฐ๋ณ ํจ์๋ฅผ ์ง์ ํธ์ถํฉ๋๋ค.
-- ์์ฅ์ ์ ์จ ์บ์๋ง ๊ฐฑ์ (UBIST ๋ฐ์ดํฐ ์
๋ฐ์ดํธ ํ)
SELECT refresh_cache_market_share(
'4b5b1d04-23f6-42a7-9fe5-acb0a9998c55'
);๊ฐฑ์ ์ฃผ๊ธฐ์ ํธ๋ฆฌ๊ฑฐ
์๋ ๊ฐฑ์
| ํธ๋ฆฌ๊ฑฐ ์ด๋ฒคํธ | ๊ฐฑ์ ๋์ | ์์ |
|---|---|---|
| UBIST ETL ์๋ฃ | ์ ์ฒด ์บ์ (5๊ฐ) | ETL ์คํฌ๋ฆฝํธ๊ฐ ์๋ ํธ์ถ |
| ERP ์ฃผ๋ฌธ์ ์ํฌํธ | ๋งค์ถ/์ ํ/๊ฑฐ๋์ฒ ์บ์ | ์ํฌํธ ์คํฌ๋ฆฝํธ๊ฐ ์๋ ํธ์ถ |
์๋ ๊ฐฑ์ ์ด ํ์ํ ๊ฒฝ์ฐ
| ์ํฉ | ์กฐ์น |
|---|---|
| CSO ์ ์ ๋ฐ์ดํฐ ์์ ํ | CSO ์บ์ ๊ฐ๋ณ ๊ฐฑ์ |
| ๋งค์ถ ๋ชฉํ ๋ณ๊ฒฝ ํ | ๋งค์ถ ์บ์ ๊ฐ๋ณ ๊ฐฑ์ |
| ์บ์ ์ํ๊ฐ failed์ธ ๊ฒฝ์ฐ | ์์ธ ํด๊ฒฐ ํ ์ ์ฒด ์บ์ ๊ฐฑ์ |
| ๋์๋ณด๋ ๋ฐ์ดํฐ๊ฐ ์ค๋๋ ๊ฒฝ์ฐ | ์ ์ฒด ์บ์ ์๋ ๊ฐฑ์ |
์ฑ๋ฅ ๊ณ ๋ ค์ฌํญ
๊ฐฑ์ ์์ ์๊ฐ
์บ์ ๊ฐฑ์ ์๊ฐ์ ๋ฐ์ดํฐ ์์ ๋น๋กํฉ๋๋ค.
| ์บ์ | ์์ ์์ ์๊ฐ | ์ฃผ์ ์ฐ์ฐ |
|---|---|---|
| sales_monthly | 10~30์ด | ์๋ณ ์ง๊ณ, ๋ฐ์ดํฐ ์์ค ์ฐ์ ์์ ์ ์ฉ |
| product_ranking | 5~15์ด | ์ ํ๋ณ ์ง๊ณ, ์ฝํจ๊ตฐ ๋งคํ |
| account_summary | 5~15์ด | ๊ฑฐ๋์ฒ๋ณ ์ง๊ณ, ์ฑ์ฅ๋ฅ ๊ณ์ฐ |
| market_share | 15~45์ด | UBIST ์ ์ฒด ์์ฅ ์ง๊ณ, MS% ๊ณ์ฐ |
| cso_status | 10~30์ด | ์ ์ ๋งค์นญ, ํก์์จ ๊ณ์ฐ, ์ ์ฐ ์ง๊ณ |
| ์ ์ฒด | 45์ด~2๋ถ | 5๊ฐ ์์ฐจ ์คํ |
๊ฐฑ์ ์ค ๋์๋ณด๋ ๋์
- TRUNCATE + INSERT ํจํด์ด๋ฏ๋ก, ๊ฐฑ์ ์งํ ์ค ๋์๋ณด๋๋ฅผ ์กฐํํ๋ฉด ์ผ์์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋น์ด ๋ณด์ผ ์ ์์ต๋๋ค.
- ๊ฐฑ์ ์ค์๋
corerx_cache_meta์ ์ํ๊ฐrunning์ผ๋ก ํ์๋ฉ๋๋ค. - ์ฌ์ฉ์๊ฐ ์ ์ ์๊ฐ๋(์ ๋ฌด ์์ ์ , ์ ์ฌ์๊ฐ ๋ฑ)์ ๊ฐฑ์ ์ ์คํํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋
DB Function์ ์๋ฒ ์ฌ์ด๋์์ ์คํ๋๋ฏ๋ก, PostgreSQL์ work_mem ์ค์ ์ด ์ถฉ๋ถํด์ผ ํฉ๋๋ค. UBIST ๋ฐ์ดํฐ๊ฐ ๋์ฉ๋(11๋ง ํ)์ด๋ฏ๋ก market_share ์บ์ ๊ฐฑ์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๋์์ง ์ ์์ต๋๋ค.
์ฃผ์: ์บ์ ๊ฐฑ์ ์ด ๋ฐ๋ณต์ ์ผ๋ก ์คํจํ๋ฉด PostgreSQL ๋ก๊ทธ๋ฅผ ํ์ธํ์ธ์. ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ด ์์ธ์ธ ๊ฒฝ์ฐ
work_mem๊ฐ์ ์กฐ์ ํด์ผ ํฉ๋๋ค.
์บ์ ๋ฉํ ํ ์ด๋ธ
corerx_cache_meta ํ
์ด๋ธ์ ๊ฐ ์บ์์ ๊ฐฑ์ ์ด๋ ฅ์ ๊ธฐ๋กํฉ๋๋ค.
| ์ปฌ๋ผ | ์ค๋ช |
|---|---|
| cache_name | ์บ์ ํ ์ด๋ธ๋ช |
| last_refreshed | ๋ง์ง๋ง ๊ฐฑ์ ์๋ฃ ์ผ์ |
| status | completed / running / failed |
| row_count | ๊ฐฑ์ ํ ํ ์ |
| trigger_type | ๊ฐฑ์ ์ ์ ๋ฐํ ์ด๋ฒคํธ |
| error_message | ์คํจ ์ ์๋ฌ ๋ฉ์์ง |
๋ชจ๋ํฐ๋ง
๋ฐ์ดํฐ ๊ด๋ฆฌ ํญ์์ ์บ์ ์ํ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ํ์ธํฉ๋๋ค. ๋ค์ ๊ฒฝ์ฐ์ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค:
last_refreshed๊ฐ ์์ ๊ฐฑ์ ์ฃผ๊ธฐ๋ณด๋ค ์ค๋๋ ๊ฒฝ์ฐstatus๊ฐfailed์ธ ๊ฒฝ์ฐrow_count๊ฐ ์ด์ ๋๋น ํฌ๊ฒ ๋ณ๋ํ ๊ฒฝ์ฐ (๋ฐ์ดํฐ ๋๋ฝ ๋๋ ์ค๋ณต ๊ฐ๋ฅ์ฑ)
๋ค์ ๋จ๊ณ
- ETL ํ์ดํ๋ผ์ธ โ UBIST ๋ฐ์ดํฐ ์ ์ฌ ๋ฐฉ๋ฒ
- ๋ฌธ์ ํด๊ฒฐ โ ์บ์ ๊ด๋ จ ๋ฌธ์ ๋์