Skip to content

Latest commit

ย 

History

56 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ  ZIPUP

AI๋กœ ๋ถ€๋™์‚ฐ ๊ณ„์•ฝ์˜ ์œ„ํ—˜์„ ๋ฏธ๋ฆฌ ์•Œ๋ ค์ฃผ๋Š”, ์ƒ๊ฒฝ ์ฒญ๋…„์„ ์œ„ํ•œ ์•ˆ์‹ฌ ์ฃผ๊ฑฐ ์„œ๋น„์Šค

์ง€๋ฐฉ์—์„œ ์„œ์šธ๋กœ ์ƒ๊ฒฝํ•ด ์ฒ˜์Œ ์ง‘์„ ๊ตฌํ•˜๋Š” ์ฒญ์†Œ๋…„ยท์‚ฌํšŒ์ดˆ๋…„์ƒ์€ ๋ถ€๋™์‚ฐ ์ •๋ณด์—๋Š” ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ „๋ฌธ์ ์ธ ๋ฒ•๋ฅ  ์ง€์‹์ด ์—†์–ด ๊ณ„์•ฝ์„œ์˜ ์œ„ํ—˜ ์š”์†Œ๋ฅผ ์Šค์Šค๋กœ ํŒ๋‹จํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ZIPUP์€ AI๊ฐ€ ๊ณ„์•ฝ์„œ์™€ ๋Œ€ํ™” ๋‚ด์šฉ์„ ๋ถ„์„ํ•ด ์œ„ํ—˜์„ ๋ฏธ๋ฆฌ ์•Œ๋ ค์ฃผ๊ณ , ์ง€์—ญ๋ณ„ ์œ„ํ—˜๋„๋ฅผ ์ง€๋„๋กœ ์‹œ๊ฐํ™”ํ•ด ์•ˆ์ „ํ•œ ์ฃผ๊ฑฐ ๊ฒฐ์ •์„ ๋•์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ ์ฃผ์š” ๊ธฐ๋Šฅ

1. AI ๊ณ„์•ฝ์„œ ์•ˆ์ „ ์Šค์บ”

