"์๋ฒฝํ ์ฑ์ ๋ง๋ค๋ ค๋ค 2๋ ์ ์ง์ง ๋ ํ๋ก์ ํธ, ์ต์ ๊ธฐ๋ฅ์ ์น์ผ๋ก ์ดํ๋ง์ ๋ฐ์นญํ๋ค."
๐คฆ 2๋ ๊ฐ์ ์ฝ์ง, ๊ทธ๋ฆฌ๊ณ ํ ์คํธ์ฑ๊น์ง ์ฌ๋ ธ์ง๋ง...
2๋ ์ , AI ๊ธฐ๋ฐ ์ค๋ฏธ์ฑ ํ์ง ์๋น์ค ์จ์์ ๊ธฐํํ๋ค.
OpenAI Embedding API๋ฅผ ํ์ฉํด ๋ฌธ์ ๋ฉ์์ง๋ฅผ ๋ฒกํฐํํ๊ณ , Elasticsearch๋ก ๊ธฐ์กด ์ค๋ฏธ์ฑ ํจํด๊ณผ์ ์ ์ฌ๋๋ฅผ ์ธก์ ํ๋ ์๋น์ค์๋ค. ์์ด๋์ด๋ ์ข์๋ค. ๋ฌธ์ ๋ ์คํ์ด์๋ค.
์ฒ์์ ์ฑ ๊ฐ๋ฐํ๋ ์น๊ตฌํ ํจ๊ป ๋ชจ๋ฐ์ผ ์ฑ์ผ๋ก ์์ํ๋ค.
์ฌ์ฉ์๊ฐ ์์ฌ์ค๋ฌ์ด ๋ฌธ์๋ฅผ ๋ฐ์ผ๋ฉด ์ฑ์์ ๋ฐ๋ก ๋ถ์ํ ์ ์๋๋ก ํ๋ ๊ฒ ๋ชฉํ์๋ค.
๋ฐฑ์๋๋ Kotlin + Spring Boot๋ก ํํํ๊ฒ ๊ตฌ์ถํ๊ณ , AI ๋ถ์ ์๋ฒ๋ Python Flask๋ก ์์ฑํ๋ค.
์ฌ์ง์ด Google Play ์คํ ์ด์ ํ ์คํธ ์ฑ๊น์ง ์ฌ๋ ธ๋ค.
ํ์ง๋ง ์ฑ์ ๋ด๋นํ๋ ์น๊ตฌ์ ๋ ๋ชจ๋ ๋๋ฌด ๋ฐ๋นด๊ณ , ์ปค๋ฎค๋์ผ์ด์ ๋น์ฉ์ด ์ ์ ์ปค์ก๋ค.
ํ๋ก์ ํธ ๊ธฐ๊ฐ์ด ๊ธธ์ด์ง์๋ก ์ ์ ๋ฃจ์ฆํด์ก๋ค. ๊ณ์ ๋ณด์ํด์ผ ํ ์ ์ด ์๊ฒจ๋ฌ์ง๋ง, ์ง์ฒ์ ๋๋ ๋ค.
๊ฒฐ๊ตญ 2๋ ์ด ์ง๋ฌ์ง๋ง ์ ์ ๋ฐ์นญ์ ํ์ง ๋ชปํ๋ค.
์ต์ ๊ธฐ๋ฅ์ผ๋ก ์น ๋ฐ์นญ ๊ฒฐ์ฌ
์ด๋๋ก ๋๋ผ ์ ์์๋ค. ์๋ฒฝํ ์ฑ์ ๋ง๋ค๊ฒ ๋ค๋ ์์ฌ์ ๋ด๋ ค๋๊ณ , ํต์ฌ ๊ธฐ๋ฅ๋ง ๋ด์ ์น์ฌ์ดํธ๋ผ๋ ๋จผ์ ๋ฐฐํฌํ๊ธฐ๋ก ๊ฒฐ์ฌํ๋ค.
์ต์ ๊ธฐ๋ฅ ์ ์:
- ๋ฌธ์ ๋ด์ฉ ์ ๋ ฅ
- AI ๊ธฐ๋ฐ ์ค๋ฏธ์ฑ ์ฌ๋ถ ํ๋จ
- ๊ด๋ จ ๋ด์ค ์ ๊ณต
- ์๊ฐ ์ฌ์ฉ ์ ํ (OpenAI API ๋น์ฉ ๊ด๋ฆฌ)
์ฑ์์ ๊ตฌ์ํ๋ ๊ฐ์กฑ ์ฐ๋์ด๋ ์ค์๊ฐ ์๋ฆผ ๊ฐ์ ๋ฆฌ์นํ ๊ธฐ๋ฅ๋ค์ ๊ณผ๊ฐํ ํฌ๊ธฐํ๋ค. ์์ฝ์ง๋ง, ์ผ๋จ ์ธ์์ ๋ด๋๋ ๊ฒ ์ฐ์ ์ด์๋ค.
๋ฐ์ด๋ธ ์ฝ๋ฉ์ ๋ง๋ฒ - ์ดํ๋ง์ ์์ฑํ ์น์ฌ์ดํธ
ํ๋ก ํธ์๋๋ ๋ฐ์ด๋ธ ์ฝ๋ฉ๋งํ ๊ฒ ์๋ค. React์ ์ต์ํ์ง ์์๋, AI์ ํจ๊ป๋ผ๋ฉด ๋น ๋ฅด๊ฒ ๊ฒฐ๊ณผ๋ฌผ์ ๋ง๋ค ์ ์๋ค.
ํ๋ก์ ํธ ์ธํ
- Vite: ๋น ๋ฅธ ๊ฐ๋ฐ ํ๊ฒฝ ๊ตฌ์ถ
- React 19: ์ต์ ๋ฒ์ ์ผ๋ก ์์
- TailwindCSS 4: ์คํ์ผ๋ง์ ์ ํธ๋ฆฌํฐ ํด๋์ค๋ก ๊ฐํธํ๊ฒ
๋ฐ์ด๋ธ ์ฝ๋ฉ 3๋จ๊ณ ์ ๋ต
1๋จ๊ณ: ๊น๋ํ UI ํ๋กํ ํ์ ์์ฑ (ํ๋์ฝ๋ฉ OK)
"์ค๋ฏธ์ฑ ํ์ง ์๋น์ค ๋ฉ์ธ ํ์ด์ง ๋ง๋ค์ด์ค.
๋ฌธ์ ์
๋ ฅ์ฐฝ, ๋ถ์ ๋ฒํผ, ๊ฒฐ๊ณผ ํ์ ์์ญ์ด ํ์ํด.
์๋ฒ ์ฐ๋์ ๋์ค์ ํ ๊ฑฐ๋๊น ์ผ๋จ ํ๋์ฝ๋ฉ๋ ์ํ ๋ฐ์ดํฐ๋ก."
Claude๊ฐ ๋ง๋ค์ด์ค ์ฒซ ํ๋กํ ํ์ ์ ๋๋ผ์ ๋ค.
๊น๋ํ ๋ ์ด์์์ ์ง๊ด์ ์ธ UI, ๊ทธ๋ฆฌ๊ณ TailwindCSS๋ก ์คํ์ผ๋ง๊น์ง ์๋ฒฝํ๋ค.
์ด ๋จ๊ณ์์๋ ๊ธฐ๋ฅ ๊ตฌํ๋ณด๋ค ์ฌ์ฉ์ ๊ฒฝํ์ ์ง์คํ๋ค.
2๋จ๊ณ: ๋ฐฑ์๋ ์ฐ๋
"ํ์ฌ UI์ ์ฐ๋ฆฌ ๋ฐฑ์๋ API ์ฐ๊ฒฐํด์ค.
์๋ํฌ์ธํธ: POST /api/analyze
์์ฒญ: { message: string }
์๋ต: { isSafe: boolean, similarity: number, cases: [...] }"
๋ฐฑ์๋๋ ์ด๋ฏธ 2๋ ๊ฐ ๋ค๋ฌ์ด์ ธ ์์๋ค.
Kotlin Spring Boot ์๋ฒ๊ฐ Redis ์บ์ฑ, JPA ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๊ณ , Python Flask ์๋ฒ๊ฐ OpenAI Embedding๊ณผ Elasticsearch ๋ฒกํฐ ๊ฒ์์ ์ฒ๋ฆฌํ๋ค.
API ์คํ๋ง ๋๊ฒจ์ฃผ๋ Claude๊ฐ ์ฆ์ ์ฐ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
3๋จ๊ณ: UI ๋ํ ์ผ ๊ฐ์
"๋ถ์ ์ค์ผ ๋ ๋ก๋ฉ ์ ๋๋ฉ์ด์
์ถ๊ฐํ๊ณ ,
๊ฒฐ๊ณผ๊ฐ ์ํํ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ์์์ผ๋ก ๊ฐ์กฐํด์ค.
๊ทธ๋ฆฌ๊ณ ์ ์ฌ ์ผ์ด์ค ์นด๋์ ํธ๋ฒ ํจ๊ณผ๋ ๋ฃ์ด์ค."
๊ธฐ๋ฅ์ ์์ฑ๋์ง๋ง ํด๋ฆฌ์ฑ์ด ํ์ํ๋ค.
๋ก๋ฉ ์คํผ๋, ์์ ์ฝ๋ฉ, ์ ๋๋ฉ์ด์ ๋ฑ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๋ ๋ํ ์ผ์ ์ง์คํ๋ค.
์น์ผ๋ก ์ ํํ๋ฉฐ ๊ณ ๋ คํ ์
์ฑ์์ ์น์ผ๋ก ์ ํํ๋ฉด์ ๋ช ๊ฐ์ง ์ค์ํ ๊ฒฐ์ ์ ๋ด๋ ค์ผ ํ๋ค.
๋น๋ก๊ทธ์ธ vs ๋ก๊ทธ์ธ
์ฒ์์ ์ ๊ทผ์ฑ์ ์ํด ๋น๋ก๊ทธ์ธ ์๋น์ค๋ก ๋ง๋ค๊น ํ๋ค. ๋๊ตฌ๋ URL๋ง ์ ๋ ฅํ๋ฉด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๊ฒ. ํ์ง๋ง ํ์ค์ ๋ฌ๋๋ค.
๋ฌธ์ : OpenAI API ํ ํฐ ๋น์ฉ
๋งค ๋ถ์๋ง๋ค OpenAI Embedding API๋ฅผ ํธ์ถํ๋๋ฐ, ์ด๊ฑด ๋์ด ๋๋ ์์ ์ด๋ค. ๋ฌด์ ํ ๋ฌด๋ฃ๋ก ์ด์ด๋๋ฉด ์ด๋ทฐ์ง ์ฐ๋ ค๋ ์๊ณ , ๋น์ฉ ํญํ์ ๋ง์ ์๋ ์์๋ค.
๊ฒฐ๋ก : ๋ก๊ทธ์ธ + ์๊ฐ ์ฌ์ฉ ์ ํ
- Google OAuth ๋ก๊ทธ์ธ ๊ตฌํ
- ์ 10ํ ๋ฌด๋ฃ ๋ถ์ ์ ๊ณต
- ์ฌ์ฉ๋ ์ ์ด๋ฅผ ํตํ ๋น์ฉ ๊ด๋ฆฌ
์ฟ ํค ์ธ์ฆ ์ถ๊ฐ
์ฑ ํ๊ฒฝ์์๋ JWT ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ๋ง ์์๋ค. ํ์ง๋ง ์น ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์๋ ์ฟ ํค ๊ธฐ๋ฐ ์ธ์ ์ธ์ฆ์ด ๋ ์์ฐ์ค๋ฝ๋ค.
๋ฐฑ์๋๋ฅผ ์์ ํด์ JWT์ ์ฟ ํค ์ธ์ฆ์ ๋ชจ๋ ์ง์ํ๋๋ก ํ๋ค. ๋คํํ ๋ชจ๋ฐ์ผ ์ฑ์ ์ผ๋์ ๋๊ณ ์ค๊ณํ๋ ์ธ์ฆ ๊ตฌ์กฐ๊ฐ ์ ์ฐํด์, ์ฟ ํค ์ธ์ฆ ์ถ๊ฐ๊ฐ ์ด๋ ต์ง ์์๋ค.
๊ฒฐ๊ณผ: waiit.me ๋ฐ์นญ
์ดํ๊ฐ์ ๋ฐ์ด๋ธ ์ฝ๋ฉ ๋์ waiit.me๊ฐ ์ธ์์ ๋์๋ค.
WAIIT - ์ค๋ฏธ์ฑ ํ์ง | ๋ฌธ์์ฌ๊ธฐ ๊ฒ์ฌ | ๋ณด์ด์คํผ์ฑ ์๋ฐฉ ์๋น์ค
AI ๊ธฐ๋ฐ ์ค๋ฏธ์ฑ ํ์ง ์๋น์ค. ๋ฌธ์ ์ฌ๊ธฐ, ํผ์ฑ ๋ฌธ์, ๋ณด์ด์คํผ์ฑ์ ์ค์๊ฐ์ผ๋ก ๋ถ์ํ๊ณ ์๋ฐฉํ์ธ์. ๋ฌด๋ฃ๋ก ์์ฌ ๋ฌธ์๋ฅผ ๊ฒ์ฌํ์ธ์.
waiit.me


