- Puzzle github: Team-SPREAD
- ๋ฐฐํฌ URL : http://Puzzle.io(์๋ฒ ์ค์ง)
-
Puzzle์ ์์์ผ ๋ฐฉ๋ฒ๋ก , ๋ธ๋ ์ธ ์คํ ๋ฐ์ ๊ธฐ๋ฐํ๊ณ , ์ํํธ์จ์ด ์ค๊ณ ๊ฐ์ด๋๋ผ์ธ์ ์ ๊ณตํ์ฌ ์ค์๊ฐ์ผ๋ก ์์ด๋์ด๋ฅผ ๊ธฐํํ๊ณ ํ์ ํ ์ ์๋ ํ๋ซํผ ์ ๋๋ค.
-
์ ์ ๋ ๋์๋ณด๋์์ ํ์ ๋ง๋ค๊ณ , ํ์์ ์ด๋ํ์ฌ ๊ฐ์ด ํผ์ฆ์ ์งํํ ์ ์์ต๋๋ค.
-
๋จ๊ณ๋ ์ด 10๋จ๊ณ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ, ์๋์ ์์๋๋ก ์งํ ๋ฉ๋๋ค.
-
์์ด์ค๋ธ๋ ์ดํน : ํ์ ๊ฐ ์น๋ฐ๋๋ฅผ ๋์ด๋ ๋จ๊ณ
-
๋น์ ์ฐพ๊ธฐ : ํ๋ก์ ํธ์ ๋ค์ง๊ณผ ๋ฐฉํฅ์ฑ ์ค์
-
ํ ๋ก ํ๊ธฐ : ์์ ๋ก์ด ์์ด๋์ด ๊ตํ
-
์คํ๋ ๋: ์์ด๋์ด ํ์ฅ ๋ฐ ๋ฐ์
-
๋ ผ์ํ๊ธฐ : ๊ตฌ์ฒด์ ์ธ ์คํ ๋ฐฉ์ ํ ๋ก
-
ํ๋ฅด์๋ : ๋ชฉํ ์ฌ์ฉ์ ์ ์
-
๋ฌธ์ ํด๊ฒฐ : ๊ตฌ์ฒด์ ์ธ ์๋ฃจ์ ๋์ถ
-
์ฌ์ฉ์ ์คํ ๋ฆฌ : ์ฌ์ฉ์ ๊ด์ ์์์ ๊ธฐ๋ฅ ์ ์
-
๋ฉ๋ด ํธ๋ฆฌ : ์๋น์ค ๊ตฌ์กฐ ์ค๊ณ
-
ํ์ธํ๊ธฐ : README.md ์ต์ข ๊ฒํ ๋ฐ ํ์ธ
-
ํ๋ก์ ํธ ๋ด์์๋ ํฌํ ๋ฒํผ์ ํตํด ๋จ๊ณ๋ฅผ ๋์ด๊ฐ ์ ์์ต๋๋ค.
-
ํ๋ก์ ํธ ๋ด์์ ์ฐธ์ฌ์๋ค์ ์ปค์, ํ ์คํธ ๋ฑ์ด ์ค์๊ฐ์ผ๋ก ๊ณต์ ๋๋ฉฐ ํ์ธ๋ฉ๋๋ค.
-
ํ๋ก์ ํธ ๋ด์๋ ํ์ ์ ๋์์ค ์ ์๋ ๊ณต์ ํ์ด๋จธ, ๊ณต์ ์์ , ๊ทธ๋ฃน ์ฑ ๋ฑ ๋ถ๊ฐ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
| FE | FE |
|---|---|
| ๊นํํธ | ๊น๋์ฑ |
| ํ๋ฆผ๋ํ๊ต | ํ๋ฆผ๋ํ๊ต |
| ๋น ๋ฐ์ดํฐ์ ๊ณต 3ํ๋ | ์ฝํ ์ธ IT์ ๊ณต 4ํ๋ |
| @low | @ไธธๅ ๅคงๆ |
- front : Next.js 14(TypeScript), Liveblocks, Tailwind CSS , Zustand, Framer Motion
- ๋ฒ์ ๋ฐ ์ด์ ๊ด๋ฆฌ : Git & GitHub , GItHub Projects, GitHub Actions (CI/CD)
- ํ์ ๋๊ตฌ : Notion, Google Drive, Slack
- ์๋น์ค ๋ฐฐํฌ ํ๊ฒฝ : Vercel
- ๋์์ธ : Figma, Icon8
- ๋ฐฐํฌ์ ํธ์คํ ์ ํธ๋ฆฌ์ฑ
- Vercel๊ณผ์ ์๋ฒฝํ ํธํ์ฑ์ผ๋ก ๋ฐฐํฌ๊ฐ ๋งค์ฐ ๊ฐํธํฉ๋๋ค
- ๋ณ๋ ์ค์ ์์ด๋ HTTPS์ CDN์ด ์๋ ์ ์ฉ๋ฉ๋๋ค
- CI/CD ํ์ดํ๋ผ์ธ ๊ตฌ์ถ์ด ์๋ํ๋์ด ์์ต๋๋ค
- ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)์ ๊ฐ์
- ์ด๊ธฐ ํ์ด์ง ๋ก๋ฉ์ด ๋นจ๋ผ ์ฌ์ฉ์ ๊ฒฝํ์ด ํฅ์๋ฉ๋๋ค
- ๊ฒ์ ์์ง ์ต์ ํ(SEO)๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์ด๋ฃจ์ด์ง๋๋ค
- ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์ ์ฑ๋ฅ์ด ๊ฐ์ ๋ฉ๋๋ค
- App Router์ ์ฅ์
- ์ง๊ด์ ์ธ ๋ ์ด์์ ์์คํ ์ ์ ๊ณตํฉ๋๋ค
- ๋ก๋ฉ/์๋ฌ ์ํ ๊ด๋ฆฌ๊ฐ ๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค
- ์๋ฒ/ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ ๊ตฌ๋ถ์ด ๋ช ํํฉ๋๋ค
์๋ฒ ์ปดํฌ๋ํธ์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ์ ์ ํ ํ์ฉํ ์ ์๋ค๋ ์ ์ด ํฐ ์ฅ์ ์ ๋๋ค. ๋ํ Livebloks์์ ํธํ์ฑ์ด ์ฐ์ํ์ฌ ์ค์๊ฐ ๊ธฐ๋ฅ ๊ตฌํ์ด ์ํ ํฉ๋๋ค.
- ์ค์๊ฐ ํ์ ๊ธฐ๋ฅ
- Presence๋ฅผ ํตํ ์ค์๊ฐ ์ฌ์ฉ์ ์ํ ๊ด๋ฆฌ
// ์์: ์ค์๊ฐ ์ปค์ ์์น ๊ณต์
const { others } = useOthers();
const { cursor } = useMyPresence();
- Storage๋ฅผ ํตํ ์๊ตฌ์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๋๊ธฐํ
- Broadcast๋ฅผ ํตํ ์ฆ๊ฐ์ ์ธ ๋ฉ์์ง ์ ๋ฌ
- ์ถฉ๋ ํด๊ฒฐ ๋ฉ์ปค๋์ฆ
- ์๋ ์ถฉ๋ ํด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ ์ ๊ณต
- ๋์ ํธ์ง ์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ ์ ์ง
- ์คํ๋ผ์ธ ์ํ์์๋ ์์ ๊ฐ๋ฅํ ๋ก์ปฌ ์คํ ๋ฆฌ์ง ์ง์
- ํ์ฅ์ฑ
- WebSocket ์ฐ๊ฒฐ ์๋ ๊ด๋ฆฌ
- ๋ฃธ ๊ธฐ๋ฐ ํ์ ์์คํ ์ผ๋ก ํ์ฅ ๊ฐ๋ฅ
- ์ปค์คํ ๊ถํ ๊ด๋ฆฌ ์์คํ ๊ตฌํ ๊ฐ๋ฅ
- ๊ฐํธํ ์ฌ์ฉ์ฑ
- Redux๋ณด๋ค ์ค์ ์ด ๋จ์ํฉ๋๋ค
- ์ ์ ์ฝ๋๋ก ์ํ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค
- TypeScript ์ง์์ด ์ฐ์ํฉ๋๋ค
- ์ฑ๋ฅ ์ต์ ํ
- ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ด ์ ์ต๋๋ค
- ๋ฒ๋ค ์ฌ์ด์ฆ๊ฐ ๋งค์ฐ ์์ต๋๋ค (2KB)
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ํจ์จ์ ์ ๋๋ค
- ์ค์๊ฐ ๋ฐ์ดํฐ ๊ด๋ฆฌ
- Liveblocks์์ ์ฐ๋์ด ์ฉ์ดํฉ๋๋ค
- ๋น๋๊ธฐ ์ํ ๊ด๋ฆฌ๊ฐ ํธ๋ฆฌํฉ๋๋ค
- ์ํ ๋ณํ ์ถ์ ์ด ์ฝ์ต๋๋ค
- Puzzle ๋ ์ด์ด์ ๋ง๋ UI/UX ๊ตฌํ
- ํผ๋ธ๋ฆฌ์ฑ ๊ตฌํ
- ๊ฐ ๋จ๊ณ TemplateBox ๊ตฌํ
- 1,2,3,4,5,6,7 ๋จ๊ณ ๊ธฐ๋ฏน ๊ตฌํ
- 1๋จ๊ณ ์์ด์ค๋ธ๋ ์ดํน
- 2๋จ๊ณ ๋น์ ์ฐพ๊ธฐ
- 3๋จ๊ณ ์ฃผ์ ์ ์
- 4๋จ๊ณ ์คํ๋ ๋
- 5๋จ๊ณ ํ ๋ก ํ๊ธฐ
- 6๋จ๊ณ ํ๋ฅด์๋
- 7๋จ๊ณ ๋ฌธ์ ํด๊ฒฐ
- ํธ์คํธ ๊ถํ(ํธ์คํธ๋ ๋ค์ ๋จ๊ณ๋ก ์ด๋ํ๋ ๊ถํ) ๋ถ์ฌ ๊ธฐ๋ฅ ๊ตฌํ
- Matter.js๋ฅผ ์ด์ฉํ ๋๋ฉํ์ด์ง ๊ตฌํ
- Liveblocks broadcast ์ด์ฉํ ํฌํ ๊ธฐ๋ฅ ๊ตฌํ
- ํ์ฌ ์งํ ๋จ๊ณ๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ฅ ๊ตฌํ
- ํ์๋ค๊ณผ ๋จ๊ณ ๋ ์ด์ค ์ปจ๋์ ์ ์กฐ์ ํ๋ ๊ธฐ๋ฅ ๊ตฌํ
- ์บ๋ฒ์ค ์ปค์คํ ํด๋ฐ(ํฌ์คํธ์, RGB ์์ ์กฐ์ ) ๊ธฐ๋ฅ ๊ตฌํ
- ์ค์๊ฐ ์ขํ๋ฅผ ํตํ ์ปค์ ๊ตฌํ
- ๋์๋ณด๋ ๊ตฌํ
- ๋ณด๋ CRUD ๊ธฐ๋ฅ ๊ตฌํ ๋ฐ ํต์
- ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํ
- ํจ์จ์ ์ฌ๋ ค์ฃผ๋ ํ์
๋๊ตฌ ๊ธฐ๋ฅ ๊ตฌํ
- ์ค๋์ค ํ๋ ์ด์ด
- Liveblocks broadCast๋ฅผ ์ด์ฉํ ํ์ด๋จธ ๊ธฐ๋ฅ ๊ตฌํ
- SendBird API๋ฅผ ์ด์ฉํ ๊ทธ๋ฃน์ฝ ๊ธฐ๋ฅ
- ์ค์๊ฐ ์ฌ์ด๋ ๋ธ๋ญ ๊ธฐ๋ฅ ๊ตฌํ
- 8,9,10 ๋จ๊ณ ๊ธฐ๋ฏน ๊ตฌํ
- 8๋จ๊ณ ์ฌ์ฉ์ ์คํ ๋ฆฌ
- 9๋จ๊ณ ๋ฉ๋ด ํธ๋ฆฌ
- 10๋จ๊ณ ๊ฒฐ๊ณผ ํ์ธํ๊ธฐ
- RoomToken, JWT Token ์ํ ๊ด๋ฆฌ
- ๋น๋ ๋ฐ ํ๋ ์ ์ํฌ ํธํ์ฑ ์ค๋ฅ (tldraw, liveblocks, Next14)
- ๊ฐ ๋จ๊ณ ๊ธฐ๋ฏน ๊ตฌํ
- UI/UX
- git ์ค๋ฅ
- sendbird ๋ง๋ฃ๋ api ์ค๋ฅ
- ํฌํ๋ฅผ ํตํ ๋ ์ด์ค ์ปจ๋์ ์ ์กฐ์ ํด์ผํ๋ ํธ๋ฌ๋ธ
2024.09.10 ~ 2024.11.27