๊ณ„์•ฝ์„œ ์ด๋ฏธ์ง€ยทPDF๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด Gemini API๊ฐ€ ๋‚ด์šฉ์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ๋ณด์ฆ๊ธˆ, ํŠน์•ฝ์‚ฌํ•ญ ๋“ฑ ํ•ต์‹ฌ ์ •๋ณด๋Š” ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ๋ชจ๋ธ์ด ์ด๋ฏธ์ง€์—์„œ ์ง์ ‘ ์ธ์‹ํ•˜๋ฉฐ, ๊ทธ ์ „ ๋‹จ๊ณ„๋กœ ์—…๋กœ๋“œ๋œ ์ด๋ฏธ์ง€์˜ ๊ฐœ์ธ์ •๋ณด๋Š” ์ž๋™์œผ๋กœ ๊ฐ€๋ ค์ง‘๋‹ˆ๋‹ค.

  • ์—…๋กœ๋“œ ์ „ ๊ฐœ์ธ์ •๋ณด ์ž๋™ ๋งˆ์Šคํ‚น: CLOVA OCR๋กœ ์ด๋ฏธ์ง€์—์„œ ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธยท๊ณ„์ขŒ๋ฒˆํ˜ธยท์ „ํ™”๋ฒˆํ˜ธยท ์ž„๋Œ€์ธ/์ž„์ฐจ์ธ ์„ฑ๋ช…ยท๋‹น์‚ฌ์ž ๊ฐœ์ธ ์ฃผ์†Œ์˜ ์œ„์น˜(์ขŒํ‘œ)๋ฅผ ์ฐพ์•„ ๊ฒ€์€ ์‚ฌ๊ฐํ˜•์œผ๋กœ ๊ฐ€๋ฆฐ ๋’ค์—๋งŒ Gemini๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ๋งค๋ฌผ ์ฃผ์†Œยท๋ณด์ฆ๊ธˆยทํŠน์•ฝ์‚ฌํ•ญ ๋“ฑ ์œ„ํ—˜ ๋ถ„์„์— ํ•„์š”ํ•œ ๋‚ด์šฉ์€ ๊ฐ€๋ฆฌ์ง€ ์•Š์œผ๋ฉฐ, OCR์ด ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ๋งˆ์Šคํ‚น์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†์œผ๋ฉด ๋ถ„์„ ์ž์ฒด๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค(์›๋ณธ์ด ์ƒˆ์–ด๋‚˜๊ฐ€์ง€ ์•Š๋Š” fail-safe ๊ตฌ์กฐ). ์ „์ฒด ๋ฐ์ดํ„ฐ ํ๋ฆ„์€ docs/PRIVACY_FLOW.md์— ๋‹จ๊ณ„๋ณ„๋กœ ์ •๋ฆฌ๋ผ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์—…๋กœ๋“œ ์ „ ์ด๋ฏธ์ง€๋ฅผ ์ตœ๋Œ€ 1200px๋กœ ๋‹ค์šด์Šค์ผ€์ผ: ์นด๋ฉ”๋ผ๋กœ ์ฐ์€ ์›๋ณธ ํ•ด์ƒ๋„ ์‚ฌ์ง„์„ ๊ทธ๋Œ€๋กœ ๋ณด๋‚ด๋ฉด ์„œ๋ฒ„(magick-wasm)๊ฐ€ ๋ฆฌ์‚ฌ์ด์ฆˆ ์ „์— ์›๋ณธ ํ•ด์ƒ๋„๋กœ ๋จผ์ € ๋””์ฝ”๋“œํ•ด์•ผ ํ•ด์„œ Edge Function CPU ์‹œ๊ฐ„ ์ œํ•œ(2์ดˆ)์„ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค(์‹ค์ธก cpu_time_used ์ตœ๋Œ€ 3872ms, ์˜ค๋ฅ˜ 546). ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—…๋กœ๋“œ ์ „์— 1200px๋กœ ๋ฏธ๋ฆฌ ์ถ•์†Œํ•˜๊ณ  base64 ์ธ์ฝ”๋”ฉ๋„ ์ฒญํฌ ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•ด CPU ๋ถ€ํ•˜๋ฅผ ์ค„์—ฌ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  • PDF๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ pdf.js๋กœ ๊ฐ ํŽ˜์ด์ง€๋ฅผ ์ด๋ฏธ์ง€๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค ์—…๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค(์„œ๋ฒ„๋Š” ์ด๋ฏธ์ง€๋งŒ ์ฒ˜๋ฆฌ). ํŽ˜์ด์ง€๊ฐ€ ๋งŽ์•„ ํ•ด์ƒ๋„๊ฐ€ ๋‚ฎ์•„์ง€๋ฉด ์—…๋กœ๋“œ ์‹œ ์ธ์‹๋ฅ  ์ €ํ•˜ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • RAG ๊ธฐ๋ฐ˜ ์œ„ํ—˜ ํŒจํ„ด ๋Œ€์กฐ: ๋ถ„์„ ์ „ contract_risk_patterns(์ „์„ธ์‚ฌ๊ธฐยท๋…์†Œ์กฐํ•ญ ์‹ค์ œ ํ”ผํ•ด ํŒจํ„ด DB)์—์„œ ๊ด€๋ จ ์‚ฌ๋ก€๋ฅผ ๊ฒ€์ƒ‰ํ•ด ํ”„๋กฌํ”„ํŠธ์— ํฌํ•จ, ์‹ค์ œ ์‚ฌ๋ก€ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ„ํ—˜ ์กฐํ•ญ์„ ํŒ๋ณ„ (AI ํ™˜๊ฐ ๋ฐฉ์ง€)
  • HUG ์ƒ์Šต ์ฑ„๋ฌด๋ถˆ์ดํ–‰์ž ์‹ค๋ช…๋‹จ ๋Œ€์กฐ: ๋งˆ์Šคํ‚น ์ „ CLOVA OCR๋กœ ์ฝ์€ ์ž„๋Œ€์ธ ์ด๋ฆ„์„ hug_defaulters(HUG ๊ณต๊ฐœ ๋ช…๋‹จ, ์ฃผ 1ํšŒ ์ž๋™ ๋™๊ธฐํ™”)์™€ trigram ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰์œผ๋กœ ์ง์ ‘ ๋Œ€์กฐ โ€” ์ผ์น˜ ์‹œ ๊ฐ•ํ•œ ๊ฒฝ๊ณ  ๋ฐฐ๋„ˆ๋กœ ํ‘œ์‹œ (AI ์ถ”์ •์ด ์•„๋‹Œ ๊ณต์‹ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์‚ฌ์‹ค ํ™•์ธ. ์ด ์ด๋ฆ„์€ HUG ์กฐํšŒ ์ „์šฉ์ด๋ฉฐ Gemini์—๋Š” ์ „๋‹ฌ๋˜์ง€ ์•Š์Œ)
  • ์ข…ํ•ฉ ์ ์ˆ˜๋Š” ์„œ๋ฒ„๊ฐ€ ๊ฐ€์ค‘ํ‰๊ท ์œผ๋กœ ๊ณ„์‚ฐ: Gemini๋Š” ๊ถŒ๋ฆฌ๊ด€๊ณ„ยทํŠน์•ฝ์‚ฌํ•ญยท๊ฑด๋ฌผ์ƒํƒœ 3๊ฐœ ํ•ญ๋ชฉ๋งŒ ์ฑ„์ ํ•˜๊ณ , ์ „์„ธ๊ฐ€์œจ์€ ์„œ๋ฒ„๊ฐ€ ๊ณ„์•ฝ์„œ ์ฃผ์†Œยท๋ณด์ฆ๊ธˆ์„ ๊ตญํ† ๊ตํ†ต๋ถ€ ์‹ค๊ฑฐ๋ž˜๊ฐ€์™€ ์ง์ ‘ ๋น„๊ตํ•ด ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ข…ํ•ฉ ์ ์ˆ˜๋Š” ์ด 4๊ฐœ ํ•ญ๋ชฉ(๊ถŒ๋ฆฌ๊ด€๊ณ„ 35% ยท ํŠน์•ฝ์‚ฌํ•ญ 30% ยท ์ „์„ธ๊ฐ€์œจ 25% ยท ๊ฑด๋ฌผ์ƒํƒœ 10%)์˜ ๊ฐ€์ค‘ํ‰๊ท ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ์‚ฐ์ถœํ•˜๋ฏ€๋กœ ๊ฐ™์€ ๊ณ„์•ฝ์„œ๋ฅผ ๋‹ค์‹œ ๋ถ„์„ํ•ด๋„ ํ•ญ๋ชฉ ๊ฒฐํ•ฉ ๋ฐฉ์‹์€ ํ•ญ์ƒ ๋™์ผํ•˜๋ฉฐ, ๋Œ€ํ•ญ๋ ฅ ์•…์šฉยท์‹ ํƒ ๋ถ€๋™์‚ฐ ๋“ฑ ์น˜๋ช…์  ์œ„ํ—˜ ํŒจํ„ด์ด ํ™•์ธ๋˜๋ฉด ๊ณ„์‚ฐ๊ฐ’๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ์œ„ํ—˜ ๋“ฑ๊ธ‰ ํ•˜ํ•œ(61์ )์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฝ๋‹ˆ๋‹ค. ์ ์ˆ˜๋Š” ์•ˆ์‹ฌ ์‹œ๊ทธ๋„ ๋งต๊ณผ ๋™์ผํ•˜๊ฒŒ ๋†’์„์ˆ˜๋ก ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค(2026-08-21 ์ด์ „ ๋ถ„์„ ์ด๋ ฅ์€ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ๊ณ„์‚ฐ๋ผ ์žˆ์–ด ๊ฒฐ๊ณผ ํ™”๋ฉด์— ์˜ˆ์ „ ๊ธฐ์ค€์ž„์„ ๋ณ„๋„๋กœ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค). ์‚ฐ์ • ๊ธฐ์ค€ ์ „์ฒด๋Š” ์•ฑ ๋‚ด /scoring ํŽ˜์ด์ง€์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ „์„ธ๊ฐ€์œจ์€ ์‹ค๊ฑฐ๋ž˜๊ฐ€ ๊ธฐ๋ฐ˜ ์‹ค์ธก๊ฐ’: ๊ณ„์•ฝ์„œ ์ฃผ์†Œ๋กœ ์ง€์—ญ์„ ์ฐพ์•„(DB ํ•จ์ˆ˜ match_region_by_address) ๊ตญํ† ๊ตํ†ต๋ถ€ ํ‰๊ท  ๋งค๋งค๊ฐ€์™€ ๋ณด์ฆ๊ธˆ์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์†Œ์™€ ์ผ์น˜ํ•˜๋Š” ์ง€์—ญ์ด ์—†๊ฑฐ๋‚˜ ํ•ด๋‹น ์ง€์—ญ์˜ ์ตœ๊ทผ ์‹ค๊ฑฐ๋ž˜๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด "๋ฐ์ดํ„ฐ ์—†์Œ"์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  ์ข…ํ•ฉ ์ ์ˆ˜ ๊ณ„์‚ฐ์—์„œ ์ œ์™ธํ•œ ๋’ค ๋‚จ์€ ํ•ญ๋ชฉ๋ผ๋ฆฌ ๊ฐ€์ค‘์น˜๋ฅผ ์žฌ์ •๊ทœํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ์œ„ํ—˜/์ฃผ์˜/์•ˆ์ „ ํƒœ๊ทธ๊ฐ€ ๋ถ™์€ ์กฐํ•ญ๋ณ„ ์ƒ์„ธ ์„ค๋ช…
  • AI ์ถ”์ฒœ ์กฐ์น˜(๋ฐฉ์–ด ํŠน์•ฝ ๋ฌธ๊ตฌ ํฌํ•จ ์ฒดํฌ๋ฆฌ์ŠคํŠธ) ๋ฐ ์ข…ํ•ฉ ์ฝ”๋ฉ˜ํŠธ ์ œ๊ณต
  • Gemini ์„œ๋ฒ„ ๊ณผ๋ถ€ํ•˜(503)ยทํ• ๋‹น๋Ÿ‰ ์ดˆ๊ณผ(429) ์‹œ ์ž๋™ ์žฌ์‹œ๋„(์ง€์ˆ˜ ๋ฐฑ์˜คํ”„)๋กœ ์•ˆ์ •์„ฑ ํ™•๋ณด

