λ΄μ€, μμ μ°¨νΈ, νμ€ν°λ² μΌμ λ± SIK-K κ΄λ ¨ μ 보λ₯Ό νκ³³μμ λ³Ό μ μλ μΉ μ¬μ΄νΈμ λλ€.
- λ°λͺ¨: https://sik-k.netlify.app/
- Node.js 22.x (
.nvmrcκΈ°μ€,nvm useκΆμ₯) - npm 9.x μ΄μ
# μ μ₯μ ν΄λ‘
git clone https://github.com/beurmuz/minsik.git
cd minsik
# μμ‘΄μ± μ€μΉ
npm install
# κ°λ° μλ² μ€ν (http://localhost:3000)
npm startnpm run build- λΉλ ν
generate-sitemapμ΄ μλ μ€νλ©λλ€. react-hydratableλ‘ pre-render νbuild/μ μ μ νμΌμ΄ μμ±λ©λλ€.
| λͺ λ Ήμ΄ | μ€λͺ |
|---|---|
npm test |
ν μ€νΈ μ€ν |
npm run generate-sitemap |
μ¬μ΄νΈλ§΅ μμ± |
npm run analyze |
λ²λ€ ν¬κΈ° λΆμ (source-map-explorer) |
| νμ΄μ§ | κ²½λ‘ | μ€λͺ |
|---|---|---|
| ν | / |
λ©μΈ λλ©, SIK-K μκ° λ§ν¬ |
| μκ° | /intro |
SIK-K μκ° λ° νμ€ν 리 |
| λ΄μ€ | /news |
μ΅μ λ΄μ€/κΈ°μ¬ λͺ©λ‘ (ν¬λ‘€λ§ λ°μ΄ν°) |
| 곑 | /songs |
μμ μ°¨νΈ (Chart.js) |
- λ°μν λ μ΄μμ, λ©λ΄, μ€ν¬λ‘€ μ μλ¨ μ΄λ λ²νΌ
react-helmet-asyncκΈ°λ° λ©ν/OG νκ·Έ, SEO- Netlify λ°°ν¬ (
_redirectsλ‘ SPA λΌμ°ν μ²λ¦¬)
minsik/
βββ public/ # μ μ νμΌ (favicon, manifest, meta μ΄λ―Έμ§, _redirects)
βββ src/
β βββ assets/ # μ΄λ―Έμ§, history.json λ±
β βββ components/ # Header, Footer, Menu, HistoryBox, SongChart, YouTubeVideo λ±
β βββ crawler/ # Python ν¬λ‘€λ¬ (λ΄μ€, 곑, νμ€ν°λ², μ°Έμ¬κ³‘)
β βββ crawlingData/ # ν¬λ‘€λ§ κ²°κ³Ό JSON
β βββ pages/ # Home, Intro, News, Songs, NotFound
β βββ routes/ # router.jsx (React Router)
β βββ SEO/ # sitemap μμ±, MetadataTemplate
β βββ shared/ # axios, layout, store (Zustand)
β βββ utils/ # date λ± μ νΈ
βββ .nvmrc # Node 22
βββ tailwind.config.js
| λΆλ₯ | κΈ°μ |
|---|---|
| νλ μμν¬ | React 18, React Router v6 |
| μ€νμΌ | Tailwind CSS |
| μν | Zustand |
| μ°¨νΈ | Chart.js, react-chartjs-2 |
| HTTP | Axios |
| SEO | react-helmet-async, sitemap μμ±, react-hydratable (pre-render) |
| λ°°ν¬ | Netlify |
| κΈ°ν | Python ν¬λ‘€λ¬ (λ΄μ€/곑/νμ€ν°λ²/μ°Έμ¬κ³‘) |