blame-detector
๋ ผ์ ์ค์ธ ์นด์นด์คํก ๋ํ๋ฅผ ์ ๋ก๋ํ๋ฉด
AI๊ฐ ๊ฐ์ , ๊ณต๊ฒฉ์ฑ, ๋ฉ์์ง ํ๋ฆ ๋ฑ์ ๋ถ์ํด
๊ณผ์ค ๋น์จ์ ์ฐ์ ํ๊ณ ์๊ฐํ + ๊ณต์ ๊ฐ๋ฅํ ๋ฆฌํฌํธ๋ฅผ ์์ฑํ๋ ์น ์๋น์ค.
blame-detector/
โโโ backend/ # Spring Boot API ์๋ฒ
โโโ frontend/ # React + Vite SPA ํด๋ผ์ด์ธํธ
โโโ .gitignore # ๊ณตํต ๋ฐ ๋ฏผ๊ฐ ์ ๋ณด ์ ์ธ
โโโ README.md
์์ญ | ์ฌ์ฉ ๊ธฐ์ |
---|---|
ํ๋ก ํธ์๋ | React, Vite, Tailwind CSS, Chart.js, html2canvas |
๋ฐฑ์๋ | Spring Boot, Tesseract4J, WebClient |
AI ๋ถ์ | Hugging Face API (๊ฐ์ /๊ณต๊ฒฉ์ฑ ๋ชจ๋ธ) |
๊ณต์ ๊ธฐ๋ฅ | Kakao SDK, Web Share API, ํด๋ฆฝ๋ณด๋ ๋ณต์ฌ |
๋ฐฐํฌ | Vercel (ํ๋ก ํธ), Render or EC2 ์์ (๋ฐฑ์๋) |
const [image, setImage] = useState(null);
const handleImageChange = (e) => {
const file = e.target.files?.[0];
if (file) {
setImage(file);
setPreview(URL.createObjectURL(file));
}
}
FormData
๋ก ๋ฐฑ์๋ ์ ์กURL.createObjectURL()
๋ก ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ ๊ณต