Skip to content

dskim21/message-guard

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

2 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ’ฌ Message Guard

๋ณด๋‚ด๊ธฐ ์–ด๋ ค์šด ๋ฉ”์‹œ์ง€๋ฅผ ๋” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋‹ค๋“ฌ์–ด์ฃผ๋Š” AI ๋ฉ”์‹œ์ง€ ์ฝ”์น˜ ์›น์•ฑ

๋ˆยท์ •์‚ฐ, ๋ถ€ํƒ, ๊ฑฐ์ ˆ, ์‚ฌ๊ณผ์ฒ˜๋Ÿผ
๊ด€๊ณ„์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฏผ๊ฐํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๋‹จ์ˆœ ์ƒ์„ฑ์ด ์•„๋‹ˆ๋ผ
์ƒํ™ฉ๊ณผ ๊ฐ์ •์„ ๊ณ ๋ คํ•œ ํ‘œํ˜„์œผ๋กœ ๋ณด์กฐํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ƒํ™ฉ๊ณผ ๊ฐ์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฉ”์‹œ์ง€ ์ดˆ์•ˆ์„ ์ƒ์„ฑํ•˜๊ณ ,
๋งํˆฌ ๊ฒ€์ˆ˜ยท์˜คํ•ด ๊ฐ€๋Šฅ์„ฑยท์ถ”์ฒœ ํ‘œํ˜„์„ ํ•จ๊ป˜ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”— Live Demo
https://message-guard-phi.vercel.app/


๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

Why?

๋ฉ”์‹œ์ง€ ํ•˜๋‚˜ ๋ณด๋‚ด๋Š” ๊ฒƒ๋„ ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ต๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ:

  • ๋ˆ/์ •์‚ฐ ์š”์ฒญ
  • ๋ถ€ํƒํ•˜๊ธฐ
  • ๊ฑฐ์ ˆํ•˜๊ธฐ
  • ์‚ฌ๊ณผํ•˜๊ธฐ

๊ฐ™์€ ์ƒํ™ฉ์—์„œ๋Š”

โ€œ๋„ˆ๋ฌด ์„ธ๊ฒŒ ๋“ค๋ฆฌ๋Š” ๊ฑด ์•„๋‹๊นŒ?โ€ โ€œ์ƒ๋Œ€๊ฐ€ ๋ถ€๋‹ด์Šค๋Ÿฝ๊ฒŒ ๋А๋ผ์ง„ ์•Š์„๊นŒ?โ€

๋ฅผ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด AI ์ฑ„ํŒ…์€ ๋งค๋ฒˆ ์ƒํ™ฉ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์„ค๋ช…ํ•ด์•ผ ํ–ˆ๊ณ ,
ํŠน์ • ์ƒํ™ฉ(์ •์‚ฐ, ๋ถ€ํƒ, ๊ฑฐ์ ˆ)์— ๋งž๋Š” ๋งํˆฌ ์กฐ์ ˆ์€ ๋ฒˆ๊ฑฐ๋กญ๋‹ค๊ณ  ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.

Solution

Message Guard๋Š” ๋ฏผ๊ฐํ•œ ๋ฉ”์‹œ์ง€ ์ƒํ™ฉ์—์„œ:

์ƒํ™ฉ ์ž…๋ ฅ
โ†’ ๊ฐ์ • ์„ ํƒ
โ†’ ๋ฉ”์‹œ์ง€ ์ดˆ์•ˆ ์ƒ์„ฑ
โ†’ ๋งํˆฌ ๊ฒ€์ˆ˜
โ†’ ์˜คํ•ด ๊ฐ€๋Šฅ์„ฑ ์ฒดํฌ

๋กœ ์ด์–ด์ง€๋Š” ๋ฉ”์‹œ์ง€ ์ฝ”์นญ ๊ฒฝํ—˜ ๋ฃจํ”„๋ฅผ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ˆœ ๋ฌธ์žฅ ์ƒ์„ฑ์ด ์•„๋‹ˆ๋ผ,

โ€œ์ด ์ •๋„ ๋งํˆฌ๋ฉด ๋ณด๋‚ด๋„ ๋˜๊ฒ ๋‹คโ€

๋ผ๋Š” ์‹ฌ๋ฆฌ์  ํ™•์‹ ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์˜€์Šต๋‹ˆ๋‹ค.


โœจ ํ•ต์‹ฌ ๊ธฐ๋Šฅ

๐Ÿ’ฌ AI Message Draft