2. ๋งˆ์Œ ์ƒ๋‹ด (๋ถ€๋™์‚ฐ ๊ฐ€์Šค๋ผ์ดํŒ… ํƒ์ง€ AI)

์ค‘๊ฐœ์ธยท์ง‘์ฃผ์ธ์—๊ฒŒ ๋ฐ›์€ ๋ฌธ์žยท์นดํ†ก ๋‚ด์šฉ(ํ…์ŠคํŠธ ๋˜๋Š” ์บก์ฒ˜ ์ด๋ฏธ์ง€)์„ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.

  • ์ตœ์ข… ์œ„ํ—˜๋„ ํŒ์ •์€ ๊ทœ์น™ ๊ธฐ๋ฐ˜ ํ‚ค์›Œ๋“œ ๋งค์นญ: Robert Cialdini(1984, Influence: The Psychology of Persuasion)์˜ ์„ค๋“์˜ 6์›์น™(ํฌ์†Œ์„ฑยท๊ถŒ์œ„ยท์‚ฌํšŒ์  ์ฆ๊ฑฐยท์ƒํ˜ธ์„ฑยทํ˜ธ๊ฐยท์ผ๊ด€์„ฑ) ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฅ˜ํ•œ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ํ‚ค์›Œ๋“œ๊ฐ€ ๋Œ€ํ™” ํ…์ŠคํŠธ์— ๋“ฑ์žฅํ•˜๋Š”์ง€ ๋งค์นญํ•ด ์ ์ˆ˜ํ™”ํ•˜๊ณ , ๋“ฑ๊ธ‰(์•ˆ์ „/์ฃผ์˜/์œ„ํ—˜)์„ ๋งค๊น๋‹ˆ๋‹ค. Gemini ํ˜ธ์ถœ์€ ์œ ์ง€ํ•˜๋˜ ์ตœ์ข… ์œ„ํ—˜๋„(riskLevel)๋Š” ์ด ๊ทœ์น™ ๊ธฐ๋ฐ˜ ๊ฒฐ๊ณผ๋ฅผ ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค โ€” AI ์ฃผ๊ด€์  ํŒ๋‹จ ๋Œ€์‹  ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ์‹ฌ๋ฆฌํ•™ ์ด๋ก  ๊ธฐ๋ฐ˜ ๊ทœ์น™์œผ๋กœ ์‹ ๋ขฐ๋„๋ฅผ ๋†’์˜€์Šต๋‹ˆ๋‹ค.
  • ์žฌ์ด‰, ํ—ˆ์œ„์ •๋ณด ์ฃผ์ž…, ์‹ ๋ขฐ ์œ ๋„ ๋“ฑ ํŒจํ„ด๋ณ„ ํ™•์‹ ๋„(%) ํ‘œ์‹œ
  • ๋Œ€ํ™” ์œ„ํ—˜๋„ ๊ฒŒ์ด์ง€ ๋ฐ ์ข…ํ•ฉ ์‹ ๋ขฐ๋„ ํ‘œ์‹œ
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ”๋กœ ๋ณต์‚ฌํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ๋Š” AI ์ถ”์ฒœ ๋Œ€์‘ ๋ฉ˜ํŠธ ์ œ๊ณต

