Skip to Content

์บ์‹œ ๊ด€๋ฆฌ

CoreRx๋Š” ๋ชจ๋“  KPI ๊ณ„์‚ฐ์„ PostgreSQL DB Function์œผ๋กœ ์‚ฌ์ „ ์ˆ˜ํ–‰ํ•˜์—ฌ ์บ์‹œ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹œ๋ณด๋“œ(BI ๋„๊ตฌ)๋Š” ์บ์‹œ ํ…Œ์ด๋ธ”๋งŒ ์กฐํšŒํ•˜๋ฏ€๋กœ, ์บ์‹œ ๊ฐฑ์‹  ์ „๋žต์ด ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ๊ณผ ๋Œ€์‹œ๋ณด๋“œ ์„ฑ๋Šฅ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

์บ์‹œ ์•„ํ‚คํ…์ฒ˜

์›์น™

  • ์›๋ณธ ํ…Œ์ด๋ธ” ์ง์ ‘ ์กฐํšŒ ๊ธˆ์ง€: ๋Œ€์‹œ๋ณด๋“œ๋Š” ๋ฐ˜๋“œ์‹œ corerx_cache_* ์บ์‹œ ํ…Œ์ด๋ธ”๋งŒ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.
  • DB Function์œผ๋กœ ์ง‘๊ณ„: ๋ชจ๋“  KPI ๊ณ„์‚ฐ์€ PostgreSQL Function์—์„œ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • TRUNCATE + INSERT ํŒจํ„ด: ๊ฐ ์บ์‹œ ํ•จ์ˆ˜๋Š” ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กœ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

์บ์‹œ ํ…Œ์ด๋ธ” ๋ชฉ๋ก

์บ์‹œ ํ…Œ์ด๋ธ”์›๋ณธ ํ…Œ์ด๋ธ”๋‚ด์šฉ
corerx_cache_sales_monthlykpis_gap_rows, erp_orders์›”๋ณ„ ๋งค์ถœ ์ง‘๊ณ„ (๊ฒฝ๋กœ, ์ œํ’ˆ, ๊ฑฐ๋ž˜์ฒ˜๋ณ„)
corerx_cache_product_rankingkpis_gap_rows, kpis_standard_codes์ œํ’ˆ ์ˆœ์œ„, ์•ฝํšจ๊ตฐ๋ณ„ ๋น„์ค‘
corerx_cache_account_summarykpis_gap_rows๊ฑฐ๋ž˜์ฒ˜ ์š”์•ฝ (์ง€์—ญ, ์œ ํ˜•, ๋งค์ถœ, ์„ฑ์žฅ๋ฅ )
corerx_cache_market_sharecorerx_ubist_data์‹œ์žฅ์ ์œ ์œจ (MS%, ์•ฝํšจ๊ตฐ๋ณ„, ๊ฒฝ์Ÿ์‚ฌ)
corerx_cache_cso_statuscsoweb_settlements, corerx_cso_preemptionCSO ์„ฑ๊ณผ (ํก์ˆ˜์œจ, ์ •์‚ฐ ์ƒํƒœ)
corerx_cache_meta-์บ์‹œ ๋ฉ”ํƒ€์ •๋ณด (๊ฐฑ์‹  ์ผ์‹œ, ์ƒํƒœ, ํ–‰ ์ˆ˜)

refresh_all_kpi_cache()

์ „์ฒด ์บ์‹œ๋ฅผ ์ผ๊ด„ ๊ฐฑ์‹ ํ•˜๋Š” ๋งˆ์Šคํ„ฐ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

์‹คํ–‰ ๋ฐฉ์‹

๋‚ด๋ถ€์ ์œผ๋กœ 5๊ฐœ์˜ ๊ฐœ๋ณ„ ์บ์‹œ ๊ฐฑ์‹  ํ•จ์ˆ˜๋ฅผ ์ˆœ์ฐจ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

  1. refresh_cache_sales_monthly(company_id) โ€” ์›”๋ณ„ ๋งค์ถœ ์บ์‹œ
  2. refresh_cache_product_ranking(company_id) โ€” ์ œํ’ˆ ์ˆœ์œ„ ์บ์‹œ
  3. refresh_cache_account_summary(company_id) โ€” ๊ฑฐ๋ž˜์ฒ˜ ์š”์•ฝ ์บ์‹œ
  4. refresh_cache_market_share(company_id) โ€” ์‹œ์žฅ์ ์œ ์œจ ์บ์‹œ
  5. 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_monthly10~30์ดˆ์›”๋ณ„ ์ง‘๊ณ„, ๋ฐ์ดํ„ฐ ์†Œ์Šค ์šฐ์„ ์ˆœ์œ„ ์ ์šฉ
product_ranking5~15์ดˆ์ œํ’ˆ๋ณ„ ์ง‘๊ณ„, ์•ฝํšจ๊ตฐ ๋งคํ•‘
account_summary5~15์ดˆ๊ฑฐ๋ž˜์ฒ˜๋ณ„ ์ง‘๊ณ„, ์„ฑ์žฅ๋ฅ  ๊ณ„์‚ฐ
market_share15~45์ดˆUBIST ์ „์ฒด ์‹œ์žฅ ์ง‘๊ณ„, MS% ๊ณ„์‚ฐ
cso_status10~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๋งˆ์ง€๋ง‰ ๊ฐฑ์‹  ์™„๋ฃŒ ์ผ์‹œ
statuscompleted / running / failed
row_count๊ฐฑ์‹  ํ›„ ํ–‰ ์ˆ˜
trigger_type๊ฐฑ์‹ ์„ ์œ ๋ฐœํ•œ ์ด๋ฒคํŠธ
error_message์‹คํŒจ ์‹œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€

๋ชจ๋‹ˆํ„ฐ๋ง

๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ํƒญ์—์„œ ์บ์‹œ ์ƒํƒœ๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๊ฒฝ์šฐ์— ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

  • last_refreshed๊ฐ€ ์˜ˆ์ƒ ๊ฐฑ์‹  ์ฃผ๊ธฐ๋ณด๋‹ค ์˜ค๋ž˜๋œ ๊ฒฝ์šฐ
  • status๊ฐ€ failed์ธ ๊ฒฝ์šฐ
  • row_count๊ฐ€ ์ด์ „ ๋Œ€๋น„ ํฌ๊ฒŒ ๋ณ€๋™ํ•œ ๊ฒฝ์šฐ (๋ฐ์ดํ„ฐ ๋ˆ„๋ฝ ๋˜๋Š” ์ค‘๋ณต ๊ฐ€๋Šฅ์„ฑ)

๋‹ค์Œ ๋‹จ๊ณ„

Last updated on