<<<<<<< HEAD
๐ DevPath โ ๋ฐฑ์๋ยท์๋ฒ ๋๋ยท๋ฐ๋ธ์ต์ค ๋ํ์์ฉ ์ค๋ฌด ํํ ๋ฆฌ์ผ ๊ณต์ ์๋น์ค
ํ๋ฒ: 20240884
ํ๋ก์ ํธ ์ ํ: 1์ธ ๊ฐ๋ฐ ยท Agile Scrum 7์ผ ์คํ๋ฆฐํธ
๊ฐ๋ฐ ๊ธฐ๊ฐ: 2026๋ 6์ (1์ฃผ ์คํ๋ฆฐํธ)
DevPath๋ ๋ฐฑ์๋(Backend), ์๋ฒ ๋๋(Embedded), ๋ฐ๋ธ์ต์ค(DevOps)๋ฅผ ์ง๋งํ๋
๋ํ์ ๊ฐ๋ฐ์๋ฅผ ์ํ ์ง๋ฌด๋ณ ์ค๋ฌด ํํ ๋ฆฌ์ผ ๊ณต์ ์น ์๋น์ค์
๋๋ค.
๊ธฐ์ ๋ธ๋ก๊ทธ๋ฅผ ์ฝ๋ ๋ฐ ๊ทธ์น์ง ์๊ณ , ์ง์ ์ธํฐ๋ํฐ๋ธ ํ์ต ํธ๋ฆฌ๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉฐ
๋จ๊ณ๋ณ ๋ ์จ ์ฝํ
์ธ ๋ฅผ ์ฝ๊ณ , ์ธ๋ถ ๋ ํผ๋ฐ์ค๋ฅผ ํ์ธํ๋ฉฐ, Q&A ๊ฒ์ํ์์
๋๋ฃ ํ์ต์๋ค๊ณผ ์ง๋ฌธ๊ณผ ๋ต๋ณ์ ๋๋ ์ ์๋ ์ปค๋ฎค๋ํฐํ ํ์ต ๋์๋ณด๋๋ฅผ ๋ชฉํ๋ก ํฉ๋๋ค.
- ๋ฐฑ์๋ / ์๋ฒ ๋๋ / ๋ฐ๋ธ์ต์ค ์ง๋ฌด๋ณ ํ๊ทธ ๊ธฐ๋ฐ ์ง๋ฌธ ๋ถ๋ฅ
- ์ง๋ฌธ ๋ฑ๋ก ์ ์๋์ผ๋ก 20๊ฐ ์ํ ๊ฒ์ฌ โ ์ด๊ณผ ์ ๋ฑ๋ก ์ฐจ๋จ UI ํ์
- ์๋จ์ "ํ์ฌ ์ง๋ฌธ ์: N / 20" ์ค์๊ฐ ์นด์ดํฐ ๋ ธ์ถ
- ๋ต๋ณ ์์ฑ ๋ฐ ์ถ์ฒ(Upvote) ๊ธฐ๋ฅ โ ์ฐธ์ฌ ์ XP ๋ณด์
Backend / Embedded / DevOps3๊ฐ ์ง๋ฌด ํญ ์ ํํ ํ์ต ๊ฒฝ๋ก- ๊ฐ ์ง๋ฌด๋ณ 3๋จ๊ณ ํต์ฌ ๋ ์จ (์ด 9๊ฐ ๋ ์จ)
- ๋ ์จ ๋ ธ๋: โ ์๋ฃ / ๐ต ํ์ฑ / ๐ ์ ๊ธ ์ธ ๊ฐ์ง ์ํ ์๊ฐํ
- ๋ ธ๋ ์ฌ์ด ์์ง ์ฐ๊ฒฐ์ (Tree Line)์ผ๋ก ์ง๊ด์ ์ธ ๊ณ์ธต ๊ตฌ์กฐ ํํ
- ๋ ์จ ์๋ฃ ์ ํด์ฆ ์ ๋ต โ +100 XP ๋ณด์ ๋ฐ ์๋ฃ ํ์
- ๊ฐ ํํ ๋ฆฌ์ผ ๋ ์จ ์นด๋ ํ๋จ์ "๐ ์ถ์ฒ ๋ ํผ๋ฐ์ค" ์น์ ํ์ฌ
- ๋งํฌ ์ ํ๋ณ ์์ด์ฝ ๊ตฌ๋ถ (๊ณต์ ๋ฌธ์ ๐ / ๋ธ๋ก๊ทธ ๐ / GitHub ๐)
target="_blank"+rel="noreferrer"์ ์ฉ โ ์์ ํ ์ ํญ ์ด๊ธฐ
- ๋ฐฑ์๋: HTTP ๊ธฐ์ด โ ์ธ์ด โ ํ๋ ์์ํฌ โ DB โ Redis โ AWS ํด๋ผ์ฐ๋
- ์๋ฒ ๋๋: C/C++ โ ์ปดํจํฐ ๊ตฌ์กฐ โ MCU ์ฃผ๋ณ์ฅ์น โ ๋ ์ง์คํฐ โ RTOS โ ๋๋ฒ๊น
- ๋ฐ๋ธ์ต์ค: Linux โ ๋คํธ์ํฌ โ Docker โ CI/CD โ Terraform โ Kubernetes
- ๋ ธ๋ ์๋ฃ ํด๋ฆญ ์ ์ค์๊ฐ XP ์ฆ๊ฐ ๋ฐ ๋์๋ณด๋ ์งํ๋ฅ ๊ฐฑ์
- ๋ก๋๋งต ์งํ๋ฅ (N / 18 ๋ ธ๋ ์๋ฃ)
- ํํ ๋ฆฌ์ผ ์งํ๋ฅ (N / 9 ๋ ์จ ์๋ฃ)
- ์ด ํ๋ XP ๋ฐ ๋ค์ ๋ ๋ฒจ๊น์ง ๋จ์ XP ํ์
- ์ต๊ทผ ํ๋ ๋ด์ญ ํ์๋ผ์ธ
| ๊ตฌ๋ถ | ๊ธฐ์ |
|---|---|
| UI ๋ผ์ด๋ธ๋ฌ๋ฆฌ | React 18 (CSR, Hooks ๊ธฐ๋ฐ) |
| ๋น๋ ๋๊ตฌ | Vite 6 |
| ์คํ์ผ๋ง | Vanilla CSS (๋์์ธ ํ ํฐ, ๊ธ๋์ค๋ชจํผ์ฆ) |
| ์ํ ๊ด๋ฆฌ | React useState / useEffect |
| ๋ฐ์ดํฐ ์ ์ฅ | localStorage (ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ํผ์์คํด์ค) |
| ํจํค์ง ๊ด๋ฆฌ | npm |
| ๋ฒ์ ๊ด๋ฆฌ | Git (1์ผ 1์ปค๋ฐ Micro Commit ์ ๋ต) |
- Node.js 18 ์ด์ ์ค์น
- npm 9 ์ด์ ์ค์น
# 1. ์ ์ฅ์ ํด๋ก
git clone <repository-url>
cd tutorial
# 2. ์์กด์ฑ ์ค์น
npm install
# 3. ๊ฐ๋ฐ ์๋ฒ ์คํ
npm run dev
# โ http://localhost:5173 ์์ ํ์ธnpm run build
npm run preview| Day | ์์ ์์ญ | ํต์ฌ ๋ฌ์ฑ ๋ด์ฉ | ์ปค๋ฐ |
|---|---|---|---|
| Day 1 | ํ๋ก์ ํธ ์ด๊ธฐ ์ธํ | Git ์ด๊ธฐํ, ํด๋ ๊ตฌ์กฐ ์ ๋น, CSS ํ ํฐ ์ ์ | chore: ์ด๊ธฐ ๋ผ๋ ์ธํ
(#day1) |
| Day 2 | Q&A ๊ธฐ๋ฅ | 20๊ฐ ์ ํ ๋ก์ง, ์นด์ดํฐ UI, ์ง๋ฌด ํ๊ทธ ํํฐ | feat: Q&A 20๊ฐ ์ ํ ๊ตฌํ (#day2) |
| Day 3 | ํํ ๋ฆฌ์ผ ํธ๋ฆฌ UI | ์ง๋ฌด ํญ, ํธ๋ฆฌ ๋ ๋๋ง, ์ ๊ธ/ํ์ฑ/์๋ฃ ์ํ | feat: ํํ ๋ฆฌ์ผ ํธ๋ฆฌ ์ปดํฌ๋ํธ ๊ตฌํ (#day3) |
| Day 4 | ์ธ๋ถ ๋งํฌ ๊ธฐ๋ฅ | resources ํ๋, ์์ด์ฝ ๊ตฌ๋ถ, ์์ ํ ๋งํฌ ๋ ๋๋ง | feat: ์ธ๋ถ ๋ ํผ๋ฐ์ค ๋งํฌ ์ฝ์
๊ธฐ๋ฅ (#day4) |
| Day 5 | ๋ก๋๋งต ์์ฑ | 3๊ฐ ์ง๋ฌด 18๊ฐ ๋ ธ๋, XP ์ฐ๋ | feat: ๋ก๋๋งต 18๋
ธ๋ ๋ฐ XP ์ฐ๋ (#day5) |
| Day 6 | ๋์๋ณด๋ ํต๊ณ | 18๋ ธ๋/9๋ ์จ ๊ธฐ์ค ์งํ๋ฅ , ์ง๋ฌด ๋ฐฐ์ง, ํ๋ ๋ก๊ทธ | feat: ๋์๋ณด๋ ํต๊ณ ๋ฐ UX ์ ๋น (#day6) |
| Day 7 | ์ต์ข ๊ฒ์ฆ & README | ์ ์ฒด ํตํฉ ํ ์คํธ, README ์์ฑ, ๋น๋ ํ์ธ | docs: README ์ต์ข
์์ฑ (#day7) |
tutorial/
โโโ public/
โโโ src/
โ โโโ App.jsx โ ์ ์ญ ์ํ ๊ด๋ฆฌ (XP, ์๋ฃ ๋ด์ญ, Q&A)
โ โโโ main.jsx
โ โโโ index.css โ ๋์์ธ ํ ํฐ, ๊ธ๋์ค๋ชจํผ์ฆ ์คํ์ผ
โ โโโ component/
โ โโโ common/Layout/
โ โ โโโ Layout.jsx โ ๊ทธ๋ฆฌ๋ ๋ ์ด์์
โ โ โโโ Sidebar.jsx โ ๋ค๋น๊ฒ์ด์
๋ฉ๋ด
โ โ โโโ Header.jsx โ XP ๋ ๋ฒจ ๋ฐ, ์ง๋ฌด ๋ฐฐ์ง
โ โ โโโ Footer.jsx
โ โโโ dashboard/
โ โ โโโ Dashboard.jsx โ ํต๊ณ ์นด๋ (18๋
ธ๋/9๋ ์จ ์งํ๋ฅ )
โ โโโ roadmap/
โ โ โโโ Roadmap.jsx โ 3๊ฐ ์ง๋ฌด ํญ + ๊ฐ 6๋จ๊ณ ํธ๋ฆฌ ๋
ธ๋
โ โโโ tutorial/
โ โ โโโ Tutorial.jsx โ ์ง๋ฌด ํญ + ํธ๋ฆฌ UI + ์ธ๋ถ ๋งํฌ
โ โโโ qa/
โ โโโ QA.jsx โ Q&A ํผ๋ (20๊ฐ ์ ํ, ํ๊ทธ ํํฐ)
โโโ README.md
โโโ package.json
โโโ vite.config.js
์ ์ฒด ์ฑ์ ๋ฃจํธ ์ปดํฌ๋ํธ. completedRoadmapNodes, completedLessons, questions, userStats๋ฅผ ์ค์ ๊ด๋ฆฌํ๋ฉฐ localStorage์ ์ํ๋ฅผ ๋๊ธฐํํฉ๋๋ค. XP ์ฆ๊ฐ ํจ์ addXp(), ๋
ธ๋/๋ ์จ ํ ๊ธ ํจ์๋ฅผ ํ์ ์ปดํฌ๋ํธ์ prop์ผ๋ก ์ ๋ฌํฉ๋๋ค.
์ง๋ฌด ํญ ์ ํ ์ํ์ ๊ฐ ์ง๋ฌด๋ณ ๋ ์จ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. ํด์ฆ ์ ๋ต ํ๋ณ ๋ฐ ์ต์ด ์๋ฃ ์ XP๋ฅผ ์ง๊ธํ๋ฉฐ, ๋ ์จ ํ๋จ resources ๋ฐฐ์ด๋ก ์ธ๋ถ ๋งํฌ๋ฅผ ๋ ๋๋งํฉ๋๋ค.
์ง๋ฌด ํญ ์ ํ ์ ์์ ํ ๋ค๋ฅธ ๋
ธ๋ ๋ชฉ๋ก์ผ๋ก ์ ํ๋ฉ๋๋ค. ๋
ธ๋ ์๋ฃ/์ทจ์ ํด๋ฆญ โ toggleNodeCompletion() + addXp() ๋ฅผ ํธ์ถํ๋ฉฐ ์๋ฃ/ํ์ฑ/์ ๊ธ ์ํ์ ๋ฐ๋ผ ์์ด์ฝ ๋ฐ ์์์ด ๋ณํํฉ๋๋ค.
20๊ฐ ์ด๊ณผ ์ ๋ฑ๋ก ๋ฒํผ ๋นํ์ฑํ + ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค. ์ค์๊ฐ ์ง๋ฌธ ์ ์นด์ดํฐ(N / 20)์ ์ง๋ฌด๋ณ ํ๊ทธ ๊ธฐ๋ฐ ํํฐ๋ง(Backend, Embedded, DevOps, Database, C-Language, Docker, Linux)์ ์ ๊ณตํฉ๋๋ค.
| React ๊ฐ๋ | ์ด๋์ ํ์ธํ๋์? |
|---|---|
useState โ ์ํ ๋ณ์ ์ ์ธ |
Tutorial.jsx ํญ ์ ํ / QA.jsx ํผ ์
๋ ฅ |
useEffect โ ์ฌ์ด๋ ์ดํํธ ์ฒ๋ฆฌ |
App.jsx localStorage ๋๊ธฐํ |
| Props ์ ๋ฌ โ ๋ถ๋ชจโ์์ ๋ฐ์ดํฐ ํ๋ฆ | App.jsx โ ๋ชจ๋ ํ์ด์ง ์ปดํฌ๋ํธ |
| ์กฐ๊ฑด๋ถ ๋ ๋๋ง | ํธ๋ฆฌ ๋ ธ๋ ์์ด์ฝ, Q&A ๋ฑ๋ก ์ ํ ๋ฉ์์ง |
๋ฐฐ์ด .map() โ ๋ฆฌ์คํธ ๋ ๋๋ง |
๋ ์จ ๋ชฉ๋ก, ๋ก๋๋งต ๋ ธ๋, Q&A ํผ๋ |
localStorage โ ๋ธ๋ผ์ฐ์ ์ ์ฅ |
App.jsx ์๋ฃ ์ด๋ ฅ ํผ์์คํด์ค |
| ์ด๋ฒคํธ ํธ๋ค๋ง | ๋ฒํผ ํด๋ฆญ, ํผ ์ ์ถ, ์ ๋ ฅ onChange |
- ๋ฐฑ์๋ API ์๋ฒ ์ฐ๋ (Express.js / Spring Boot)
- ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ (PostgreSQL / MongoDB)
- ์ฌ์ฉ์ ๋ก๊ทธ์ธ ์ธ์ฆ (JWT ๊ธฐ๋ฐ)
- ๋งํฌ๋ค์ด(Markdown) ๊ธฐ๋ฐ ํํ ๋ฆฌ์ผ ์ฝํ ์ธ ์๋ํฐ
- ๋คํฌ/๋ผ์ดํธ ํ ๋ง ์ ํ ํ ๊ธ
- ๋ฐ์ํ ๋ชจ๋ฐ์ผ ๋ ์ด์์ ๊ฐ์
- Q&A ํ์ด์ง๋ค์ด์ ๋ฐ ๊ฒ์ ๊ณ ๋ํ
feat: ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ
fix: ๋ฒ๊ทธ ์์
docs: ๋ฌธ์ ์์ฑ/์์
style: ์ฝ๋ ์คํ์ผ ๋ณ๊ฒฝ (๊ธฐ๋ฅ ๋ณํ ์์)
refactor: ๊ธฐ๋ฅ ๋ณ๊ฒฝ ์์ด ์ฝ๋ ๊ตฌ์กฐ ๊ฐ์
chore: ๋น๋ ์ค์ , ํจํค์ง ๋ณ๊ฒฝ ๋ฑ ๊ธฐํ1c3513fd0da9c100ab663b26b33de32584ce76cc