3. ์•ˆ์‹ฌ ์‹œ๊ทธ๋„ ๋งต

์ „๊ตญ ์‹œ/๊ตฐ/๊ตฌ(252๊ฐœ ์ง€์—ญ) ๋‹จ์œ„์˜ ์ฃผ๊ฑฐ ์œ„ํ—˜๋„๋ฅผ ์ง€๋„์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์œ„ํ—˜๋„ ๊ณต์‹: ์ „์„ธ๊ฐ€์œจ(50%, ๊ตญํ† ๊ตํ†ต๋ถ€ ์‹ค๊ฑฐ๋ž˜๊ฐ€ ๊ธฐ๋ฐ˜ ์ •๋Ÿ‰ ์ง€ํ‘œ) + HUG ์ƒ์Šต ์ฑ„๋ฌด๋ถˆ์ดํ–‰์ž ๋ฐ€๋„(30%, ์‹ค์ œ ์‚ฌ๊ณ  ์ด๋ ฅ ๊ธฐ๋ฐ˜) + ๋‰ด์Šค ์–ธ๊ธ‰ ๋นˆ๋„(20%, ์–ธ๋ก  ๋…ธ์ถœ ์ฐธ๊ณ  ์ง€ํ‘œ) ๊ฐ€์ค‘ ๊ฒฐํ•ฉ
  • ์•„ํŒŒํŠธ+์—ฐ๋ฆฝ๋‹ค์„ธ๋Œ€ ์‹ค๊ฑฐ๋ž˜๊ฐ€๋ฅผ ๋ชจ๋‘ ๋ฐ˜์˜ํ•˜๋ฉฐ, ์‹œ์„ธ ํŒŒ์•…์ด ์–ด๋ ค์›Œ ์‹ค์ œ ์œ„ํ—˜์ด ๋” ํฐ ์—ฐ๋ฆฝ๋‹ค์„ธ๋Œ€(๋นŒ๋ผ)์— ๋” ๋†’์€ ๊ฐ€์ค‘์น˜ ์ ์šฉ
  • hug_defaulters ์ฃผ์†Œ๋ฅผ ์ง€์—ญ๋ช… ๊ธฐ์ค€์œผ๋กœ ๋งค์นญํ•ด ์ง€์—ญ๋ณ„ ์ƒ์Šต ์ฑ„๋ฌด๋ถˆ์ดํ–‰์ž ๋ฐ€๋„ ์‚ฐ์ถœ (์ „๊ตญ 98.9% ์ง€์—ญ ๋งค์นญ)
  • ๋„ค์ด๋ฒ„ ๋‰ด์Šค "{์ง€์—ญ} ์ „์„ธ์‚ฌ๊ธฐ" ์–ธ๊ธ‰ ๋นˆ๋„๋Š” ๊ณต์‹ ํ†ต๊ณ„๊ฐ€ ์•„๋‹Œ ์ฐธ๊ณ  ์ง€ํ‘œ์ž„์„ ํ™”๋ฉด์— ๋ช…์‹œ
  • ์นด์นด์˜ค๋งต ์œ„์— ์ „๊ตญ ์‹œ/๊ตฐ/๊ตฌ ๊ฒฝ๊ณ„๋ฅผ ์œ„ํ—˜/์ฃผ์˜/์•ˆ์ „ ๋‹จ๊ณ„๋ณ„ ์ƒ‰์ƒ์œผ๋กœ ์‹œ๊ฐํ™”
  • 20๋ถ„ ๊ฐ„๊ฒฉ ๋ฐฐ์น˜๋กœ ์ „๊ตญ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™ ์ˆœํ™˜ ๊ฐฑ์‹  (Supabase pg_cron + ์ปค์„œ ๊ธฐ๋ฐ˜ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ)

4. ์ตœ๊ทผ ์ „์„ธ์‚ฌ๊ธฐ ๋‰ด์Šค

