Skip to Content
CSO Web์šด์˜์ž ๋งค๋‰ด์–ผ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

CSO ์ •์‚ฐ ํฌํ„ธ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ, ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•, ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Supabase PostgreSQL ๊ตฌ์กฐ

ํฌํ„ธ์€ Supabase๊ฐ€ ์ œ๊ณตํ•˜๋Š” PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Supabase Auth๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ž์ฒด JWT ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๋ฉฐ, DB ์ ‘๊ทผ์€ Supabase ํด๋ผ์ด์–ธํŠธ(@supabase/supabase-js)๋ฅผ ํ†ตํ•ด ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ ‘๊ทผ ๋ฐฉ์‹

์šฉ๋„ํ‚คํ™˜๊ฒฝ๋ณ€์ˆ˜
ํด๋ผ์ด์–ธํŠธ (์ฝ๊ธฐ)Anon KeyNEXT_PUBLIC_SUPABASE_ANON_KEY
์„œ๋ฒ„ (์ฝ๊ธฐ/์“ฐ๊ธฐ)Service Role KeySUPABASE_SERVICE_ROLE_KEY

์„œ๋ฒ„ ์ธก API ๋ผ์šฐํŠธ์—์„œ๋Š” Service Role Key๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ RLS๋ฅผ ์šฐํšŒํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ ์ง์ ‘ DB์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์—†์œผ๋ฉฐ, ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์กฐ์ž‘์€ API ๋ผ์šฐํŠธ๋ฅผ ๊ฒฝ์œ ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ํ…Œ์ด๋ธ”

members (ํšŒ์›)

CSO ์—…์ฒด ํšŒ์› ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ปฌ๋Ÿผํƒ€์ž…์„ค๋ช…
idUUID๊ธฐ๋ณธํ‚ค
business_numberVARCHAR(10)์‚ฌ์—…์ž๋ฒˆํ˜ธ (Unique, ๋กœ๊ทธ์ธ ID)
company_nameTEXT์—…์ฒด๋ช…
ceo_nameTEXT๋Œ€ํ‘œ์ž๋ช…
emailTEXT๋Œ€ํ‘œ ์ด๋ฉ”์ผ
password_hashTEXTbcrypt ํ•ด์‹œ
is_adminBOOLEAN๊ด€๋ฆฌ์ž ์—ฌ๋ถ€
is_approvedBOOLEAN๊ฐ€์ž… ์Šน์ธ ์—ฌ๋ถ€
is_testBOOLEANํ…Œ์ŠคํŠธ ๊ณ„์ • ์—ฌ๋ถ€
must_change_passwordBOOLEAN๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ๊ฐ•์ œ
profile_completeBOOLEANํšŒ์›์ •๋ณด ์™„์„ฑ ์—ฌ๋ถ€
failed_login_attemptsINTEGER๋กœ๊ทธ์ธ ์‹คํŒจ ํšŸ์ˆ˜ (15ํšŒ ์‹œ ์ž ๊ธˆ)
locked_atTIMESTAMPTZ๊ณ„์ • ์ž ๊ธˆ ์ผ์‹œ
last_login_atTIMESTAMPTZ์ตœ๊ทผ ๋กœ๊ทธ์ธ ์ผ์‹œ

settlements (์ •์‚ฐ)

