Skip to Content

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

CSO ์ •์‚ฐ ํฌํ„ธ์˜ ๋ฐฐํฌ ์ƒํƒœ, ์ด๋ฉ”์ผ ๋ฐœ์†ก ์ด๋ ฅ, ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Vercel ๋ฐฐํฌ ์ƒํƒœ ํ™•์ธ

ํฌํ„ธ์€ GitHub main ๋ธŒ๋žœ์น˜์— pushํ•˜๋ฉด Vercel์ด ์ž๋™์œผ๋กœ ๋นŒ๋“œํ•˜๊ณ  ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ ํ˜„ํ™ฉ ํ™•์ธ

  1. Vercel ๋Œ€์‹œ๋ณด๋“œย ์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.
  2. csoweb ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  3. Deployments ํƒญ์—์„œ ๋ฐฐํฌ ์ด๋ ฅ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
์ƒํƒœ์˜๋ฏธ
Ready๋ฐฐํฌ ์™„๋ฃŒ, ์ •์ƒ ์šด์˜ ์ค‘
Building๋นŒ๋“œ ์ง„ํ–‰ ์ค‘
Error๋นŒ๋“œ ์‹คํŒจ
Canceled๋ฐฐํฌ ์ทจ์†Œ๋จ

ํ”„๋ฆฌ๋ทฐ ๋ฐฐํฌ

PR(Pull Request) ์ƒ์„ฑ ์‹œ Vercel์ด ์ž๋™์œผ๋กœ ํ”„๋ฆฌ๋ทฐ URL์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ฆฌ๋ทฐ ๋ฐฐํฌ์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ธํ•œ ํ›„ main์— ๋จธ์ง€ํ•˜๋ฉด ํ”„๋กœ๋•์…˜์— ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.

์ด๋ฉ”์ผ ๋ฐœ์†ก ์ด๋ ฅ (/admin/emails)

๋ฐœ์†ก๋œ ๋ชจ๋“  ์ด๋ฉ”์ผ ๋‚ด์—ญ์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

ํ†ต๊ณ„ ์นด๋“œ

ํŽ˜์ด์ง€ ์ƒ๋‹จ์— 4๊ฐœ์˜ ํ†ต๊ณ„ ์นด๋“œ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์นด๋“œ์„ค๋ช…
์ „์ฒด์กฐํšŒ ๊ธฐ๊ฐ„ ๋‚ด ์ด ์ด๋ฉ”์ผ ์ˆ˜
๋ฐœ์†ก ์™„๋ฃŒ์ •์ƒ์ ์œผ๋กœ ์ „๋‹ฌ๋œ ์ด๋ฉ”์ผ ์ˆ˜
๋ฐœ์†ก ์‹คํŒจ์ „์†ก์— ์‹คํŒจํ•œ ์ด๋ฉ”์ผ ์ˆ˜
๋Œ€๊ธฐ ์ค‘์•„์ง ๋ฐœ์†ก๋˜์ง€ ์•Š์€ ์ด๋ฉ”์ผ ์ˆ˜

ํ•„ํ„ฐ๋ง

ํ•„ํ„ฐ์˜ต์…˜
๊ธฐ๊ฐ„์ตœ๊ทผ 7์ผ, 30์ผ, 90์ผ, ์ „์ฒด
์œ ํ˜•์ „์ฒด, ๊ฐ€์ž…์‹ ์ฒญ, ์Šน์ธ์™„๋ฃŒ, ๊ฑฐ๋ถ€, ์ •์‚ฐ์—…๋กœ๋“œ, ๋น„๋ฐ€๋ฒˆํ˜ธ์žฌ์„ค์ •, ๋ฉ”์ผ๋จธ์ง€
์ƒํƒœ์ „์ฒด, ๋ฐœ์†ก์™„๋ฃŒ, ์‹คํŒจ, ๋Œ€๊ธฐ์ค‘

์ด๋ฉ”์ผ ๋กœ๊ทธ ํ…Œ์ด๋ธ”

์ปฌ๋Ÿผ๋‚ด์šฉ
์ˆ˜์‹ ์ž์ด๋ฉ”์ผ ์ฃผ์†Œ
์ œ๋ชฉ์ด๋ฉ”์ผ ์ œ๋ชฉ
์œ ํ˜•์ด๋ฉ”์ผ ํ…œํ”Œ๋ฆฟ ์œ ํ˜• (๋ฑƒ์ง€)
์ƒํƒœsent/failed/pending (์ƒ‰์ƒ ๋ฑƒ์ง€)
๋ฐœ์†ก์ผ์‹œ๋ฐœ์†ก ์™„๋ฃŒ ์‹œ์ 
์—๋Ÿฌ ๋ฉ”์‹œ์ง€์‹คํŒจ ์‹œ ์—๋Ÿฌ ๋‚ด์šฉ

