AI ๊ธฐ๋ฐ ์ฌ๊ธฐ ํ์ง ๋ฐ ์๋ฐฉ ํ๋ซํผ
์ค์๊ฐ ์ฌ๊ธฐ ๋ถ์๊ณผ ์ปค๋ฎค๋ํฐ ๊ธฐ๋ฐ ์ฌ๋ก ๊ณต์ ๋ก ๋ ์์ ํ ๋์งํธ ํ๊ฒฝ์ ๋ง๋ญ๋๋ค.
S.Camp๋ AI ๊ธฐ์ ์ ํ์ฉํ์ฌ ํผ์ฑ, ์ค๋ฏธ์ฑ, ๋ณด์ด์คํผ์ฑ ๋ฑ ๋ค์ํ ์ฌ๊ธฐ ์ ํ์ ์ค์๊ฐ์ผ๋ก ํ์งํ๊ณ , ์ฌ์ฉ์ ์ปค๋ฎค๋ํฐ๋ฅผ ํตํด ์ต์ ์ฌ๊ธฐ ์๋ฒ๊ณผ ์๋ฐฉ ์ ๋ณด๋ฅผ ๊ณต์ ํ๋ ํ๋ซํผ์ ๋๋ค.
- ๐จ ์ค์๊ฐ AI ๋ถ์: ์์ฌ์ค๋ฌ์ด URL์ด๋ ๋ฉ์์ง๋ฅผ ์ฆ์ ๋ถ์
- ๐ฐ ์ต์ ๋ด์ค: ๊ธ์ต ์ฌ๊ธฐ ๊ด๋ จ ์ต์ ๋ด์ค๋ฅผ ์๋์ผ๋ก ์์ง
- ๐ฌ ์ปค๋ฎค๋ํฐ: ์ค์ ์ฌ๊ธฐ ์ฌ๋ก์ ์๋ฐฉ ์์น์ ๊ณต์
- ๐ฑ ๋ชจ๋ฐ์ผ ์ต์ ํ: ์ธ์ ์ด๋์๋ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉ
- ์ ๋ ฅํ URL ๋๋ ๋ฉ์์ง์ ์ฌ๊ธฐ ์ํ๋๋ฅผ 0-100์ ์ผ๋ก ๋ถ์
- ์ํ๋์ ๋ฐ๋ฅธ 5๋จ๊ณ๋ก ๊ตฌ๋ณ๋๊ณ , ๊ฐ๊ฐ์ ๋จ๊ณ์ ๋ฐ๋ฅธ ๋ฉํธ๋ฅผ ์ ๊ณต
- ๋ถ์ ๊ฒฐ๊ณผ์ ํจ๊ป ๊ด๋ จ ์ฌ๋ก ์ ๊ณต
- ๊ธ์ต ์ฌ๊ธฐ ๊ด๋ จ ์ต์ ๋ด์ค ์๋ ์์ง
- ํค์๋ ๊ธฐ๋ฐ ์ด๋ชจ์ง ์๋ ๋งค์นญ
- ์ธ๋ถ ๋ด์ค ์ฌ์ดํธ๋ก ๋ฐ๋ก ์ฐ๊ฒฐ
- ์นดํ ๊ณ ๋ฆฌ๋ณ ํํฐ๋ง (๊ณต์ง์ฌํญ/์๋ฐฉ์์น/์ฌ๋ก๊ณต์ )
- ๊ฒ์๊ธ ์์ธ ์กฐํ ๋ฐ ๊ณต์ ๊ธฐ๋ฅ
- ์กฐํ์ ์ถ์ ๋ฐ ์ต์ ์์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
- React 19.1.1 - UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- React Router DOM 7.9.5 - ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ผ์ฐํ
- Vite 7.1.14 - ๋น๋ ๋๊ตฌ ๋ฐ ๊ฐ๋ฐ ์๋ฒ
- Axios 1.13.1 - HTTP ํด๋ผ์ด์ธํธ
- Vanilla CSS - ์ปค์คํ CSS (CSS ๋ชจ๋ ํจํด)
- lucide-react - ์์ด์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- Yarn - ํจํค์ง ๋งค๋์
- Node.js 18.0 ์ด์
- Yarn 1.22 ์ด์
- ์ ์ฅ์ ํด๋ก
git clone https://github.com/kss2002/ganzi.git
cd ganzi- ์์กด์ฑ ์ค์น
yarn install- ๊ฐ๋ฐ ์๋ฒ ์คํ
yarn dev- ๋ธ๋ผ์ฐ์ ์์ ํ์ธ
http://localhost:5173
ํ๋ก๋์ ๋น๋๋ฅผ ์์ฑํ๋ ค๋ฉด:
yarn build๋น๋๋ ํ์ผ์ dist/ ๋๋ ํ ๋ฆฌ์ ์์ฑ๋ฉ๋๋ค.
๋น๋๋ ํ๋ก๋์ ํ์ผ์ ๋ก์ปฌ์์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ:
yarn previewsrc/
โโโ pages/ # ํ์ด์ง ์ปดํฌ๋ํธ
โ โโโ main/ # ๋ฉ์ธ ํ ํ์ด์ง
โ โโโ ai/ # AI ํ์ง๊ธฐ ํ์ด์ง
โ โโโ board/ # ๊ฒ์ํ ๋ชฉ๋ก ๋ฐ ์์ธ ํ์ด์ง
โ โโโ news/ # ๋ด์ค ํ์ด์ง
โ โโโ not/ # 404 ํ์ด์ง
โโโ components/ # ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ
โ โโโ board/ # ๊ฒ์ํ ๊ด๋ จ ์ปดํฌ๋ํธ
โ โโโ news/ # ๋ด์ค ๊ด๋ จ ์ปดํฌ๋ํธ
โโโ layout/ # ๋ ์ด์์ ์ปดํฌ๋ํธ
โ โโโ Layout.jsx # ๋ฉ์ธ ๋ ์ด์์
โ โโโ Header.jsx # ๊ณตํต ํค๋
โโโ hooks/ # ์ปค์คํ
ํ
โ โโโ useAiAnalysis.js
โ โโโ useScrollTop.js
โโโ api/ # API ํด๋ผ์ด์ธํธ
โ โโโ apiClient.js # Axios ์ธ์คํด์ค
โ โโโ newsApi.js # ๋ด์ค API
โ โโโ postApi.js # ๊ฒ์๊ธ API
โ โโโ analyzeApi.js # AI ๋ถ์ API
โ โโโ index.js # API ํตํฉ export
โโโ animation/ # ์ ๋๋ฉ์ด์
๊ด๋ จ
โ โโโ FadeInSection.jsx
โ โโโ useFadeInAnimation.jsx
โโโ route/ # ๋ผ์ฐํ
์ค์
โ โโโ routeConfig.jsx
โโโ utils/ # ์ ํธ๋ฆฌํฐ ํจ์
โ โโโ errorHandler.js
โโโ App.jsx # ์ฑ ๋ฃจํธ ์ปดํฌ๋ํธ
โโโ main.jsx # ์ง์
์
โโโ index.css # ๊ธ๋ก๋ฒ ์คํ์ผ
Production: https://api.inwoo.store
Development: http://localhost:5173/api (Vite Proxy)
POST /api/analyze
Content-Type: application/json
{
"text": "๋ถ์ํ URL ๋๋ ๋ฉ์์ง"
}
Response:
{
"score": 85,
"analysis": "๋ถ์ ๊ฒฐ๊ณผ ์์ธ ์ค๋ช
"
}GET /api/news
Response:
{
"items": [
{
"title": "๋ด์ค ์ ๋ชฉ",
"description": "๋ด์ค ์์ฝ",
"link": "๋ด์ค ๋งํฌ",
"pubDate": "๋ฐํ์ผ"
}
]
}GET /api/posts # ์ ์ฒด ๊ฒ์๊ธ
GET /api/posts/{id} # ๊ฒ์๊ธ ์์ธ
GET /api/posts/category/{category} # ์นดํ
๊ณ ๋ฆฌ๋ณ ์กฐํ
Response:
{
"id": 1,
"title": "์ ๋ชฉ",
"content": "๋ด์ฉ",
"category": "NOTICE",
"authorName": "์์ฑ์",
"displayDate": "2025.11.03",
"viewCount": 123
}์์ธํ API ๋ฌธ์๋ Swagger์์ ํ์ธํ์ธ์.
- Vercel ๋ฐฐํฌ
- ๋ค์ด๋ฐ: BEM ๊ท์น ์ ์ฉ (
.block__element--modifier) - ์ปฌ๋ฌ: CSS ๋ณ์ ์ฌ์ฉ (
--primary-color,--text-color) - ๋ฐ์ํ: ๋ชจ๋ฐ์ผ๊น์ง ๊ณ ๋ ค
- ์ปดํฌ๋ํธ: ํจ์ํ ์ปดํฌ๋ํธ ์ฌ์ฉ
- ์ํ ๊ด๋ฆฌ: useState, useEffect ๋ฑ React Hooks ํ์ฉ
- Props: ๊ตฌ์กฐ ๋ถํด ํ ๋น ์ฌ์ฉ
- ํ์ผ๋ช
: PascalCase (์:
BoardItem.jsx)
https://github.com/kss2002/SCamp/blob/main/CONTRIBUTING.md
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค ํ์ ๋ฐฐํฌ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ์กฐํ์ธ์.
ํ๋ก์ ํธ์ ๋ํ ์ง๋ฌธ์ด๋ ์ ์์ด ์์ผ์๋ฉด Issues๋ฅผ ํตํด ์๋ ค์ฃผ์ธ์.
Made with โค๏ธ by S.Camp Team