SIT ์†”๋ฃจ์…˜์—์„œ ๋‚ด๋ณด๋‚ธ ์ •์‚ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์—‘์…€ 1ํ–‰์ด 1๊ฑด์˜ ์ฒ˜๋ฐฉ/๊ฑฐ๋ž˜์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์ปฌ๋Ÿผํƒ€์ž…์„ค๋ช…
idSERIAL๊ธฐ๋ณธํ‚ค
business_numberVARCHAR(10)๊ฑฐ๋ž˜์ฒ˜(์•ฝ๊ตญ) ์‚ฌ์—…์ž๋ฒˆํ˜ธ
์ •์‚ฐ์›”TEXT์ •์‚ฐ ๊ธฐ์ค€์›” (์˜ˆ: 2026-01)
์ฒ˜๋ฐฉ์›”TEXT์ฒ˜๋ฐฉ ๊ธฐ์ค€์›”
CSO๊ด€๋ฆฌ์—…์ฒดTEXTCSO ์—…์ฒด๋ช… (๋งค์นญ ํ‚ค)
๊ฑฐ๋ž˜์ฒ˜๋ช…TEXT์•ฝ๊ตญ/๊ฑฐ๋ž˜์ฒ˜ ์ด๋ฆ„
์˜์—…์‚ฌ์›TEXT๋‹ด๋‹น ์˜์—…์‚ฌ์›
์ œํ’ˆ๋ช…TEXT์˜์•ฝํ’ˆ ์ œํ’ˆ๋ช…
์ˆ˜๋Ÿ‰NUMERIC์ฒ˜๋ฐฉ ์ˆ˜๋Ÿ‰
๊ธˆ์•กNUMERIC๊ฑฐ๋ž˜ ๊ธˆ์•ก
์ œ์•ฝ์ˆ˜์ˆ˜๋ฃŒ_ํ•ฉ๊ณ„NUMERIC์ œ์•ฝ์‚ฌ ์ˆ˜์ˆ˜๋ฃŒ ํ•ฉ๊ณ„
๋‹ด๋‹น์ˆ˜์ˆ˜๋ฃŒ_ํ•ฉ๊ณ„NUMERIC๋‹ด๋‹น์ž ์ˆ˜์ˆ˜๋ฃŒ ํ•ฉ๊ณ„
upload_year_monthTEXT์—…๋กœ๋“œ ์‹œ์  ์—ฐ์›”
upload_dateTEXT์—…๋กœ๋“œ ์ผ์‹œ

์ด 47๊ฐœ์˜ ํ•œ๊ธ€ ์ปฌ๋Ÿผ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์ˆ˜๋ฃŒ์œจ, ์ธ์„ผํ‹ฐ๋ธŒ์œจ ๋“ฑ ์ƒ์„ธ ํ•ญ๋ชฉ์€ ์ œ์•ฝ์‚ฌ ์ •์‚ฐ ๊ตฌ์กฐ์— ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

์ฃผ์˜: settlements.business_number๋Š” ๊ฑฐ๋ž˜์ฒ˜(์•ฝ๊ตญ) ์‚ฌ์—…์ž๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค. CSO ์—…์ฒด์˜ ์‚ฌ์—…์ž๋ฒˆํ˜ธ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. CSO ์—…์ฒด ์‚ฌ์—…์ž๋ฒˆํ˜ธ๋ฅผ ์ฐพ์œผ๋ ค๋ฉด CSO๊ด€๋ฆฌ์—…์ฒด โ†’ cso_matching ํ…Œ์ด๋ธ”์„ JOINํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

cso_matching (CSO ๋งค์นญ)

์ •์‚ฐ์„œ์˜ CSO๊ด€๋ฆฌ์—…์ฒด ์ด๋ฆ„๊ณผ ํšŒ์›์˜ ์‚ฌ์—…์ž๋ฒˆํ˜ธ๋ฅผ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ…Œ์ด๋ธ”์ด ์—†์œผ๋ฉด ํšŒ์›์€ ์ž๊ธฐ ์ •์‚ฐ์„ ์กฐํšŒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ปฌ๋Ÿผํƒ€์ž…์„ค๋ช…
cso_company_nameTEXT์ •์‚ฐ์„œ CSO๊ด€๋ฆฌ์—…์ฒด๋ช… (PK)
business_numberVARCHAR(10)ํ•ด๋‹น ์—…์ฒด์˜ ์‚ฌ์—…์ž๋ฒˆํ˜ธ
created_atTIMESTAMPTZ์ƒ์„ฑ์ผ์‹œ
updated_atTIMESTAMPTZ์ˆ˜์ •์ผ์‹œ

๋งค์นญ ๊ด€๊ณ„: settlements.CSO๊ด€๋ฆฌ์—…์ฒด = cso_matching.cso_company_name โ†’ cso_matching.business_number = members.business_number