์‹คํŒจํ•œ ์ด๋ฉ”์ผ์€ ๋นจ๊ฐ„์ƒ‰ ๋ฑƒ์ง€๋กœ ํ‘œ์‹œ๋˜๋ฉฐ, ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•˜์—ฌ ์›์ธ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฉ”์ผ๋จธ์ง€ ๋ฐœ์†ก (/admin/mailmerge)

CSO ์—…์ฒด๋“ค์—๊ฒŒ ๊ฐœ์ธํ™”๋œ ์ด๋ฉ”์ผ์„ ์ผ๊ด„ ๋ฐœ์†กํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์—…์ฒด์˜ ์ •์‚ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณธ๋ฌธ์— ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์‹ ์ž ์„ค์ •

์˜ต์…˜์„ค๋ช…
์ „์ฒด ํšŒ์›์Šน์ธ๋œ ๋ชจ๋“  CSO ์—…์ฒด์— ๋ฐœ์†ก
์ •์‚ฐ์›” ๊ธฐ์ค€ํŠน์ • ์ •์‚ฐ์›”์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ์—…์ฒด์—๋งŒ ๋ฐœ์†ก

์„น์…˜(๊ฑฐ๋ž˜์ฒ˜๋ณ„, ์ œํ’ˆ๋ณ„, ์˜์—…์‚ฌ์›๋ณ„ ๋“ฑ)์„ ์„ ํƒํ•˜์—ฌ ์ •์‚ฐ ํ…Œ์ด๋ธ”์„ ๋ณธ๋ฌธ์— ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„น์…˜ ์ˆœ์„œ๋Š” ๋“œ๋ž˜๊ทธ๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฉ”์ผ ์ž‘์„ฑ

  • ์ œ๋ชฉ: ๋ณ€์ˆ˜ ์‚ฝ์ž… ๊ฐ€๋Šฅ (์˜ˆ: {{์—…์ฒด๋ช…}}๋‹˜ ์ •์‚ฐ ์•ˆ๋‚ด)
  • ๋ณธ๋ฌธ: ์ž์œ  ํ…์ŠคํŠธ + ๋ณ€์ˆ˜ ์‚ฝ์ž…
  • ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ณ€์ˆ˜: {{์—…์ฒด๋ช…}}, {{๋Œ€ํ‘œ์ž๋ช…}}, {{์‚ฌ์—…์ž๋ฒˆํ˜ธ}}, {{์ •์‚ฐ์›”}} ๋“ฑ

๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฐ ํ…Œ์ŠคํŠธ ๋ฐœ์†ก

  1. ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ โ†’ ๋ณ€์ˆ˜๊ฐ€ ์น˜ํ™˜๋œ ์‹ค์ œ ์ด๋ฉ”์ผ ๋‚ด์šฉ ํ™•์ธ
  2. ํ…Œ์ŠคํŠธ ๊ณ„์ • ์„ ํƒ โ†’ ํ…Œ์ŠคํŠธ ๋ฐœ์†ก ์œผ๋กœ ์‹ค์ œ ์ˆ˜์‹  ํ™•์ธ
  3. ํ…Œ์ŠคํŠธ ํ™•์ธ ํ›„ ๋ฐœ์†กํ•˜๊ธฐ ํด๋ฆญ

๋ฐœ์†ก ๊ณผ์ •

๋ฐœ์†ก์€ SSE(Server-Sent Events)๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ์ง„ํ–‰ ์ƒํ™ฉ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ์„ค๋ช…
์ง„ํ–‰๋ฅ  ๋ฐ”์ „์ฒด ๋Œ€๋น„ ๋ฐœ์†ก ์™„๋ฃŒ ํผ์„ผํŠธ
์˜ˆ์ƒ ์ž”์—ฌ ์‹œ๊ฐ„๋‚จ์€ ๋ฐœ์†ก ์‹œ๊ฐ„ ์ž๋™ ๊ณ„์‚ฐ
์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ๊ฐ ์ด๋ฉ”์ผ ๋ฐœ์†ก ๊ฒฐ๊ณผ (์„ฑ๊ณต/์‹คํŒจ) ์ˆœ์ฐจ ํ‘œ์‹œ
์ทจ์†Œ ๋ฒ„ํŠผ๋ฐœ์†ก ์ค‘ ์–ธ์ œ๋“  ์ค‘๋‹จ ๊ฐ€๋Šฅ