๋„ค์ด๋ฒ„ ๋‰ด์Šค ๊ฒ€์ƒ‰ API๋กœ ์ตœ์‹  ์ „์„ธ์‚ฌ๊ธฐ ๊ด€๋ จ ๋‰ด์Šค๋ฅผ ํ™ˆ ํ™”๋ฉด์— ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

5. ๋กœ๊ทธ์ธ / ํšŒ์›๊ฐ€์ž…

Supabase Auth ๊ธฐ๋ฐ˜ ์ด๋ฉ”์ผ ์ธ์ฆ + Google, Kakao ์†Œ์…œ ๋กœ๊ทธ์ธ

6. ๋งˆ์ดํŽ˜์ด์ง€

  • ํ”„๋กœํ•„ ์ •๋ณด(์•„๋ฐ”ํƒ€, ์ด๋ฆ„, ์ด๋ฉ”์ผ, ์•ˆ์‹ฌ ํšŒ์› ๋ฐฐ์ง€)
  • ๋‚ด ๋ถ„์„ ์ด๋ ฅ: ๊ณ„์•ฝ์„œ ์Šค์บ” / ๋งˆ์Œ ์ƒ๋‹ด ๊ธฐ๋ก์„ ํƒญ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด ์กฐํšŒ (RLS๋กœ ๋ณธ์ธ ๋ฐ์ดํ„ฐ๋งŒ ๋…ธ์ถœ)
  • ์•Œ๋ฆผ ์„ค์ •, ์œ„ํ—˜๋„ ์‚ฐ์ • ๊ธฐ์ค€, ๊ฐœ์ธ์ •๋ณด ์ฒ˜๋ฆฌ๋ฐฉ์นจ, ๊ณ ๊ฐ์„ผํ„ฐ, ๋กœ๊ทธ์•„์›ƒ
  • (๊ด€๋ฆฌ์ž ์ „์šฉ) ๋ฐฐ์น˜ ์ž‘์—… ์ƒํƒœํŒ: ์•ˆ์‹ฌ ์‹œ๊ทธ๋„ ๋งตยท๋‰ด์Šค ๊ฐฑ์‹  ๋ฐฐ์น˜๊ฐ€ ์ •์ƒ ๋™์ž‘ ์ค‘์ธ์ง€ ๋ณด์—ฌ์ฃผ๋Š” ์šด์˜์šฉ ์นด๋“œ๋กœ, RLS๊ฐ€ ์ง€์ •๋œ ๊ด€๋ฆฌ์ž ๊ณ„์ •์—๋งŒ ์กฐํšŒ๋ฅผ ํ—ˆ์šฉํ•ด ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์•„์˜ˆ ๋ Œ๋”๋ง๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

๐Ÿ›  ๊ธฐ์ˆ  ์Šคํƒ

์˜์—ญ ๊ธฐ์ˆ 
ํ”„๋ก ํŠธ์—”๋“œ Vite, React, TypeScript, Tailwind CSS
๋ฐฑ์—”๋“œ Supabase Edge Functions (Deno)
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค Supabase (PostgreSQL), Row Level Security
์ธ์ฆ Supabase Auth
์Šค์ผ€์ค„๋ง Supabase pg_cron, pg_net
AI Google Gemini API (gemini-2.5-flash, ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ)
OCR ๋„ค์ด๋ฒ„ํด๋ผ์šฐ๋“œ CLOVA OCR (๊ฐœ์ธ์ •๋ณด ์œ„์น˜ ๊ฒ€์ถœ์šฉ)
์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ magick-wasm(์„œ๋ฒ„ ๋งˆ์Šคํ‚น), pdf.js(ํด๋ผ์ด์–ธํŠธ PDFโ†’์ด๋ฏธ์ง€ ๋ณ€ํ™˜)
์ง€๋„ Kakao Maps JavaScript SDK
๋ฐฐ์น˜ ์Šคํฌ๋ฆฝํŠธ Node.js, cheerio, iconv-lite, undici (HUG ๋ช…๋‹จ ๋™๊ธฐํ™”, GitHub Actions)

๐Ÿ”Œ ์™ธ๋ถ€ API