์ž…๋ ฅํ•œ ์ƒํ™ฉ๊ณผ ๋ชฉ์ ์— ๋งž๋Š” ๋ฉ”์‹œ์ง€ ์ดˆ์•ˆ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ:

  • ๋ถ€๋“œ๋Ÿฌ์šด ๋ฒ„์ „
  • ๋‹จํ˜ธํ•œ ๋ฒ„์ „
  • ์งง๊ณ  ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ฒ„์ „

๋‹จ์ˆœ ๋ฌธ์žฅ ๋ณ€ํ™˜์ด ์•„๋‹ˆ๋ผ
์ƒํ™ฉ๊ณผ ๊ฐ์ •์— ๋”ฐ๋ฅธ ๋งํˆฌ ์ฐจ์ด๋ฅผ ๋ฐ˜์˜ํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ™‚ Emotion-based Tone

๊ฐ™์€ ์ƒํ™ฉ์ด๋ผ๋„ ๊ฐ์ •์— ๋”ฐ๋ผ ํ‘œํ˜„ ๋ฐฉ์‹์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

์˜ˆ:

  • ๐Ÿ˜ฅ ๋ฏธ์•ˆํ•จ
  • ๐Ÿ˜ค ๋‹ต๋‹ตํ•จ
  • ๐Ÿ˜ ์–ด์ƒ‰ํ•จ
  • ๐Ÿ™‚ ํŽธ์•ˆํ•จ

์˜ˆ์‹œ:

์ •์‚ฐ ์š”์ฒญ + ๋ฏธ์•ˆํ•จ
โ†’ ์กฐ์‹ฌ์Šค๋Ÿฝ๊ณ  ์™„๊ณกํ•œ ํ‘œํ˜„

์ •์‚ฐ ์š”์ฒญ + ๋‹ต๋‹ตํ•จ
โ†’ ๋ถ€๋“œ๋Ÿฝ์ง€๋งŒ ๋ถ„๋ช…ํ•œ ํ‘œํ˜„

์‚ฌ์šฉ์ž์˜ ๊ฐ์ •์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ‘œํ˜„ ๊ฐ•๋„๋ฅผ ์กฐ์ ˆํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ฐ Money / Settlement Support

๋ˆ ์ด์•ผ๊ธฐ๋Š” ๊ด€๊ณ„๋ฅผ ์–ด์ƒ‰ํ•˜๊ฒŒ ๋งŒ๋“ค ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ํŒ๋‹จํ•ด
๋ณ„๋„ ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ๊ฐ•ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ง€์› ์ƒํ™ฉ:

  • ๋ˆ ๋ณด๋‚ด๋‹ฌ๋ผ๊ณ  ํ•˜๊ธฐ
  • ์ •์‚ฐ ๋ฆฌ๋งˆ์ธ๋“œ
  • ์†Œ์•ก์ด๋ผ ๋งํ•˜๊ธฐ ์• ๋งคํ•จ
  • ๊ณ„์† ๋ฏธ๋ฃจ๋Š” ์‚ฌ๋žŒ
  • ๋ชจ์ž„/์—ฌํ–‰ ์ •์‚ฐ
  • ํšŒ์‚ฌ/ํŒ€ ๋น„์šฉ ์ •์‚ฐ
  • ๋นŒ๋ ค์ค€ ๋ˆ ๋Œ๋ ค๋ฐ›๊ธฐ

๐Ÿง  Tone Review

์ƒ์„ฑ๋œ ๋ฉ”์‹œ์ง€์— ๋Œ€ํ•ด:

  • ์˜คํ•ด ๊ฐ€๋Šฅ์„ฑ
  • ๋งํˆฌ ์˜จ๋„
  • ์กฐ์‹ฌํ•˜๋ฉด ์ข‹์€ ํ‘œํ˜„
  • ์ถ”์ฒœ ํ•œ ์ค„

๊ตฌ์กฐ์˜ ๊ฒ€์ˆ˜ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ˆœ โ€œ๋ฌธ์žฅ ์ถ”์ฒœโ€์ด ์•„๋‹ˆ๋ผ,

์™œ ์ด๋Ÿฐ ํ‘œํ˜„์ด ๋” ์ ์ ˆํ•œ์ง€

์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ›ก Fallback UX

๋ฌด๋ฃŒ AI ๋ชจ๋ธ ํŠน์„ฑ์ƒ ์‘๋‹ต ์‹คํŒจ ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ–ˆ์Šต๋‹ˆ๋‹ค.