email_logs (์ด๋ฉ”์ผ ๋กœ๊ทธ)

๋ฐœ์†ก๋œ ๋ชจ๋“  ์ด๋ฉ”์ผ์˜ ์ด๋ ฅ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

์ปฌ๋Ÿผํƒ€์ž…์„ค๋ช…
idUUID๊ธฐ๋ณธํ‚ค
recipient_emailTEXT์ˆ˜์‹ ์ž ์ด๋ฉ”์ผ
subjectTEXT์ด๋ฉ”์ผ ์ œ๋ชฉ
template_typeTEXT์œ ํ˜• (์•„๋ž˜ ์ฐธ์กฐ)
statusTEXTpending / sent / failed
error_messageTEXT์‹คํŒจ ์‹œ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€
sent_atTIMESTAMPTZ๋ฐœ์†ก ์™„๋ฃŒ ์ผ์‹œ
created_atTIMESTAMPTZ์ƒ์„ฑ ์ผ์‹œ

template_type ๋ชฉ๋ก:

๊ฐ’์„ค๋ช…์ˆ˜์‹ ์ž
registration_request๊ฐ€์ž… ์‹ ์ฒญ ์•Œ๋ฆผ๊ด€๋ฆฌ์ž
approval_complete๊ฐ€์ž… ์Šน์ธ ์•Œ๋ฆผํšŒ์›
approval_rejected๊ฐ€์ž… ๊ฑฐ๋ถ€ ์•Œ๋ฆผํšŒ์›
settlement_uploaded์ •์‚ฐ์„œ ์—…๋กœ๋“œ ์•Œ๋ฆผํšŒ์›
password_reset๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ •ํšŒ์›
mail_merge๋ฉ”์ผ๋จธ์ง€ ๋ฐœ์†กํšŒ์›

company_settings (ํšŒ์‚ฌ ์„ค์ •)

์‚ฌ์ดํŠธ ์ „์ฒด ์„ค์ •์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ํ–‰ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค.

์ปฌ๋Ÿผ ๊ทธ๋ฃน์ฃผ์š” ํ•ญ๋ชฉ
ํšŒ์‚ฌ ์ •๋ณดํšŒ์‚ฌ๋ช…, ๋Œ€ํ‘œ์ž๋ช…, ์‚ฌ์—…์ž๋ฒˆํ˜ธ, ์ฃผ์†Œ, ์—ฐ๋ฝ์ฒ˜
์ด๋ฉ”์ผ ์„ค์ •ํ”„๋กœ๋ฐ”์ด๋”(Resend/SMTP), SMTP ํ˜ธ์ŠคํŠธ/ํฌํŠธ/์ธ์ฆ, ๋ฐœ์†ก ๊ฐ„๊ฒฉ
์•Œ๋ฆผ ์„ค์ •์ด๋ฉ”์ผ ์œ ํ˜•๋ณ„ ON/OFF (5์ข…)
๊ณต์ง€์‚ฌํ•ญ๋Œ€์‹œ๋ณด๋“œ ๊ณต์ง€ ๋‚ด์šฉ (๋ณ€์ˆ˜ ์น˜ํ™˜ ์ง€์›)

password_reset_tokens (๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ํ† ํฐ)

๋น„๋ฐ€๋ฒˆํ˜ธ ์ฐพ๊ธฐ ์š”์ฒญ ์‹œ ์ƒ์„ฑ๋˜๋Š” ์ผํšŒ์šฉ ํ† ํฐ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์œ ํšจ๊ธฐ๊ฐ„์€ 30๋ถ„์ž…๋‹ˆ๋‹ค.

settlement_uploads (์—…๋กœ๋“œ ์ด๋ ฅ)

์ •์‚ฐ์„œ ์—…๋กœ๋“œ ์ด๋ ฅ๊ณผ ์ ‘์† ์—…์ฒด ์Šค๋ƒ…์ƒท์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

RLS (Row Level Security) ์ •์ฑ…

ํฌํ„ธ์€ ์„œ๋ฒ„ ์ธก์—์„œ ๊ถŒํ•œ์„ ๊ฒ€์ฆํ•˜๊ณ  Service Role Key๋กœ DB์— ์ ‘๊ทผํ•˜๋ฏ€๋กœ, Supabase RLS๋Š” ๋ณด์กฐ์ ์ธ ์•ˆ์ „์žฅ์น˜ ์—ญํ• ์ž…๋‹ˆ๋‹ค.

์ •์‚ฐ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์ œ์–ด

์ผ๋ฐ˜ํšŒ์›์˜ ์ •์‚ฐ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์€ API ๋ผ์šฐํŠธ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•„ํ„ฐ๋ง๋ฉ๋‹ˆ๋‹ค.

  1. JWT์—์„œ business_number ์ถ”์ถœ
  2. cso_matching ํ…Œ์ด๋ธ”์—์„œ ํ•ด๋‹น ์‚ฌ์—…์ž๋ฒˆํ˜ธ์— ๋งคํ•‘๋œ cso_company_name ๋ชฉ๋ก ์กฐํšŒ
  3. settlements ํ…Œ์ด๋ธ”์—์„œ CSO๊ด€๋ฆฌ์—…์ฒด IN (๋งค์นญ๋œ ์—…์ฒด๋ช…) ์กฐ๊ฑด์œผ๋กœ ํ•„ํ„ฐ๋ง

๊ด€๋ฆฌ์ž(is_admin: true)๋Š” ํ•„ํ„ฐ ์—†์ด ์ „์ฒด ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์—…๋กœ๋“œ ์ ˆ์ฐจ

SIT ์†”๋ฃจ์…˜์—์„œ ๋‚ด๋ณด๋‚ธ ์—‘์…€ ํŒŒ์ผ์„ ํฌํ„ธ์— ์—…๋กœ๋“œํ•˜๋Š” ์ ˆ์ฐจ์ž…๋‹ˆ๋‹ค.

์—…๋กœ๋“œ ๊ณผ์ • (/admin/upload)

  1. ํŒŒ์ผ ์„ ํƒ: .xlsx ๋˜๋Š” .xls ํŒŒ์ผ์„ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•˜๊ฑฐ๋‚˜ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

    • ์ตœ๋Œ€ ํŒŒ์ผ ํฌ๊ธฐ: 4MB
    • ์ฒซ ๋ฒˆ์งธ ์‹œํŠธ๋งŒ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  2. ์ปฌ๋Ÿผ ๋งคํ•‘ ํ™•์ธ (์„ ํƒ): โ€œ์ปฌ๋Ÿผ ๋งคํ•‘ ํ™•์ธโ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์—‘์…€ ์ปฌ๋Ÿผ๊ณผ DB ์ปฌ๋Ÿผ์˜ ๋งคํ•‘์„ ๋ฏธ๋ฆฌ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์ปฌ๋Ÿผ๋ช…์ด ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋ฉด ์ž๋™ ๋งคํ•‘
    • ์œ ์‚ฌํ•œ ์ด๋ฆ„์€ ์œ ์‚ฌ๋„ ์ ์ˆ˜(0.6 ์ด์ƒ)๋กœ ์ž๋™ ๋งคํ•‘
    • ์ž๋™ ๋งคํ•‘ ์‹คํŒจ ์‹œ ์ˆ˜๋™์œผ๋กœ ์ง€์ • ๊ฐ€๋Šฅ
    • ํ•„์ˆ˜ ์ปฌ๋Ÿผ: ์‚ฌ์—…์ž๋ฒˆํ˜ธ, ์ •์‚ฐ์›”
  3. ์—…๋กœ๋“œ ์‹คํ–‰: โ€œ๋ฐ”๋กœ ์—…๋กœ๋“œโ€ ๋˜๋Š” โ€œ๋งคํ•‘ ํ™•์ธ ํ›„ ์—…๋กœ๋“œโ€ ํด๋ฆญ

    • ๊ฐ™์€ ์ •์‚ฐ์›” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์œผ๋ฉด ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•œ ํ›„ ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐฐ์น˜ ํฌ๊ธฐ: 500๊ฑด ๋‹จ์œ„๋กœ DB์— ์‚ฝ์ž…
  4. ์—…๋กœ๋“œ ๊ฒฐ๊ณผ ํ™•์ธ: ์„ฑ๊ณต ๊ฑด์ˆ˜, ์‹คํŒจ ๊ฑด์ˆ˜, ์—…๋กœ๋“œ๋œ ์ •์‚ฐ์›” ๋ชฉ๋ก์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  5. ์ด๋ฉ”์ผ ๋ฐœ์†ก (์„ ํƒ): ์—…๋กœ๋“œ ์™„๋ฃŒ ํ›„ โ€œ์ •์‚ฐ์„œ ์—…๋กœ๋“œ ์•Œ๋ฆผโ€ ์ด๋ฉ”์ผ์„ ๋ฐœ์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ๋งค์นญ๋œ CSO ์—…์ฒด ํšŒ์›์—๊ฒŒ๋งŒ ๋ฐœ์†ก๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ (/admin/data)

์—…๋กœ๋“œ๋œ ์ •์‚ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ •์‚ฐ์›” ๊ธฐ์ค€์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์„ค๋ช…
ํ†ต๊ณ„ ์นด๋“œ์ „์ฒด ๊ฑด์ˆ˜, ์ •์‚ฐ์›” ์ˆ˜, CSO ์—…์ฒด ์ˆ˜
์ •์‚ฐ์›”๋ณ„ ํ…Œ์ด๋ธ”๊ฐ ์›”์˜ ๊ฑด์ˆ˜, CSO ์—…์ฒด ์ˆ˜, ์—…๋กœ๋“œ ์ผ์‹œ
์›”๋ณ„ ์‚ญ์ œํŠน์ • ์ •์‚ฐ์›” ๋ฐ์ดํ„ฐ ์ „์ฒด ์‚ญ์ œ (ํ™•์ธ ๋‹ค์ด์–ผ๋กœ๊ทธ)
์ƒˆ๋กœ๊ณ ์นจ์ตœ์‹  ํ†ต๊ณ„ ์žฌ์กฐํšŒ

CSO ๋งค์นญ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ

๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ๋ž€

์ •์‚ฐ์„œ์˜ CSO๊ด€๋ฆฌ์—…์ฒด์™€ ํšŒ์› ์‚ฌ์—…์ž๋ฒˆํ˜ธ ๊ฐ„ ๋งคํ•‘์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋งค์นญ์ด ๋ˆ„๋ฝ๋˜๋ฉด ํ•ด๋‹น ์—…์ฒด์˜ ์ •์‚ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค ํšŒ์›์—๊ฒŒ๋„ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งค์นญ ์ƒํƒœ (/admin/integrity)

์ƒํƒœ์˜๋ฏธ์กฐ์น˜
normal์ •์ƒ ๋งค์นญ ์™„๋ฃŒ์กฐ์น˜ ๋ถˆํ•„์š”
unregistered๋งค์นญ์€ ์žˆ์œผ๋‚˜ ํ•ด๋‹น ์‚ฌ์—…์ž๋ฒˆํ˜ธ๋กœ ๊ฐ€์ž…ํ•œ ํšŒ์›์ด ์—†์ŒํšŒ์› ๊ฐ€์ž… ์•ˆ๋‚ด ๋˜๋Š” ์‚ฌ์—…์ž๋ฒˆํ˜ธ ํ™•์ธ
pending_joinํšŒ์›์ด ๊ฐ€์ž… ์‹ ์ฒญํ–ˆ์œผ๋‚˜ ์•„์ง ์Šน์ธ๋˜์ง€ ์•Š์Œ/admin/members์—์„œ ์Šน์ธ ์ฒ˜๋ฆฌ
missing_match์ •์‚ฐ์„œ์— ์—…์ฒด๋ช…์ด ์žˆ์œผ๋‚˜ cso_matching์— ๋งคํ•‘์ด ์—†์Œ๋งค์นญ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ ํ•ญ๋ชฉ

ํ•ญ๋ชฉ์„ค๋ช…
CSO ๊ด€๋ฆฌ์—…์ฒด๋ช…์ •์‚ฐ์„œ์— ๊ธฐ์žฌ๋œ ์—…์ฒด๋ช…
์‚ฌ์—…์ž๋ฒˆํ˜ธ๋งค์นญ๋œ ์‚ฌ์—…์ž๋ฒˆํ˜ธ (์—†์œผ๋ฉด ๋น„์–ด ์žˆ์Œ)
์ƒํƒœ์œ„ 4๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜
์ •์‚ฐ ๊ฑด์ˆ˜ํ•ด๋‹น ์—…์ฒด์˜ ์ •์‚ฐ ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜
์ตœ๊ทผ ์ •์‚ฐ์›”๊ฐ€์žฅ ์ตœ๊ทผ ์ •์‚ฐ์›”
์Šน์ธ ์—ฌ๋ถ€ํšŒ์› ๊ฐ€์ž… ์Šน์ธ ์ƒํƒœ

๋งค์นญ ๋ฐ์ดํ„ฐ ์ˆ˜์ •

๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ ํŽ˜์ด์ง€์—์„œ missing_match ์ƒํƒœ์˜ ์—…์ฒด์— ๋Œ€ํ•ด ์‚ฌ์—…์ž๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜์—ฌ ๋งค์นญ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค์นญ ์ถ”๊ฐ€ ์‹œ cso_matching ํ…Œ์ด๋ธ”์— UPSERT๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋ฐฑ์—…/๋ณต์›

Supabase ์ž๋™ ๋ฐฑ์—…

Supabase Pro ํ”Œ๋žœ์—์„œ ์ œ๊ณตํ•˜๋Š” ์ž๋™ ๋ฐฑ์—…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ผ์ผ ๋ฐฑ์—…: ๋งค์ผ ์ž๋™ ์ˆ˜ํ–‰
  • ๋ณด๊ด€ ๊ธฐ๊ฐ„: 7์ผ (Pro ํ”Œ๋žœ ๊ธฐ๋ณธ)
  • ๋ณต์›: Supabase ๋Œ€์‹œ๋ณด๋“œ โ†’ Database โ†’ Backups์—์„œ ํŠน์ • ์‹œ์ ์œผ๋กœ ๋ณต์›

์ˆ˜๋™ ๋ฐฑ์—…

Supabase ๋Œ€์‹œ๋ณด๋“œ์—์„œ SQL Editor๋ฅผ ํ†ตํ•ด ํŠน์ • ํ…Œ์ด๋ธ”์„ CSV๋กœ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

-- ์ •์‚ฐ ๋ฐ์ดํ„ฐ ํ™•์ธ (ํŠน์ • ์›”) SELECT COUNT(*) FROM settlements WHERE "์ •์‚ฐ์›”" = '2026-01'; -- ๋งค์นญ ๋ฐ์ดํ„ฐ ์ „์ฒด ์กฐํšŒ SELECT * FROM cso_matching ORDER BY cso_company_name; -- ํšŒ์› ๋ชฉ๋ก (๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹œ ์ œ์™ธ) SELECT id, business_number, company_name, email, is_admin, is_approved, created_at FROM members ORDER BY created_at DESC;

์ •์‚ฐ ๋ฐ์ดํ„ฐ ๋ณต์›

์ •์‚ฐ ๋ฐ์ดํ„ฐ๋Š” ์›๋ณธ ์—‘์…€ ํŒŒ์ผ์„ ๋‹ค์‹œ ์—…๋กœ๋“œํ•˜๋ฉด ๋ณต์›๋ฉ๋‹ˆ๋‹ค. ๊ฐ™์€ ์ •์‚ฐ์›” ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด ๊ธฐ์กด ๋ฐ์ดํ„ฐ๊ฐ€ ๊ต์ฒด๋˜๋ฏ€๋กœ, ์›๋ณธ ์—‘์…€ ํŒŒ์ผ์„ ๋ณ„๋„๋กœ ๋ณด๊ด€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.