๋ฐœ์†ก ๊ฐ„๊ฒฉ

์„ค์ •๊ธฐ๋ณธ๊ฐ’์„ค๋ช…
์ด๋ฉ”์ผ ๋ฐœ์†ก ๊ฐ„๊ฒฉ6์ดˆ๋ฉ”์ผ๋จธ์ง€ ์‹œ ๊ฑด๋ณ„ ๋Œ€๊ธฐ ์‹œ๊ฐ„
๋ฐฐ์น˜ ์Šน์ธ ๊ฐ„๊ฒฉ200ms์ผ๊ด„ ์Šน์ธ ์ด๋ฉ”์ผ ๊ฐ„ ๋Œ€๊ธฐ ์‹œ๊ฐ„

๋ฐœ์†ก ๊ฐ„๊ฒฉ์€ /admin/email-settings์—์„œ email_send_delay_ms ๊ฐ’์œผ๋กœ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Resend API์˜ Rate Limit(์ดˆ๋‹น 2๊ฑด)์„ ์ดˆ๊ณผํ•˜์ง€ ์•Š๋„๋ก 6์ดˆ ์ด์ƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ฐœ์†ก ๊ฒฐ๊ณผ

๋ฐœ์†ก ์™„๋ฃŒ ํ›„ ๊ฒฐ๊ณผ ์š”์•ฝ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ์„ค๋ช…
์ด ๋ฐœ์†ก ์ˆ˜์‹œ๋„ํ•œ ์ด๋ฉ”์ผ ์ˆ˜
์„ฑ๊ณต์ •์ƒ ๋ฐœ์†ก๋œ ์ˆ˜
์‹คํŒจ๋ฐœ์†ก ์‹คํŒจํ•œ ์ˆ˜ + ์—๋Ÿฌ ๋‚ด์šฉ
์†Œ์š” ์‹œ๊ฐ„์ „์ฒด ๋ฐœ์†ก์— ๊ฑธ๋ฆฐ ์‹œ๊ฐ„

์‹œ์Šคํ…œ ์ •๋ณด (/admin/system)

์‹œ์Šคํ…œ ๊ตฌ์„ฑ ๋ฐ ์™ธ๋ถ€ ์„œ๋น„์Šค ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ํ•œ๋ˆˆ์— ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ฝ๊ธฐ ์ „์šฉ ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค.

์•ฑ ์ •๋ณด ์นด๋“œ

ํ•ญ๋ชฉ๋‚ด์šฉ
์•ฑ ์ด๋ฆ„CSO ์ •์‚ฐ ํฌํ„ธ
๋ฒ„์ „package.json ๋ฒ„์ „
ํ™˜๊ฒฝproduction / development
Node.js ๋ฒ„์ „๋Ÿฐํƒ€์ž„ ๋ฒ„์ „

๋ฐฐํฌ ์นด๋“œ

ํ•ญ๋ชฉ๋‚ด์šฉ
๋ฐฐํฌ ํ”Œ๋žซํผVercel
๋ฐฐํฌ URLํ”„๋กœ๋•์…˜ ๋„๋ฉ”์ธ
๋นŒ๋“œ IDVercel ๋ฐฐํฌ ID
๋ฆฌ์ „๋ฐฐํฌ ๋ฆฌ์ „

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์นด๋“œ

ํ•ญ๋ชฉ๋‚ด์šฉ
ํ”„๋กœ๋ฐ”์ด๋”Supabase
์—ฐ๊ฒฐ ์ƒํƒœ์ •์ƒ/์˜ค๋ฅ˜
ํ”„๋กœ์ ํŠธ URLSupabase ํ”„๋กœ์ ํŠธ ์ฃผ์†Œ

์™ธ๋ถ€ API ์นด๋“œ

ํ•ญ๋ชฉ๋‚ด์šฉ
Resend API์„ค์ • ์—ฌ๋ถ€ ๋ฐ ์—ฐ๊ฒฐ ์ƒํƒœ
SMTPํ˜ธ์ŠคํŠธ/ํฌํŠธ ์„ค์ • ์ƒํƒœ

์ธ์ฆ ์นด๋“œ

ํ•ญ๋ชฉ๋‚ด์šฉ
JWT Secret์„ค์ • ์—ฌ๋ถ€ (๊ฐ’์€ ํ‘œ์‹œํ•˜์ง€ ์•Š์Œ)
์„ธ์…˜ ๋งŒ๋ฃŒ24์‹œ๊ฐ„

์ด๋ฉ”์ผ ์„œ๋น„์Šค ์นด๋“œ

ํ•ญ๋ชฉ๋‚ด์šฉ
ํ˜„์žฌ ํ”„๋กœ๋ฐ”์ด๋”Resend ๋˜๋Š” SMTP
๋ฐœ์‹  ์ด๋ฉ”์ผ์„ค์ •๋œ ๋ฐœ์‹ ์ž ์ฃผ์†Œ
๋ฐœ์†ก ๊ฐ„๊ฒฉ์„ค์ •๋œ ๋”œ๋ ˆ์ด (ms)

์—๋Ÿฌ ๋กœ๊ทธ ํ™•์ธ

Vercel ๋Œ€์‹œ๋ณด๋“œ

  1. Vercel ๋Œ€์‹œ๋ณด๋“œ โ†’ csoweb ํ”„๋กœ์ ํŠธ โ†’ Logs ํƒญ
  2. Runtime Logs: ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์—๋Ÿฌ (API ๋ผ์šฐํŠธ, ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ)
  3. Build Logs: ๋นŒ๋“œ ์‹œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ

์ฃผ์š” ๋ชจ๋‹ˆํ„ฐ๋ง ํฌ์ธํŠธ

ํ•ญ๋ชฉํ™•์ธ ๋ฐฉ๋ฒ•๋นˆ๋„
๋ฐฐํฌ ์ƒํƒœVercel Deployments๋ฐฐํฌ ์‹œ
์ด๋ฉ”์ผ ๋ฐœ์†ก ์‹คํŒจ/admin/emails ์‹คํŒจ ํ•„ํ„ฐ์ฃผ 1ํšŒ
CSO ๋งค์นญ ๋ˆ„๋ฝ/admin/integrity์—…๋กœ๋“œ ํ›„
DB ์—ฐ๊ฒฐ/admin/system๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ
API ์—๋ŸฌVercel Runtime Logs๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ

์ด๋ฉ”์ผ ์•Œ๋ฆผ ์„ค์ • (/admin/email-settings)

์ด๋ฉ”์ผ ์œ ํ˜•๋ณ„๋กœ ์ž๋™ ๋ฐœ์†ก ์—ฌ๋ถ€๋ฅผ ON/OFFํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ ํ˜•๊ธฐ๋ณธ๊ฐ’์ˆ˜์‹ ์ž
๊ฐ€์ž… ์‹ ์ฒญ ์•Œ๋ฆผON๊ด€๋ฆฌ์ž
์Šน์ธ ์™„๋ฃŒ ์•Œ๋ฆผONํšŒ์›
๊ฑฐ๋ถ€ ์•Œ๋ฆผONํšŒ์›
์ •์‚ฐ์„œ ์—…๋กœ๋“œ ์•Œ๋ฆผONํšŒ์›
๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ •ONํšŒ์›

๋ฉ”์ผ๋จธ์ง€๋Š” ์ˆ˜๋™ ๋ฐœ์†ก์ด๋ฏ€๋กœ ์ด ์„ค์ •์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ฉ”์ผ ํ”„๋กœ๋ฐ”์ด๋” ์„ค์ •

ํ”„๋กœ๋ฐ”์ด๋”์„ค์ • ํ•ญ๋ชฉ
ResendAPI ํ‚ค (ํ™˜๊ฒฝ๋ณ€์ˆ˜), ๋ฐœ์‹  ์ด๋ฉ”์ผ ์ฃผ์†Œ
SMTP (ํ•˜์ด์›์Šค)ํ˜ธ์ŠคํŠธ, ํฌํŠธ(465 SSL), ์‚ฌ์šฉ์ž๋ช…, ๋น„๋ฐ€๋ฒˆํ˜ธ, ๋ฐœ์‹ ์ž๋ช…, ๋ฐœ์‹  ์ด๋ฉ”์ผ

ํ”„๋กœ๋ฐ”์ด๋” ์ „ํ™˜ ์‹œ ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ ๋ฒ„ํŠผ์œผ๋กœ ์„ค์ •์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ด๋ฉ”์ผ์ด test_recipient_email๋กœ ๋ฐœ์†ก๋ฉ๋‹ˆ๋‹ค.