API ์šฉ๋„ ๋ฐœ๊ธ‰์ฒ˜
Google Gemini API ๊ณ„์•ฝ์„œ ์ด๋ฏธ์ง€/PDF ๋ถ„์„, ์œ„ํ—˜ ์กฐํ•ญ ํŒ๋ณ„, ๊ฐ€์Šค๋ผ์ดํŒ… ๋Œ€ํ™” ํŒจํ„ด ๋ถ„์„ Google AI Studio
๋„ค์ด๋ฒ„ํด๋ผ์šฐ๋“œ CLOVA OCR ์—…๋กœ๋“œ๋œ ๊ณ„์•ฝ์„œ ์ด๋ฏธ์ง€์—์„œ ๊ฐœ์ธ์ •๋ณด ์œ„์น˜(์ขŒํ‘œ) ๊ฒ€์ถœ โ†’ ๋งˆ์Šคํ‚น ์ฒ˜๋ฆฌ ๋„ค์ด๋ฒ„ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ
๋„ค์ด๋ฒ„ ๊ฒ€์ƒ‰ API (๋‰ด์Šค) ์ตœ๊ทผ ์ „์„ธ์‚ฌ๊ธฐ ๋‰ด์Šค ์กฐํšŒ, ์ง€์—ญ๋ณ„ "์ „์„ธ์‚ฌ๊ธฐ" ์–ธ๊ธ‰ ๋นˆ๋„ ์ง‘๊ณ„ ๋„ค์ด๋ฒ„ ๊ฐœ๋ฐœ์ž์„ผํ„ฐ
๊ตญํ† ๊ตํ†ต๋ถ€ ์‹ค๊ฑฐ๋ž˜๊ฐ€ API ์•„ํŒŒํŠธยท์—ฐ๋ฆฝ๋‹ค์„ธ๋Œ€ ๋งค๋งค/์ „์›”์„ธ ์‹ค๊ฑฐ๋ž˜๊ฐ€ โ†’ ์ง€์—ญ๋ณ„ ์ „์„ธ๊ฐ€์œจ ๊ณ„์‚ฐ ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ
HUG ์ƒ์Šต์ฑ„๋ฌด๋ถˆ์ดํ–‰์ž ๋ช…๋‹จ ๊ณ„์•ฝ์„œ ์ž„๋Œ€์ธ ์‹ค๋ช… ๋Œ€์กฐ, ์ง€์—ญ๋ณ„ ์œ„ํ—˜๋„ ๋ฐ€๋„ ์‚ฐ์ถœ HUG ์•ˆ์‹ฌ์ „์„ธํฌํ„ธ (๊ณต๊ฐœ ๋ช…๋‹จ ํŽ˜์ด์ง€ ์ฃผ๊ธฐ์  ๋™๊ธฐํ™”)
์นด์นด์˜ค๋งต API ์•ˆ์‹ฌ ์‹œ๊ทธ๋„ ๋งต ์ง€๋„ ๋ Œ๋”๋ง ๋ฐ ์ง€์—ญ ํด๋ฆฌ๊ณค ์‹œ๊ฐํ™” Kakao Developers
Google / Kakao OAuth ์†Œ์…œ ๋กœ๊ทธ์ธ Google Cloud Console / Kakao Developers

๊ตญํ† ๊ตํ†ต๋ถ€ API๋Š” ์•„ํŒŒํŠธ/์—ฐ๋ฆฝ๋‹ค์„ธ๋Œ€ ๊ฐ๊ฐ ๋งค๋งคยท์ „์›”์„ธ ์ž๋ฃŒ๋ฅผ ๋ณ„๋„๋กœ ์‹ ์ฒญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค (์ด 4๊ฐœ). HUG ๋ช…๋‹จ์€ ๋ณ„๋„ ์˜คํ”ˆAPI๊ฐ€ ์—†์–ด, scripts/sync-hug-defaulters.mjs๊ฐ€ ๊ณต๊ฐœ ๋ช…๋‹จ ํŽ˜์ด์ง€๋ฅผ GitHub Actions๋กœ ์ฃผ 1ํšŒ ํฌ๋กค๋งํ•ด DB์— ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. ์นด์นด์˜ค ๋กœ๊ทธ์ธ์€ ์ผ๋ฐ˜ ๊ฐœ๋ฐœ์ž ๊ณ„์ •์—์„œ๋Š” ์ด๋ฉ”์ผ ๋™์˜ํ•ญ๋ชฉ(account_email)์ด ์ œํ•œ๋˜์–ด ์žˆ์–ด, ๋น„์ฆˆ ์•ฑ ์ „ํ™˜ ํ›„ ์ด๋ฉ”์ผ ํ•„์ˆ˜ ๋™์˜๋กœ ์„ค์ •ํ•ด์•ผ ์ •์ƒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. CLOVA OCR์€ ๋ฌด๋ฃŒ ๋“ฑ๊ธ‰ ๊ธฐ์ค€ ์›” 100ํšŒ ํ˜ธ์ถœ ํ•œ๋„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค โ€” ๊ณ„์•ฝ์„œ ๋ถ„์„ 1๊ฑด๋งˆ๋‹ค 1ํšŒ ์†Œ๋ชจ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ—„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ (์š”์•ฝ)

ํ…Œ์ด๋ธ” ์„ค๋ช…
analyses ๊ณ„์•ฝ์„œ ์Šค์บ” ๋ถ„์„ ๊ฒฐ๊ณผ (์œ„ํ—˜๋„, ์กฐํ•ญ, ์ถ”์ฒœ ์กฐ์น˜ ๋“ฑ). ์ด๋ฏธ์ง€ยทOCR ์›๋ฌธยท์ž„๋Œ€์ธ ์„ฑ๋ช…ยทHUG ๋Œ€์กฐ ๊ฒฐ๊ณผ๋Š” ์ €์žฅํ•˜์ง€ ์•Š์Œ. score_direction ์ปฌ๋Ÿผ์œผ๋กœ ์‹ /๊ตฌ ์ฑ„์  ๊ธฐ์ค€(์ ์ˆ˜ ๋ฐฉํ–ฅ) ๊ตฌ๋ถ„
gaslighting_checks ๋งˆ์Œ ์ƒ๋‹ด ๋Œ€ํ™” ๋ถ„์„ ๊ฒฐ๊ณผ (ํŒจํ„ด, ์‹ ๋ขฐ๋„, ์ถ”์ฒœ ์‘๋‹ต)
news ์ „์„ธ์‚ฌ๊ธฐ ๊ด€๋ จ ๋‰ด์Šค ์บ์‹œ
region_stats ์ „๊ตญ ์‹œ/๊ตฐ/๊ตฌ๋ณ„ ์ „์„ธ๊ฐ€์œจ, HUG ์ฑ„๋ฌด๋ถˆ์ดํ–‰์ž ๋ฐ€๋„, ๋‰ด์Šค ์–ธ๊ธ‰ ๊ฑด์ˆ˜, ์ข…ํ•ฉ ์œ„ํ—˜๋„ ์ ์ˆ˜
region_sync_cursor ์ „๊ตญ ๋ฐ์ดํ„ฐ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ์ง„ํ–‰ ์ƒํƒœ (Edge Function ์‹คํ–‰ ์‹œ๊ฐ„ ์ œํ•œ ๋Œ€์‘)
contract_risk_patterns ์ „์„ธ์‚ฌ๊ธฐยท๋…์†Œ์กฐํ•ญ ์‹ค์ œ ํ”ผํ•ด ํŒจํ„ด DB (๊ณ„์•ฝ์„œ ๋ถ„์„ RAG ๊ฒ€์ƒ‰ ๋Œ€์ƒ)
hug_defaulters HUG ์ƒ์Šต ์ฑ„๋ฌด๋ถˆ์ดํ–‰์ž ๊ณต๊ฐœ ๋ช…๋‹จ ๋กœ์ปฌ ์บ์‹œ (์ฃผ 1ํšŒ ๋™๊ธฐํ™”)
hug_sync_cursor HUG ๋ช…๋‹จ ํฌ๋กค๋ง ์ง„ํ–‰ ์ƒํƒœ
batch_job_status ๋ฐฐ์น˜ 4์ข…(์‹œ์„ธยท์ง€์—ญ๋‰ด์Šค์–ธ๊ธ‰ยท์ „์„ธ์‚ฌ๊ธฐ๋‰ด์ŠคยทHUG๋ช…๋‹จ)์˜ ๋งˆ์ง€๋ง‰ ์‹คํ–‰/์„ฑ๊ณต ์‹œ๊ฐยท์—๋Ÿฌ ๊ธฐ๋ก. RLS๋กœ ์ง€์ •๋œ ๊ด€๋ฆฌ์ž ๊ณ„์ •๋งŒ ์กฐํšŒ ๊ฐ€๋Šฅ

โš™๏ธ Edge Functions

ํ•จ์ˆ˜๋ช… ์—ญํ•  ์‹คํ–‰ ๋ฐฉ์‹
analyze-contract CLOVA OCR๋กœ ๊ณ„์•ฝ์„œ ์ด๋ฏธ์ง€์˜ ๊ฐœ์ธ์ •๋ณด๋ฅผ ๋งˆ์Šคํ‚นํ•œ ๋’ค RAG(์œ„ํ—˜ ํŒจํ„ด DB)์™€ ํ•จ๊ป˜ Gemini API๋กœ ๋ถ„์„, HUG ๋ช…๋‹จ ์‹ค๋ช… ๋Œ€์กฐ ์‚ฌ์šฉ์ž ์š”์ฒญ ์‹œ
analyze-chat ๊ฐ€์Šค๋ผ์ดํŒ… ๋Œ€ํ™” ํ…์ŠคํŠธ/์ด๋ฏธ์ง€ ๋ถ„์„ ์‚ฌ์šฉ์ž ์š”์ฒญ ์‹œ
fetch-market-data ๊ตญํ† ๋ถ€ ์‹ค๊ฑฐ๋ž˜๊ฐ€ ์กฐํšŒ โ†’ ์ „์„ธ๊ฐ€์œจ ๊ณ„์‚ฐ pg_cron ๋ฐฐ์น˜ (์ž๋™)
fetch-region-buzz ๋„ค์ด๋ฒ„ ๋‰ด์Šค ์ง€์—ญ๋ณ„ ์–ธ๊ธ‰ ๊ฑด์ˆ˜ ์ง‘๊ณ„ pg_cron ๋ฐฐ์น˜ (์ž๋™)

scripts/sync-hug-defaulters.mjs(Node ์Šคํฌ๋ฆฝํŠธ, GitHub Actions ์ฃผ 1ํšŒ ์‹คํ–‰)๋Š” Edge Function์ด ์•„๋‹ˆ๋ผ ๋ณ„๋„ ํฌ๋กค๋Ÿฌ์ž…๋‹ˆ๋‹ค. HUG ๋ช…๋‹จ ํŽ˜์ด์ง€๊ฐ€ 228ํŽ˜์ด์ง€์— ๋‹ฌํ•ด Edge Function ์‹คํ–‰์‹œ๊ฐ„ ์ œํ•œ์„ ๋„˜๊ธฐ ๋•Œ๋ฌธ์— ๋…๋ฆฝ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํŽ˜์ด์ง€ ์š”์ฒญ ์‚ฌ์ด 500ms1์ดˆ ๋žœ๋ค ๋”œ๋ ˆ์ด, ์—ฐ๊ฒฐ ์‹คํŒจ ์‹œ ์žฌ์‹œ๋„(์ตœ๋Œ€ 3ํšŒ, 23์ดˆ ๋Œ€๊ธฐ), 20ํŽ˜์ด์ง€๋งˆ๋‹ค ๊ฒฐ๊ณผ๋ฅผ ์ฆ‰์‹œ ์ €์žฅํ•˜๋Š” ์ฒดํฌํฌ์ธํŠธ ๋ฐฉ์‹์„ ์ ์šฉํ•ด, ๋„์ค‘์— ์‹คํŒจํ•ด๋„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋Œ์ง€ ์•Š๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฒ˜๋ฆฌํ•œ ํŽ˜์ด์ง€๋ถ€ํ„ฐ ๋‹ค์Œ ์‹คํ–‰์ด ์ด์–ด์„œ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ”‘ ํ™˜๊ฒฝ ๋ณ€์ˆ˜

ํ”„๋ก ํŠธ์—”๋“œ (.env.local)

VITE_SUPABASE_URL=
VITE_SUPABASE_ANON_KEY=
VITE_KAKAO_MAP_KEY=

๋ฐฑ์—”๋“œ (Supabase Secrets)

GEMINI_API_KEY=
NAVER_CLIENT_ID=
NAVER_CLIENT_SECRET=
MOLIT_API_KEY=
CLOVA_OCR_INVOKE_URL=
CLOVA_OCR_SECRET_KEY=

HUG ํฌ๋กค๋Ÿฌ (GitHub Actions Secrets, scripts/sync-hug-defaulters.mjs์šฉ)

SUPABASE_URL=
SUPABASE_SERVICE_ROLE_KEY=

โš ๏ธ Gemini, ๋„ค์ด๋ฒ„, ๊ตญํ† ๋ถ€ ํ‚ค๋Š” ์ ˆ๋Œ€ ํ”„๋ก ํŠธ์—”๋“œ(VITE_ ์ ‘๋‘์‚ฌ)์— ๋„ฃ์ง€ ์•Š๊ณ  Supabase Secrets๋กœ๋งŒ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์นด์นด์˜ค๋งต ํ‚ค๋Š” ๋ธŒ๋ผ์šฐ์ € ๋…ธ์ถœ์„ ์ „์ œ๋กœ ์„ค๊ณ„๋œ ํ‚ค์ด๋ฏ€๋กœ ํ”„๋ก ํŠธ์—”๋“œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. โš ๏ธ SUPABASE_SERVICE_ROLE_KEY๋Š” RLS๋ฅผ ์šฐํšŒํ•˜๋Š” ์ตœ๊ณ  ๊ถŒํ•œ ํ‚ค์ด๋ฏ€๋กœ, GitHub Actions Secrets์—๋งŒ ๋“ฑ๋กํ•˜๊ณ  ์ ˆ๋Œ€ ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ์ด๋‚˜ ์ปค๋ฐ‹์— ๊ฐ’ ์ž์ฒด๋ฅผ ๋‚จ๊ธฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


๐Ÿš€ ์‹คํ–‰ ๋ฐฉ๋ฒ•

# ์„ค์น˜
npm install

# ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
npm run dev

# Edge Function ๋ฐฐํฌ (Supabase CLI)
npx supabase login
npx supabase link --project-ref <project-ref>
npx supabase functions deploy <function-name>

# DB ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ˜์˜
npx supabase db push

โš ๏ธ ์•Œ๋ ค์ง„ ์ด์Šˆ / ํ–ฅํ›„ ๊ฐœ์„  ์‚ฌํ•ญ

  • HUG ๋ช…๋‹จ ๋™๊ธฐํ™”๊ฐ€ GitHub Actions(CI ํ™˜๊ฒฝ)์—์„œ IP ์ฐจ๋‹จ์œผ๋กœ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: HUG ์‚ฌ์ดํŠธ๊ฐ€ ์งง์€ ์‹œ๊ฐ„์— ๋ฐ˜๋ณต ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” IP๋ฅผ ์†๋„ ์ œํ•œ/์ฐจ๋‹จํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์–ด, ์ž๋™ ์Šค์ผ€์ค„(์ฃผ 1ํšŒ)์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๋˜ ์‹คํŒจ๊ฐ€ ๋ฐ˜๋ณต๋˜๋ฉด ๋กœ์ปฌ PC(๊ณ ์ • IP)์—์„œ node scripts/sync-hug-defaulters.mjs๋ฅผ ์ˆ˜๋™ ์‹คํ–‰ํ•ด ๋Œ€์ฒดํ•˜๋Š” ์šด์˜ ๋ฐฉ์‹์„ ์“ฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์Šคํ‚น๋œ ์ด๋ฏธ์ง€๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค: ๊ฐœ์ธ์ •๋ณด๊ฐ€ ์ œ๋Œ€๋กœ ๊ฐ€๋ ค์กŒ๋Š”์ง€ ํ™”๋ฉด์—์„œ ์ง์ ‘ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‹ค์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ๋งˆ์Šคํ‚น ์‹คํŒจ/์›๋ณธ ์ด๋ฏธ์ง€๊ฐ€ ์–ด๋–ค ๊ฒฝ๋กœ๋กœ๋„ ํด๋ผ์ด์–ธํŠธ์— ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ์„ค๊ณ„์ƒ ์˜๋„์ž…๋‹ˆ๋‹ค.

๐Ÿ‘ฅ ํŒ€ ์†Œ๊ฐœ

์ด๋ฆ„ ์—ญํ• 
๊น€ํฌ์„ฑ ๋ฐฑ์—”๋“œ
์‹ ์ˆ˜์•„ ๋ฐฑ์—”๋“œ
์ด์„œ์˜ ํ”„๋ก ํŠธ์—”๋“œ
์กฐ์„ฑ์ฐฌ ํ”„๋ก ํŠธ์—”๋“œ

๋ฏธ๋ฆผ๋งˆ์ด์Šคํ„ฐ๊ณ  ์ง€๋Šฅํ˜•์†Œํ”„ํŠธ์›จ์–ด๊ณผ


๐Ÿ“„ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ต์œก ๋ชฉ์ ์˜ ํŒ€ ํ”„๋กœ์ ํŠธ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages