์ด ํ๋ก์ ํธ๋ ํด๋์ ํ๊ตญ ๊ณ ์คํฑ ๊ฒ์์ ์น ๋ธ๋ผ์ฐ์ ์์ ์ฆ๊ธธ ์ ์๋๋ก ๊ตฌํํ ์ฑ๊ธ ํ๋ ์ด์ด ๊ฒ์์ ๋๋ค. ํ๋ ์ด์ด๋ 16์ธ ํ ๋๋จผํธ์ ์ฐธ๊ฐํ์ฌ ๊ฐ์ฑ ๋์น๋ AI ์๋๋ค์ ์ฐจ๋ก๋ก ๊บพ๊ณ ์ต์ข ์ฐ์น์ ๋ชฉํ๋ก ํฉ๋๋ค.
ํธ์คํ ์ด๋ ฅ: ๋ณธ ํ๋ก์ ํธ๋ Vercel์์ ์ด์๋์์ผ๋ 2026-08์ GitHub Pages๋ก ์ ํํ์ต๋๋ค. ๊ณต์ ๋ผ์ด๋ธ ๋ฐ๋ชจ๋ ์ Pages URL์ ๋๋ค.
- ํ ๋๋จผํธ ๋ชจ๋: 15๋ช ์ ๋ ํนํ AI ์๋์ 16์ธ ๋จํ ํ ๋๋จผํธ ๋ฐฉ์์ผ๋ก ๊ฒฝ์ํฉ๋๋ค. ๋ผ์ด๋๊ฐ ์งํ๋ ์๋ก ์๋๋ ๋ ๊ฐํด์ง๋๋ค.
- ์ ๋ต์ AI: ๋จ์ํ ๋๋ค ํ๋ ์ด๊ฐ ์๋, ๊ณต๊ฒฉ(์กฑ๋ณด ์์ฑ)๊ณผ ์๋น(์๋ ์กฑ๋ณด ๋ฐฉํด)๋ฅผ ๋ชจ๋ ๊ณ ๋ คํ๋ ํด๋ฆฌ์คํฑ ๊ธฐ๋ฐ์ AI ๋ก์ง์ด ํ์ฌ๋์ด ์์ต๋๋ค.
- ํด๋์ ๊ณ ์คํฑ ๊ท์น: '๊ณ /์คํฑ', '๋ป', '์ชฝ', '๋ฐ๋ฅ' ๋ฑ ๊ธฐ๋ณธ์ ์ธ ๊ท์น๊ณผ ๋ค์ํ ์กฑ๋ณด(๊ด, ๋ , ์ด๋, ํผ)๋ฅผ ์ถฉ์คํ ๊ตฌํํ์ต๋๋ค.
- ํน์ ๊ท์น(๋ฐ): '๊ณ ๋ฐ', '๊ด๋ฐ', 'ํผ๋ฐ' ๋ฑ ์ ์๋ฅผ ๋ ๋ฐฐ๋ก ๋ง๋๋ ๋ฐ ๊ท์น์ด ์ ์ฉ๋์ด ๊ฒ์์ ๊ธด์ฅ๊ฐ์ ๋ํฉ๋๋ค.
- ์๊ฐ์ ํผ๋๋ฐฑ: ๋ถ๋๋ฌ์ด ์นด๋ ์ ๋๋ฉ์ด์ ๊ณผ ์กฑ๋ณด ์์ฑ ์ ๋น๋๋ ํ์ด๋ผ์ดํธ ํจ๊ณผ๋ก ๊ฒ์์ ๋ชฐ์ ๊ฐ์ ๋์์ต๋๋ค.
- ๋ฐ์ํ UI: ๋ฐ์คํฌํฑ๊ณผ ๋ชจ๋ฐ์ผ ํ๊ฒฝ ๋ชจ๋์์ ํธ์ํ๊ฒ ํ๋ ์ดํ ์ ์๋๋ก UI๊ฐ ์ต์ ํ๋์ด ์์ต๋๋ค.
- ๊ฒ์ ์ํ ์ ์ฅ: ํ ๋๋จผํธ ์งํ ์ํฉ์ด ๋ธ๋ผ์ฐ์ ์ ๋ก์ปฌ ์คํ ๋ฆฌ์ง์ ์๋์ผ๋ก ์ ์ฅ๋์ด, ์ธ์ ๋ ์ง ๊ฒ์์ ์ค๋จํ๊ณ ๋ค์ ์ด์ดํ ์ ์์ต๋๋ค.
- AI ์๋ ํ๋ ์ด: ํ๋ ์ด์ด๊ฐ ์ํ ๋ ์์ ์ ์ฐจ๋ก๋ฅผ AI์๊ฒ ๋งก๊ฒจ ์๋์ผ๋ก ํ๋ ์ดํ๊ฒ ํ ์ ์์ต๋๋ค.
- ํ๋ก ํธ์๋: React (Hooks), TypeScript
- ์คํ์ผ๋ง: Tailwind CSS, Custom CSS (์ ๋๋ฉ์ด์ )
- AI ๋ก์ง: ์์ TypeScript๋ก ๊ตฌํ๋ ํด๋ฆฌ์คํฑ ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ๋ฐ ํ๊ฒฝ: ๋น๋ ๊ณผ์ ์์ด
importmap์ ์ฌ์ฉํ์ฌ ๋ธ๋ผ์ฐ์ ์์ ์ง์ ES ๋ชจ๋์ ๋ก๋ํฉ๋๋ค.
- ๋ชฉํ: ๋ผ์ด๋์์ 7์ ์ด์์ ๋จผ์ ํ๋ํ์ฌ ์น๋ฆฌํ๊ณ , ์๋์ ์๋ณธ๊ธ์ ๋ชจ๋ ๋นผ์์ ํ ๋๋จผํธ์์ ์น๋ฆฌํ๋ ๊ฒ์ ๋๋ค.
- ์งํ: ์์ ์ ์ ํจ์์ ๋ฐ๋ฅ์ ๊น๋ฆฐ ํจ์ ๊ฐ์ ์(month)์ ํจ๋ฅผ ๋ด๊ณ , ๋ฑ์์ ํ ์ฅ์ ๋ค์ง์ด ํจ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
- ์ฃผ์ ์กฑ๋ณด:
- ๊ด(ๅ ): 3์ฅ(๋น๊ด ์ ์ธ ์ 3์ , ํฌํจ ์ 2์ ), 4์ฅ(4์ ), 5์ฅ(15์ )
- ๋ (ๅธถ): 5์ฅ(1์ )๋ถํฐ 1์ฅ๋ง๋ค +1์ , ํ๋จ/์ฒญ๋จ/์ด๋จ(๊ฐ 3์ )
- ์ด๋(๋): 5์ฅ(1์ )๋ถํฐ 1์ฅ๋ง๋ค +1์ , ๊ณ ๋๋ฆฌ(์ 3๋ง๋ฆฌ, 5์ )
- ํผ(็ฎ): 10์ฅ(1์ )๋ถํฐ 1์ฅ๋ง๋ค +1์ (์ํผ๋ 2์ฅ์ผ๋ก ๊ณ์ฐ)
- ๊ณ /์คํฑ: 7์ ์ด์ ํ๋ ์, ๋ผ์ด๋๋ฅผ ๋๋ด๋ '์คํฑ' ๋๋ ๋ ๋์ ์ ์๋ฅผ ์ํด ๊ณ์ํ๋ '๊ณ '๋ฅผ ์ ํํ ์ ์์ต๋๋ค. '๊ณ '๋ฅผ ํ ๋๋ง๋ค ์ ์ ๋ฐฐ์จ์ด ์ฌ๋ผ๊ฐ์ง๋ง, ์๋๊ฐ ์น๋ฆฌํ ๊ฒฝ์ฐ '๊ณ ๋ฐ'์ ๋นํ ์ ์์ต๋๋ค.
์ด ํ๋ก์ ํธ๋ ๋ณ๋์ ๋น๋ ๊ณผ์ ์ด ํ์ ์์ต๋๋ค. ๋ก์ปฌ ์น ์๋ฒ๋ง ์์ผ๋ฉด ๋ฐ๋ก ์คํํ ์ ์์ต๋๋ค.
-
์ ์ฅ์ ๋ณต์ (Clone)
git clone https://github.com/your-username/tournament-gostop.git cd tournament-gostop -
๋ก์ปฌ ์น ์๋ฒ ์คํ Python์ด ์ค์น๋์ด ์๋ค๋ฉด, ๋ค์ ๋ช ๋ น์ด๋ก ๊ฐ๋จํ ์น ์๋ฒ๋ฅผ ์คํํ ์ ์์ต๋๋ค.
# Python 3.x python -m http.server # Python 2.x python -m SimpleHTTPServer
๋๋ Node.js ํ๊ฒฝ์ด๋ผ๋ฉด
http-serverํจํค์ง๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.npx http-server
-
๋ธ๋ผ์ฐ์ ์์ ์ด๊ธฐ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ
http://localhost:8000(๋๋ ์๋ฒ๊ฐ ์คํ๋ ์ฃผ์)๋ก ์ ์ํฉ๋๋ค.
.
โโโ components/ # ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ
โ โโโ Card.tsx # ํํฌํจ ์ปดํฌ๋ํธ
โ โโโ GameBoard.tsx # ๊ฒ์ ๋ณด๋ (๋ฐ๋ฅ ํจ, ๋ฑ)
โ โโโ PlayerArea.tsx # ํ๋ ์ด์ด ์ ๋ณด ๋ฐ ์ ํจ, ํ๋ํ ํจ ์์ญ
โ โโโ ScoreBreakdownModal.tsx # ๋ผ์ด๋ ์ข
๋ฃ ์ ์ ์ ๊ณ์ฐ ๋ด์ญ ๋ชจ๋ฌ
โ โโโ TournamentModal.tsx # ํ ๋๋จผํธ ๊ด๋ จ ๋ชจ๋ฌ (์ธํธ๋ก, ๋์งํ ๋ฑ)
โโโ services/ # ๋น์ฆ๋์ค ๋ก์ง ๋ฐ ์๋น์ค
โ โโโ aiLogic.ts # AI์ ์ ๋ต์ ์์ฌ๊ฒฐ์ ๋ก์ง
โโโ types.ts # ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ TypeScript ํ์
๋ฐ ์ธํฐํ์ด์ค
โโโ constants.ts # ์นด๋ ๋ฐ์ดํฐ, ์๋ ํ๋กํ ๋ฑ ๊ฒ์ ์์
โโโ App.tsx # ๋ฉ์ธ ์ ํ๋ฆฌ์ผ์ด์
์ปดํฌ๋ํธ (๊ฒ์ ๋ก์ง, ์ํ ๊ด๋ฆฌ)
โโโ index.html # HTML ์ง์
์ , importmap, CSS ์ ๋๋ฉ์ด์
โโโ index.tsx # React ์ ํ๋ฆฌ์ผ์ด์
๋ง์ดํธ
- ์ฌ์ด๋ ์ดํํธ ์ถ๊ฐ: ์นด๋ ํจ๊ณผ์, '๊ณ /์คํฑ' ์์ฑ, ๋ฐฐ๊ฒฝ ์์ ๋ฑ์ ์ถ๊ฐํ์ฌ ์๋๊ฐ์ ๋์ ๋๋ค.
- ๊ณ ๊ธ ๊ท์น ๊ตฌํ: 'ํ๋ค๊ธฐ', '์ดํต', '๋๊ฐ๋ฆฌ' ๋ฑ ๋ ๋ค์ํ ๊ณ ์คํฑ ๊ท์น์ ์ถ๊ฐํฉ๋๋ค.
- AI ์ฑ๋ฅ ๊ณ ๋ํ: ๋ ์ ๊ตํ ๊ฐ์น ํ๊ฐ ํจ์๋ ๊ฐ๋จํ ํธ๋ฆฌ ํ์์ ๋์ ํ์ฌ AI์ ์ ๋ต ์์ค์ ๋์ ๋๋ค.
- ์ ๋๋ฉ์ด์ ๊ฐํ: ์กฑ๋ณด ์์ฑ ์ ๋ ํ๋ คํ๊ณ ์ธํฐ๋ํฐ๋ธํ ์ ๋๋ฉ์ด์ ์ ์ถ๊ฐํฉ๋๋ค. (์: ๊ณ ๋๋ฆฌ ์์ฑ ์ ์๋ค์ด ๋ ์๊ฐ๋ ํจ๊ณผ)
- ์ค์ ๋ฉ๋ด: ์ฌ์ด๋ on/off, ์ ๋๋ฉ์ด์ ์๋ ์กฐ์ ๋ฑ ๊ฒ์ ์ค์ ์ ๋ณ๊ฒฝํ ์ ์๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค.