ํ๋๋ํ๊ต์ ์ ํต์ ์ธ ํ ๊ต๋ฅ ํ๋ก๊ทธ๋จ ํCC๋ฅผ ์จ๋ผ์ธ์์ ์ฝ๊ณ ์ฌ๋ฏธ์๊ฒ ์ด์ํ ์ ์๋๋ก ์ง์ํ๋ ํ๋ก ํธ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ค.
์ฐธ์ฌ์๋ Google ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ์ฌ ์ด๋ฒคํธ์ ์ฐธ์ฌํ๊ณ , ๋ฏธ์ ์ ์ํํ๋ฉฐ, ์ธ์ฆ์ ํตํด ํ์ํฌ๋ฅผ ๋์ผ ์ ์์ต๋๋ค.
- ๐ ํ๋ก์ ํธ ๊ฐ์
- โ๏ธ ๊ธฐ์ ์คํ
- ๐ ์ฃผ์ ๊ธฐ๋ฅ
- ๐ง ์ค์น ๋ฐ ์คํ ๋ฐฉ๋ฒ
- ๐ ํด๋ ๊ตฌ์กฐ
- ๐ผ๏ธ ํ์ด์ง ํ๋ฆ ๋ฐ UI ๊ตฌ์ฑ
- ๐ API ์ฐ๋ ๋ฐ ์ธ์ฆ ๊ตฌ์กฐ
- ๐งช ํ ์คํธ ์ ๋ต ๋ฐ ์ฝ๋ ํ์ง ๊ด๋ฆฌ
- ๐ค ๊ธฐ์ฌ ๊ฐ์ด๋
- ๐ ๋ผ์ด์ ์ค
- ๐ฌ ์ฐ๋ฝ์ฒ
- TeamCC_FE๋ ํCC ์ด๋ฒคํธ์ ์ฐธ๊ฐ์/๊ด๋ฆฌ์๊ฐ ์ฝ๊ฒ ๋ฏธ์ ์ ์ํํ๊ณ , ์ ์๋ฅผ ๊ธฐ๋กํ๋ฉฐ, ๊ต๋ฅ ํ๋์ ๊ด๋ฆฌํ ์ ์๋๋ก UI๋ฅผ ์ ๊ณตํฉ๋๋ค.
- Google OAuth2 ์ธ์ฆ์ ํตํด ๋ก๊ทธ์ธํ๊ณ , ์ด๋์ฝ๋ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฒคํธ์ ์ฐธ์ฌํ ์ ์์ต๋๋ค.
- ์ง ๋งค์นญ, ๋ฏธ์ ์ธ์ฆ, ์ ์ ํ์ธ, ์์ํ ๋ฑ ์ฃผ์ ๊ธฐ๋ฅ์ด ํฌํจ๋ฉ๋๋ค.
- ๋ฐฑ์๋๋ TeamCC_BE์ ์ฐ๋๋์ด ์๋ํฉ๋๋ค.
| ๋ถ์ผ | ์ฌ์ฉ ๊ธฐ์ |
|---|---|
| ํ๋ ์์ํฌ | React 19 |
| ๋ผ์ฐํ | React Router DOM v7 |
| ์ํ ๊ด๋ฆฌ | useState, Context API |
| ์คํ์ผ๋ง | styled-components |
| API ํต์ | Axios |
| ์ธ์ฆ | Google OAuth2 + JWT |
| ํ ์คํธ | Testing Library (React) |
| ์ฝ๋ ์คํ์ผ | ESLint, Prettier (์์ ) |
- ๐ Google OAuth2 ๋ก๊ทธ์ธ ๋ฐ JWT ์ ์ฅ
- ๐ฉ ์ด๋์ฝ๋ ๊ธฐ๋ฐ ์ด๋ฒคํธ ์ฐธ์ฌ
- ๐ค ์ง ๋งค์นญ ๊ฒฐ๊ณผ ์กฐํ ๋ฐ ์ํ ํ์ธ
- ๐ ๋ฏธ์ ๋ชฉ๋ก ํ์ธ ๋ฐ ์งํ ์ํ
- ๐ธ ๋ฏธ์ ์ธ์ฆ ์ฌ์ง ์ ์ถ
- ๐ ์ ์ ๊ธฐ๋ฐ ์ฌ์ฉ์ ์์ํ ํ์ธ
- ๐ฑ ๋ชจ๋ฐ์ผ/ํ๋ธ๋ฆฟ ๋์ UI (๋ฐ์ํ)
# 1. ๋ ํฌ์งํ ๋ฆฌ ํด๋ก
git clone https://github.com/2025-TeamCC/Team_CC_FE.git
# 2. ๋๋ ํ ๋ฆฌ ์ด๋
cd Team_CC_FE
# 3. ์์กด์ฑ ์ค์น
npm install
# 4. ํ๊ฒฝ๋ณ์ ํ์ผ ์์ฑ (.env)
REACT_APP_API_URL=http://localhost:8080
# 5. ๊ฐ๋ฐ ์๋ฒ ์คํ
npm startsrc/
โโโ API/ # axios ๊ธฐ๋ฐ API ๋ชจ๋ (Auth, Code, Event)
โโโ Assets/ # ์ ์ ์ด๋ฏธ์ง ๋ฆฌ์์ค
โโโ Pages/ # ์ฃผ์ ํ์ด์ง ์ปดํฌ๋ํธ
โ โโโ EventAttendPage/ # ์์: ์ด๋ฒคํธ ์ฐธ์ฌ ํ์ด์ง
โโโ util/
โ โโโ form/ # ํผ ์
๋ ฅ UI ์ปดํฌ๋ํธ
โ โโโ modal/ # ๊ณตํต ๋ชจ๋ฌ ์ปดํฌ๋ํธ
โ โโโ Layout/ # Header ๋ฑ ๋ ์ด์์ ๊ตฌ์ฑ ์์
โโโ App.js # ์ ์ฒด ๋ผ์ฐํ
๋ฐ ๊ตฌ์กฐ ์ค์
โโโ index.js # React ์ ํ๋ฆฌ์ผ์ด์
์ง์
์ | ํ์ด์ง | ์ค๋ช |
|---|---|
| LandingPage | ์ฒซ ์ง์ ํ๋ฉด, ๋ก๊ทธ์ธ ์ ๋ |
| RegisterPage | ์ด๋์ฝ๋ ์ ๋ ฅ ํ ์ด๋ฒคํธ ์ฐธ๊ฐ |
| EventAttendPage | ์ฐธ๊ฐ์ ์ ๋ณด ์ ๋ ฅ ๋ฐ ํ์ธ |
| MissionMenuPage | ์ ์๋ณ๋ก ๋ฏธ์ ๋ชฉ๋ก ์กฐํ ๋ฐ ์ ํ |
| MissionDetailPage | ๊ฐ๋ณ ๋ฏธ์ ์ค๋ช ํ์ธ |
| MissionSubmissionPage | ์ฌ์ง ์ ๋ก๋ ํ ์ธ์ฆ ์ ์ถ |
| SummaryPage | ๋ญํน ๋ฐ ์ ์ ํ์ธ (์ต์ข ์์ฝ) |
- Google OAuth2 ๋ก๊ทธ์ธ ํ โ JWT ํ ํฐ ๋ฐ๊ธ
sessionStorage์accessToken์ ์ฅ- ์ดํ ๋ชจ๋ API ์์ฒญ ์ ์๋์ฒ๋ผ ์ธ์ฆ ํค๋ ํฌํจ
axios.post("/event/join", data, {
headers: {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
},
});/auth: ๋ก๊ทธ์ธ ์์ฒญ/event/code: ์ด๋์ฝ๋ ์ ํจ์ฑ ๊ฒ์ฆ/event/join: ์ด๋ฒคํธ ์ฐธ์ฌ/pairing/start: ์ง ๋งค์นญ ์์/mission/pair: ๋ฏธ์ ์ํ ์กฐํ/mission/submit: ๋ฏธ์ ์ธ์ฆ ์ ์ถ/ranking: ์ฌ์ฉ์ ์ ์ ๊ธฐ๋ฐ ๋ญํน
TeamCC_FE๋ Jest์ @testing-library/react ๊ธฐ๋ฐ์ผ๋ก ๋จ์/ํตํฉ ํ
์คํธ๋ฅผ ์ํํฉ๋๋ค.
| ํ ์คํธ ์์ค | ์ค๋ช | ์ฌ์ฉ ๋๊ตฌ |
|---|---|---|
| ๋จ์ ํ ์คํธ | ๊ฐ๋ณ ์ปดํฌ๋ํธ ๋๋ ์ ํธ ํจ์ ํ ์คํธ | Jest, Testing Library |
| ํตํฉ ํ ์คํธ | ํ์ด์ง ๋จ์ UI ํ๋ฆ ํ ์คํธ | Testing Library |
| E2E ํ ์คํธ (ํฅํ ์ ์ฉ) | ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ ์ค์ ์ฌ์ฉ์ ์๋๋ฆฌ์ค ๊ฒ์ฆ | Cypress / Playwright |
๋ชจํน์ jest.mock() ๋๋ MSW ๋์
์์ ์
๋๋ค.
jest.mock("../../API/Code", () => ({
codeVerifyAPI: jest.fn(() => Promise.resolve({ success: true })),
}));Coverage ๋ฆฌํฌํธ๋ ๋ค์ ๋ช ๋ น์ด๋ก ํ์ธํ ์ ์์ต๋๋ค:
npm test -- --coverage| ์ฐ์ ๋ | ๋์ | ์ด์ |
|---|---|---|
| ๐ด ๋์ | ๋ก๊ทธ์ธ, ์ด๋ฒคํธ ์ฐธ์ฌ, ๋ฏธ์ ์ ์ถ | ์ฃผ์ ๊ธฐ๋ฅ์ ์ ์ ์๋ ๋ณด์ฅ |
| ๐ก ์ค๊ฐ | ๋ชจ๋ฌ, ํผ | UX ์์ ์ฑ ํ๋ณด |
| ๐ข ๋ฎ์ | ์์, ์คํ์ผ๋ง ๊ด๋ จ๋ ์ปดํฌ๋ํธ | ๊ธฐ๋ฅ ์ํฅ๋ ๋ฎ์ |
๋ณธ ํ๋ก์ ํธ๋ ESLint๋ฅผ ๊ธฐ๋ฐ์ผ๋ก JavaScript ๋ฌธ๋ฒ ๋ฐ React ์ฝ๋ ์คํ์ผ์ ์๊ฒฉํ ๊ด๋ฆฌํฉ๋๋ค.
{
"env": {
"browser": true,
"es2021": true
},
"extends": ["eslint:recommended", "plugin:react/recommended"],
"parserOptions": {
"ecmaVersion": 12,
"sourceType": "module"
},
"plugins": ["react"],
"rules": {}
}eslint:recommended๋ฐplugin:react/recommended๋ฅผ ์ฌ์ฉ- VSCode ESLint ํ์ฅ๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ ์ฅ ์ ์๋ ํฌ๋งทํ ๊ฐ๋ฅ
- ํฅํ Prettier ์ฐ๋์ ํตํด ํฌ๋งท ์ผ๊ด์ฑ๋ ๊ฐํ ์์
-
์ด์๋ฅผ ๋ฑ๋กํ๊ณ ๋ ผ์ ํ ์์ ์์
-
๋ธ๋์น ์์ฑ
git checkout -b feature/your-feature-name
-
์ปค๋ฐ ๋ฉ์์ง ๋ช ํํ ์์ฑ
git commit -m "feat: ๋ฏธ์ ์ ์ถ ๊ธฐ๋ฅ ๊ตฌํ" -
PR ์์ฑ ๋ฐ ์ฝ๋ ๋ฆฌ๋ทฐ ์์ฒญ
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค๋ฅผ ๋ฐ๋ฆ ๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE๋ฅผ ์ฐธ๊ณ ํ์ธ์.