jupiter/frontend ํ๋กํ ํ์ ์ ๊ธฐ๋ฐ์ผ๋ก ์ ์๋ React ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค. AI ๊ธฐ๋ฐ ๊ฐ๊ฒฉ ์์ธก ๊ธฐ๋ฅ์ ๊ฐ์ถ ํ๋์ ์ธ ์ผํ๋ชฐ ๊ฐ๊ฒฉ๋น๊ต ํ๋ซํผ์ ๋ชฉํ๋ก ํฉ๋๋ค.
- React 19 - ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- Vite - ๋น ๋ฅธ ๋น๋ ๋๊ตฌ ๋ฐ ๊ฐ๋ฐ ์๋ฒ
- Tailwind CSS v3 - ์ ํธ๋ฆฌํฐ ๊ธฐ๋ฐ CSS ํ๋ ์์ํฌ
- @tanstack/react-query - ์๋ฒ ์ํ ๊ด๋ฆฌ (API ๋ฐ์ดํฐ ์บ์ฑ, ๋๊ธฐํ, ์๋ฌ ์ฒ๋ฆฌ๋ฅผ ์๋ํํ์ฌ ๋ณต์กํ ์ํ ๊ด๋ฆฌ ๋ก์ง์ ๊ฐ์ํ)
- Chart.js - AI ๊ฐ๊ฒฉ ์์ธก ์ฐจํธ ์๊ฐํ
- React Chart.js 2 - React์ฉ Chart.js ๋ํผ
- React Router Dom - ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ผ์ฐํ
- Font Awesome - ์์ด์ฝ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- Vitest - ๋น ๋ฅธ ํ ์คํธ ํ๋ ์์ํฌ
- Spring Boot - RESTful API ์๋ฒ
- OpenAI GPT API - AI ๊ฐ๊ฒฉ ์์ธก ์์ง
- Java 21 - ๋ฐฑ์๋ ๊ฐ๋ฐ ์ธ์ด
- โ AI ๊ฐ๊ฒฉ ์์ธก - OpenAI GPT ๊ธฐ๋ฐ ๋ฏธ๋ ๊ฐ๊ฒฉ ์์ธก ์ฐจํธ
- โ ์ค์๊ฐ ๊ฐ๊ฒฉ ๋น๊ต - ์ฌ๋ฌ ์ผํ๋ชฐ ๊ฐ๊ฒฉ ํ๋์ ๋น๊ต
- โ ๊ฐ๊ฒฉ ํ์คํ ๋ฆฌ ์ถ์ - ์๊ณ์ด ๊ฐ๊ฒฉ ๋ณํ ๋ฐ์ดํฐ
- โ ์ค๋งํธ ์ํ ๊ฒ์ - ์นดํ ๊ณ ๋ฆฌ๋ณ ํํฐ๋ง
- โ ์ํ ์์ธ ์ ๋ณด - ํ์ , ๋ฆฌ๋ทฐ, ์คํ ์ ๋ณด
- โ ์์ ๋ฐ์ํ ๋์์ธ - ๋ชจ๋ฐ์ผ, ํ๋ธ๋ฆฟ, ๋ฐ์คํฌํฑ ์ง์
- โ ํ๋์ ์ธ ์ธํฐํ์ด์ค - Tailwind CSS ๊ธฐ๋ฐ ๋์์ธ
- โ ์ธํฐ๋ํฐ๋ธ ์ฐจํธ - Chart.js ๊ธฐ๋ฐ ์๊ฐํ
- โ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ - ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ React ์ปดํฌ๋ํธ
- โ ๋ถ๋๋ฌ์ด ์ ๋๋ฉ์ด์ - ํธ๋ฒ ํจ๊ณผ ๋ฐ ํธ๋์ง์
jupiter-react/
โโโ public/ # ์ ์ ์์
(์ด๋ฏธ์ง, ํฐํธ ๋ฑ)
โโโ src/
โ โโโ components/ # ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ UI ์ปดํฌ๋ํธ
โ โ โโโ layout/ # ํ์ด์ง ๋ ์ด์์ (ํค๋, ํธํฐ)
โ โ โโโ sections/ # ํ์ด์ง์ ๊ฐ ์น์
โ โ โโโ AlcoholPreloader.jsx # ๋ก๋ฉ ์คํผ๋ ์ปดํฌ๋ํธ
โ โ โโโ PricePredictionChart.jsx # AI ๊ฐ๊ฒฉ ์์ธก ์ฐจํธ ์ปดํฌ๋ํธ
โ โโโ hooks/ # ์ปค์คํ
React ํ
(์ปดํฌ๋ํธ ๊ฐ ๋ก์ง ์ฌ์ฌ์ฉ์ ์ํ ํจ์)
โ โ โโโ useFileUpload.js # ํ์ผ ์
๋ก๋ ๊ด๋ฆฌ ํ
โ โโโ pages/ # ๋ผ์ฐํ
๋ ํ์ด์ง ์ปดํฌ๋ํธ (18๊ฐ)
โ โ โโโ Home.jsx # ๋ฉ์ธ ํํ์ด์ง
โ โ โโโ Shop.jsx # ์ํ ๋ชฉ๋ก ํ์ด์ง
โ โ โโโ ProductDetail.jsx # ์ํ ์์ธ ํ์ด์ง
โ โ โโโ Community.jsx # ์ปค๋ฎค๋ํฐ ๊ฒ์ํ
โ โ โโโ AdminPanel.jsx # ๊ด๋ฆฌ์ ํจ๋
โ โ โโโ ... # ๊ธฐํ ํ์ด์ง๋ค
โ โโโ services/ # API ์๋น์ค ๊ณ์ธต
โ โ โโโ api.js # ๊ธฐ๋ณธ API ํด๋ผ์ด์ธํธ
โ โ โโโ authService.js # ์ธ์ฆ ์๋น์ค
โ โ โโโ adminService.js # ๊ด๋ฆฌ์ ์๋น์ค
โ โ โโโ ... # ๊ธฐํ ์๋น์ค๋ค
โ โโโ utils/ # ์ ํธ๋ฆฌํฐ ํจ์
โ โ โโโ categoryUtils.js # ์นดํ
๊ณ ๋ฆฌ ๊ด๋ จ ์ ํธ๋ฆฌํฐ
โ โ โโโ fileUtils.js # ํ์ผ ์ฒ๋ฆฌ ์ ํธ๋ฆฌํฐ
โ โโโ App.jsx # ๋ฉ์ธ ์ฑ ์ปดํฌ๋ํธ (๋ผ์ฐํฐ ์ค์ )
โ โโโ index.css # ์ ์ญ CSS ์คํ์ผ
โ โโโ index.jsx # ์ ํ๋ฆฌ์ผ์ด์
์ง์
์
โโโ INTEGRATION_GUIDE.md # ๋ฐฑ์๋ API ์ฐ๋ ๊ฐ์ด๋
โโโ package.json # ํ๋ก์ ํธ ์์กด์ฑ ๋ฐ ์คํฌ๋ฆฝํธ
โโโ tailwind.config.js # Tailwind CSS ์ค์
โโโ vite.config.ts # Vite ์ค์
- ์๋ฒ ์ํ ๊ด๋ฆฌ: API ํธ์ถ, ์บ์ฑ, ๋๊ธฐํ๋ฅผ ์๋ํํ์ฌ ๊ฐ๋ฐ ๋ณต์ก๋ ๊ฐ์
- ์ฑ๋ฅ ์ต์ ํ: ์ค๋ณต ์์ฒญ ๋ฐฉ์ง, ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฐ์ดํฐ ๊ฐฑ์ , ์ง๋ฅ์ ์บ์ฑ
- ์ฌ์ฉ์ ๊ฒฝํ: ๋ก๋ฉ ์ํ, ์๋ฌ ์ฒ๋ฆฌ, ์ฌ์๋ ๋ก์ง์ ์ผ๊ด๋๊ฒ ์ ๊ณต
- ์ค์๊ฐ์ฑ: ๊ฐ๊ฒฉ ๋ฐ์ดํฐ์ ์ค์๊ฐ ์ ๋ฐ์ดํธ์ ๋๊ธฐํ๊ฐ ์ค์ํ ์ผํ๋ชฐ ํน์ฑ์ ์ ํฉ
React 16.8์์ ๋์ ๋ ๊ธฐ๋ฅ์ผ๋ก, ์ปดํฌ๋ํธ ๋ก์ง์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํจ์๋ก ๋ถ๋ฆฌ:
- ์ํ ๋ก์ง ์ฌ์ฌ์ฉ: ์ฌ๋ฌ ์ปดํฌ๋ํธ์์ ๋์ผํ ์ํ ๊ด๋ฆฌ ๋ก์ง ๊ณต์
- ๊ด์ฌ์ฌ ๋ถ๋ฆฌ: UI ๋ ๋๋ง๊ณผ ๋น์ฆ๋์ค ๋ก์ง์ ๋ช ํํ ๊ตฌ๋ถ
- ํ ์คํธ ์ฉ์ด์ฑ: ๋ก์ง์ ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธ ๊ฐ๋ฅ
- ์ฝ๋ ๊ฐ๋ ์ฑ: ๋ณต์กํ ์ปดํฌ๋ํธ๋ฅผ ๋ ์๊ณ ์ดํดํ๊ธฐ ์ฌ์ด ๋จ์๋ก ๋ถํด
- ์ค์๊ฐ ์์ธก: OpenAI GPT ๋ชจ๋ธ์ ํ์ฉํ ๊ฐ๊ฒฉ ์์ธก
- ์๊ฐํ: Chart.js ๊ธฐ๋ฐ์ ์ธํฐ๋ํฐ๋ธ ์ฐจํธ
- ํ์คํ ๋ฆฌ ๋ถ์: ๊ณผ๊ฑฐ ๊ฐ๊ฒฉ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ๋ฏธ๋ ์์ธก
- ์ค๋ช ์ ๊ณต: AI๊ฐ ์์ธก ๊ทผ๊ฑฐ ์ค๋ช ์ ๊ณต
์ํ ๊ฐ๊ฒฉ ํ์คํ ๋ฆฌ โ OpenAI API โ AI ์์ธก ๊ฒฐ๊ณผ โ Chart.js ์๊ฐํ
- ํ๋์ ์ค์ : ์ค์ ๊ฐ๊ฒฉ ์ถ์ด (๊ณผ๊ฑฐ ๋ฐ์ดํฐ)
- ๋นจ๊ฐ์ ์ ์ : AI ์์ธก ๊ฐ๊ฒฉ (๋ฏธ๋ 4์ฃผ)
- ํดํ: ๊ฐ๊ฒฉ ์ ๋ณด ๋ฐ ์์ธก ๊ทผ๊ฑฐ ํ์
- Primary: #1a365d (๋คํฌ ๋ธ๋ฃจ)
- Secondary: #d69e2e (๊ณจ๋)
- Accent: #2d3748 (์ฐจ์ฝ)
- ํฐํธ: Open Sans
- AI ๊ฐ๊ฒฉ ์์ธก ์์คํ
- ๋ฐ์ํ ์น ๋์์ธ
- ์ํ ์์ธ ํ์ด์ง
- ๊ฐ๊ฒฉ ๋น๊ต ์ธํฐํ์ด์ค
- Chart.js ๊ธฐ๋ฐ ์๊ฐํ
- ๋ฐฑ์๋ API ์ฐ๋ (์ธ์ฆ, ์ด๋๋ฏผ, ์ปค๋ฎค๋ํฐ)
- ํฌ๋กค๋ง ์์คํ ๊ตฌ์ถ
- ์ค์๊ฐ ๊ฐ๊ฒฉ ์ ๋ฐ์ดํธ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋
- ์ค์ ์ํ ๋ฐ์ดํฐ ์ ์ฉ
๐ ์์ธ ๊ฐ๋ฐ ๊ฐ์ด๋:
INTEGRATION_GUIDE.md
์ฐธ์กฐ