ํ๋ก์ ํธ ๊ตฌ์กฐ:
waiit/
โโโ fe/ # React + Vite + TailwindCSS
โโโ noun/ # Kotlin Spring Boot API ์๋ฒ
โโโ determiner/ # Python Flask AI ๋ถ์ ์๋ฒ
โโโ docker-compose.yml
ํต์ฌ ๊ธฐ๋ฅ:
- ๋ฌธ์ ๋ฉ์์ง ์ ๋ ฅ ์ ๋ฒกํฐ ์ ์ฌ๋ ๊ธฐ๋ฐ ์ค๋ฏธ์ฑ ํ์ง
- Elasticsearch ๋ฒกํฐ DB๋ก ๊ธฐ์กด ์ค๋ฏธ์ฑ ํจํด๊ณผ ๋น๊ต
- ์ ์ฌ๋ ์ ์ ๋ฐ ์ ์ฌ ์ผ์ด์ค ์ ๊ณต
- Google ๋ก๊ทธ์ธ + ์๊ฐ ์ฌ์ฉ ์ ํ
GitHub: github.com/jeongum/waiit
GitHub - jeongum/waiit: AI ๊ธฐ๋ฐ ์ค๋ฏธ์ฑ ํ์ง ์๋น์ค
AI ๊ธฐ๋ฐ ์ค๋ฏธ์ฑ ํ์ง ์๋น์ค. Contribute to jeongum/waiit development by creating an account on GitHub.
github.com
ํ๊ณ : ์๋ฒฝํจ๋ณด๋ค ์์ฑ์ด ์ค์ํ๋ค
์์ฌ์ด ์
- ์ฑ์์ ๊ตฌํํ๋ ค๋ ๊ฐ์กฑ ์ฐ๋ ๊ธฐ๋ฅ์ ๋ชป ๋ฃ์ ๊ฒ
- ์ค์๊ฐ ๋ฌธ์ ๊ฐ์ง ์๋ฆผ ๊ฐ์ ๋ฆฌ์นํ ๊ธฐ๋ฅ๋ค
- 2๋ ์ด๋ ์๊ฐ์ ํ๋นํ ๊ฒ
๋ฐฐ์ด ์
- ์๋ฒฝ์ฃผ์๋ ๋ ์ด๋ค: ์๋ฒฝํ ๊ฑธ ๋ง๋ค๋ ค๋ค ์์ํ ์ถ์ ๋ชป ํฉ๋๋ค
- ๋ฐ์ด๋ธ ์ฝ๋ฉ์ ํ: ์ต์ํ์ง ์์ ๋ถ์ผ๋ AI์ ํจ๊ป๋ผ๋ฉด ๋น ๋ฅด๊ฒ ํ๋กํ ํ์ดํ ๊ฐ๋ฅ
- ์ต์ ๊ธฐ๋ฅ(MVP)์ ์ค์์ฑ: ํต์ฌ๋ง ๋ด์ ๋น ๋ฅด๊ฒ ๊ฒ์ฆํ๋ ๊ฒ ๋ต
- ์์ฑ์ด ์๋ฒฝ์ ์ด๊ธด๋ค: ์ธ์์ ๋์จ 70%์ง๋ฆฌ๊ฐ ์๋ ์ 100%์ง๋ฆฌ๋ณด๋ค ๋ซ๋ค
์์ผ๋ก์ ๊ณํ
- ์ฌ์ฉ์ ํผ๋๋ฐฑ ์์ง
- ํ์ํ๋ค๋ฉด ์ฑ ๊ฐ๋ฐ ์ฌ๊ฐ (ํ์ง๋ง ์ด๋ฒ์ ๋ ๋น ๋ฅด๊ฒ)
- ์ค๋ฏธ์ฑ ํจํด DB ์ง์ ์ ๋ฐ์ดํธ
๋ง์น๋ฉฐ
2๋ ๋์ ์๋ฒฝํ ์ฑ์ ๋ง๋ค๊ฒ ๋ค๊ณ ์ง์ง ๋์์ง๋ง, ์ต์ ๊ธฐ๋ฅ์ ์น์ฌ์ดํธ๋ ์ดํ๋ง์ ์์ฑํ๋ค. ๋ฐ์ด๋ธ ์ฝ๋ฉ ๋๋ถ์ด์๋ค.
ํ์ฌ์์๋ AI๋ฅผ ํ์ฉํด์ ๋ง์ ํ๋ก์ ํธ๋ฅผ ์งํํ์๋ค. ํนํ POCํ๋๋ฐ์๋ ์ต์ ์ด๋ค.
๋๊ฐ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ ์ฅ์์ ํ๋ก ํธ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋, ํด๋น ๊ธฐ๋ฅ์ด ๋์ํ๋ ์ต์ํ์ ํ๋กํ ํ์ ์ ๊ต์ฅํ ๋น ๋ฅธ ์๊ฐ๋ด์ ๋ง๋ค์ด ๋ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ์ด๋ธ ์ฝ๋ฉ, AI๊ฐ ๋์ ๋๋ฉด์ ํ๋ก์ ํธ์ ์ดํฐ๋ ์ด์ ์ด ๊ต์ฅํ ๋นจ๋ผ์ง์ ๋๋๋ค.
ํน์ ์ฌ๋ฌ๋ถ๋ ์ค๋ ๋ฌตํ๋ ํ๋ก์ ํธ๊ฐ ์๋ค๋ฉด, ์๋ฒฝํจ์ ๋ด๋ ค๋๊ณ ๋ฐ์ด๋ธ ์ฝ๋ฉ์ผ๋ก ๋น ๋ฅด๊ฒ ๋ง๋ค์ด๋ณด๊ธธ ๊ถํ๋ค. ์ผ๋จ ์ธ์์ ๋ด๋๋ ๊ฒ ์ค์ํ๋ค. ์์ฑ๋๋ ๊ทธ ๋ค์ ๋ฌธ์ ๋ค.
2๋ ๋ฌตํ ํ๋ก์ ํธ, ์ดํ๋ง์ ๋ฐ์นญ. ๊ฐ๋ฅํ๋ค.
๐ ์จ์ ์๋น์ค: waiit.me
๐ป GitHub: github.com/jeongum/waiit