AI ์‘๋‹ต ์‹คํŒจ ๋˜๋Š” ํ’ˆ์งˆ ์ €ํ•˜ ์‹œ:

์˜ˆ์‹œ ๊ฒฐ๊ณผ(fallback)๋ฅผ ์ž๋™ ์ œ๊ณต

ํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€:

โ€œ๋ฒ„ํŠผ ๋ˆŒ๋ €๋Š”๋ฐ ์•„๋ฌด ๋ฐ˜์‘ ์—†์Œโ€

์„ ๊ฒฝํ—˜ํ•˜์ง€ ์•Š๋„๋ก ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ›  Tech Stack

Frontend

  • React
  • TypeScript
  • Vite
  • Tailwind CSS

AI

  • Groq API
  • Llama 3.3 70B

Prompt Engineering

  • Structured JSON Response
  • Emotion-based Prompt Design
  • Tone Review Logic

Deployment

  • Vercel
  • GitHub

UI

  • lucide-react

๐Ÿ— Architecture

User Input
    โ†“
Emotion / Situation Selection
    โ†“
Prompt Generation
    โ†“
Groq API
    โ†“
JSON Response
    โ†“
Response Validation
    โ†“
UI Rendering

Fallback ํ๋ฆ„:

AI Response Failure
    โ†“
Fallback Result
    โ†“
Service Continue

๐Ÿš€ MVP ํŠน์ง•

  • ๋ฌด๋ฃŒ AI ํ™˜๊ฒฝ ๊ธฐ๋ฐ˜ MVP ์„ค๊ณ„
  • ๊ฐ์ • ๊ธฐ๋ฐ˜ ๋งํˆฌ ์กฐ์ ˆ
  • ๋ˆ/์ •์‚ฐ ์ƒํ™ฉ ํŠนํ™”
  • ๋ฌด๋ฃŒ ๋ชจ๋ธ ์‹คํŒจ ๋Œ€์‘ fallback UX
  • Vercel ๋ฌด๋ฃŒ ๋ฐฐํฌ
  • 1~2์ฃผ MVP ๋ฒ”์œ„ ์„ค๊ณ„
  • ์ถ”ํ›„ AI ๋ชจ๋ธ ๊ต์ฒด ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ ์„ค๊ณ„

๐Ÿง  Technical Decisions

์™œ Groq API๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๊ฐ€?

์ดˆ๊ธฐ์—๋Š” OpenRouter ๋ฌด๋ฃŒ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ:

  • 404 (์ง€์› ์ข…๋ฃŒ ๋ชจ๋ธ)
  • 429 (Rate Limit)
  • ์™ธ๊ตญ์–ด ํ˜ผํ•ฉ ์‘๋‹ต
  • ํ’ˆ์งˆ ํŽธ์ฐจ

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌด๋ฃŒ ํ™˜๊ฒฝ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„
๋” ์•ˆ์ •์ ์ธ ํ•œ๊ตญ์–ด ์‘๋‹ต ํ’ˆ์งˆ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด:

Groq ๊ธฐ๋ฐ˜ ๋ชจ๋ธ

๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.


์™œ fallback UX๋ฅผ ๊ตฌํ˜„ํ–ˆ๋Š”๊ฐ€?

๋ฌด๋ฃŒ AI ๋ชจ๋ธ์€:

  • ์‘๋‹ต ์‹คํŒจ
  • Rate Limit
  • ํ’ˆ์งˆ ์ €ํ•˜

๋ฌธ์ œ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค๊ฐ€ ๋ฉˆ์ถ”๋Š” ๊ฒฝํ—˜์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด:

AI ์‹คํŒจ
โ†’ ์˜ˆ์‹œ ๊ฒฐ๊ณผ ์ œ๊ณต

๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.


์™œ ๊ตฌ์กฐํ™”๋œ JSON ์‘๋‹ต์„ ์‚ฌ์šฉํ–ˆ๋Š”๊ฐ€?

LLM ์‘๋‹ต์€ ํ•ญ์ƒ ์ผ์ •ํ•œ ํ˜•์‹์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

UI๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด:

  • JSON ํŒŒ์‹ฑ
  • ์‘๋‹ต ๊ตฌ์กฐ ๊ฒ€์ฆ
  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

๊ตฌ์กฐ๋ฅผ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถ”ํ›„ ๋ชจ๋ธ ๋ณ€๊ฒฝ ์‹œ์—๋„:

UI ์ˆ˜์ • ์—†์ด ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ

ํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ”ฅ Troubleshooting

1. ๋ฌด๋ฃŒ AI ๋ชจ๋ธ ํ’ˆ์งˆ ๋ถˆ์•ˆ์ • ๋ฌธ์ œ

๋ฌธ์ œ

๋ฌด๋ฃŒ ๋ชจ๋ธ ์‚ฌ์šฉ ์‹œ:

  • 429 Rate Limit
  • ์™ธ๊ตญ์–ด ํ˜ผํ•ฉ ์‘๋‹ต
  • ํ•œ๊ตญ์–ด ํ’ˆ์งˆ ์ €ํ•˜

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์›์ธ

๋ฌด๋ฃŒ ๋ชจ๋ธ ํŠน์„ฑ์ƒ
๊ฐ€์šฉ์„ฑ๊ณผ ํ’ˆ์งˆ ์•ˆ์ •์„ฑ์ด ๋‚ฎ์•˜์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ

OpenRouter โ†’ Groq API ์ „ํ™˜

fallback ๊ฒฐ๊ณผ ๊ตฌ์กฐ ์ถ”๊ฐ€

๋ฐฐ์šด ์ 

AI API๋Š” ํ•ญ์ƒ ์„ฑ๊ณตํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์•ˆ ๋˜๋ฉฐ,

์‹คํŒจ ์ƒํ™ฉ๊นŒ์ง€ ํฌํ•จํ•ด UX๋ฅผ ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค.


2. JSON ์‘๋‹ต ํŒŒ์‹ฑ ์‹คํŒจ ๋ฌธ์ œ

๋ฌธ์ œ

AI ์‘๋‹ต์ด Markdown ๋˜๋Š” ์„ค๋ช… ํ…์ŠคํŠธ๋ฅผ ํฌํ•จํ•ด JSON ํŒŒ์‹ฑ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

์›์ธ

LLM ์‘๋‹ต ํ˜•์‹์ด ํ•ญ์ƒ ์ผ์ •ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ

์‘๋‹ต์—์„œ JSON ๋ถ€๋ถ„๋งŒ ์•ˆ์ „ํ•˜๊ฒŒ ์ถ”์ถœํ•˜๋Š” ๋กœ์ง ๊ตฌํ˜„

๋ฐฐ์šด ์ 

AI ์‘๋‹ต์€ ํ•ญ์ƒ ์˜ˆ์™ธ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•œ ํŒŒ์‹ฑ ๊ตฌ์กฐ๊ฐ€ ํ•„์š”ํ•จ์„ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.


3. Vercel ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ๋ฌธ์ œ

๋ฌธ์ œ

๋กœ์ปฌ์—์„œ๋Š” ๋™์ž‘ํ•˜์ง€๋งŒ ๋ฐฐํฌ ํ›„ AI ๊ธฐ๋Šฅ ๋ฏธ๋™์ž‘

์›์ธ

Vercel์€ ๋กœ์ปฌ .env ํŒŒ์ผ์„ ์ž๋™ ๋ฐฐํฌ ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ๋“ฑ๋กํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ

Environment Variables์—:

VITE_GROQ_API_KEY

๋“ฑ๋ก

๋ฐฐ์šด ์ 

Frontend ๋ฐฐํฌ ์‹œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌ๊ฐ€ ์„œ๋น„์Šค ๋™์ž‘์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ์ค€๋‹ค๋Š” ์ ์„ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“ฆ Project Setup

Install

npm install

Run

npm run dev

Build

npm run build

Lint

npm run lint

๐ŸŒฑ Future Improvements

  • ์ตœ๊ทผ ๊ฒ€์ˆ˜ ๋‚ด์—ญ ์ €์žฅ
  • ๋ฉ”์‹œ์ง€ ํžˆ์Šคํ† ๋ฆฌ
  • ์ƒ๋Œ€ ๊ด€๊ณ„ ๊ธฐ๋ฐ˜ ๋งํˆฌ ์ถ”์ฒœ
  • ๋ฉ”์‹œ์ง€ ๊ธธ์ด ์˜ต์…˜
  • AI ํ’ˆ์งˆ ๊ฐœ์„ 
  • ๋ชจ๋ฐ”์ผ UX ์ตœ์ ํ™”

๐Ÿ‘ฉโ€๐Ÿ’ป Author

Dasom Kim

GitHub: https://github.com/dskim21

๋ฐฐํฌ ๋งํฌ

https://message-guard-phi.vercel.app/

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors