๐Ÿ‘จโ€๐Ÿ’ป Seungineer's GitHub Contribution

๐Ÿงญ KAIST JUNGLE/HandTris

[HandTris] #9. ๊ฒŒ์ž„๋‹ต๊ฒŒ ์ดํŽ™ํŠธ๋ฅผ ๋„ฃ์–ด ๋ณด์ž! - (์† ๋™์ž‘์œผ๋กœ ํ•˜๋Š” ์˜จ๋ผ์ธ ์›น ํ…ŒํŠธ๋ฆฌ์Šค ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ)

seungineer = seungwoo + engineer 2024. 7. 28. 02:24

์ž์ž˜ํ•œ ๋ฒ„๊ทธ๋Š” ๊ณ„์†ํ•ด์„œ ๋ฐœ๊ฒฌ๋˜๊ณ  ์žˆ์ง€๋งŒ, ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ๋ชจ๋‘ ๊ตฌํ˜„์ด ๋œ ์ƒํƒœ์—์„œ ํ”„๋กœ์ ํŠธ์˜ ์™„์„ฑ๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ดํŽ™ํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. ๊ฐœ๋ฐœํ•  ๋•Œ ์ž์ฃผ ์ฐธ๊ณ ํ•œ Tetri.io์˜ ๋ธ”๋Ÿญ ํ•œ ์ค„์„ ์™„์„ฑ์‹œ์ผœ ๊นจํŠธ๋ฆด ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ดํŽ™ํŠธ์˜ ๋Š๋‚Œ์ด ์ข‹์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Tetri.io์˜ ๋ธ”๋Ÿญ์ด ๊นจ์ง€๋Š” ์ดํŽ™ํŠธ

์œ„ ์ด๋ฏธ์ง€๋Š” Tetri.io์ด๋‹ค. ๋ธ”๋Ÿญ์ด ํ•œ ์ค„ ์™„์„ฑ๋˜๋ฉด, ์•„๋ž˜๋กœ Board๊ฐ€ ์‚ด์ง ๋‚ด๋ ค๊ฐ€๋ฉฐ ๋ธ”๋Ÿญ์ด ๊นจ์ง€๋Š” ๋“ฏํ•œ ์ดํŽ™ํŠธ๊ฐ€ ๋ฐœ์ƒํ•จ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. HandTris์—๋Š” ํ•œ ์ค„์ด ์™„์„ฑ๋์„ ๋•Œ Board๊ฐ€ ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๋Š” ํšจ๊ณผ๋Š” CSS์˜ transform๊ณผ keyframes์œผ๋กœ ๊ตฌํ˜„์ด ๋˜์–ด ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ธ”๋Ÿญ์ด ๊นจ์ง€๋Š” ๋“ฏํ•œ ํšจ๊ณผ๋ฅผ ๋ธ”๋Ÿญ ๊ณต๊ฒฉ์„ ๋ฐ›์„ ๋•Œ ์ ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ณต๊ฒฉ๋ฐ›์•˜๋‹ค๋Š” ํ‘œ์‹œ๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋Š” ํ”ผ๋“œ๋ฐฑ๋„ ์ตœ์ข… ๋ฐœํ‘œ ์ดํ›„ ์šด์˜์ง„๊ป˜ ๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Particles.js(tsParticles)

npm tsparticles

์ž…์ž ํ˜•ํƒœ๋กœ ๋ธ”๋Ÿญ์ด ๊นจ์ง€๋Š”๋“ฏํ•œ ์ดํŽ™ํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ฒ˜์Œ์—๋Š” Particles.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‹œ๋„ํ–ˆ๋‹ค. ์›น ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ธ Next.js14 ๋ฒ„์ „๊ณผ ํ˜ธํ™˜์ด ๋˜์ง€ ์•Š์•„์„œ์ธ์ง€๋Š” ๋ชฐ๋ผ๋„ ์–ด๋–ค ํšจ๊ณผ๋„ ์ ์šฉ๋˜์ง€ ์•Š์•˜๋‹ค. ์ดํ›„ Typescript๋ฅผ ์ง€์›ํ•˜๋Š” tsparticles๋ฅผ ์‹œ๋„ํ•ด ๋ณด์•˜๋‹ค. ์ตœ๊ทผ๊นŒ์ง€๋„ ์—…๋ฐ์ดํŠธ๋˜๊ณ  ์žˆ์—ˆ๊ธฐ์— ์‚ฌ์šฉ๊ฐ€๋Šฅํ•  ์ค„๋กœ ๊ธฐ๋Œ€ํ–ˆ์œผ๋‚˜ ์—ฌ์ „ํžˆ ๋™์ž‘ํ•˜์ง€ ์•Š์•˜๋‹ค. ์ดํŽ™ํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํƒ€์ด๋ฐ์— ๊ฒ€์€์ƒ‰ ํ™”๋ฉด๋งŒ ๋ Œ๋”๋ง ๋˜์—ˆ๋‹ค๊ฐ€ ์‚ฌ๋ผ์กŒ๋‹ค.

react-confetti

์ดํŽ™ํŠธ๊ฐ€ ์™œ ์ ์šฉ๋˜์ง€ ์•Š๋Š”์ง€ ์›์ธ์„ ์ฐพ์•„๋ณผ ์‹œ๊ฐ„์ด ์—†์—ˆ๊ธฐ์— ๋‹ค๋ฅธ ์ดํŽ™ํŠธ๋ฅ˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ…Œ์ŠคํŠธํ•ด๋ณด๊ธฐ๋กœ ํ•˜์˜€๋‹ค. ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค๊ณ  ์•Œ๋ ค์ง„ ์ดํŽ™ํŠธ์ธ react-confetti๋Š” ์˜๋„๋Œ€๋กœ ์ž‘๋™ํ•˜์˜€๋‹ค. ์ด๋Š” ๋นต๋น ๋ ˆ๊ฐ€ ๋ธŒ๋ผ์šฐ์ € ์ƒ๋‹จ์—์„œ ํ•˜๋‹จ์œผ๋กœ ํ๋ฅด๋Š” ํšจ๊ณผ์ด๋‹ค. ๋ธ”๋Ÿญ์ด ๊นจ์ง€๋Š” ํšจ๊ณผ๋ฅผ ์ฃผ๊ธฐ์—๋Š” ์–ด๋ ค์› ๋‹ค.

react-confetti-explosion

Sample, react-confetti-explosion github

 

npm ์‚ฌ์ดํŠธ์—์„œ react-confetti ๋ณ€ํ˜• ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐพ์•„๋ณด๋˜ ์ค‘ react-confetti-explosion ๋ฒ„์ „์ด ์žˆ์Œ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฆ„๋Œ€๋กœ explosion ํ•˜๋Š” ํšจ๊ณผ๋ฅผ ์ค„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. react-confetti ์ดํŽ™ํŠธ๋ฅผ ์ ์šฉ์‹œ์ผฐ๋˜ ๋ฐฉ์‹๋Œ€๋กœ explosion ๋ฒ„์ „์„ ์ ์šฉํ•ด ๋ณด๋‹ˆ ์˜๋„๋Œ€๋กœ ์ž˜ ์ž‘๋™ํ•˜์˜€๋‹ค.

Parameter ์กฐ์ •

Parameter์˜ default ์„ค์ •์œผ๋กœ๋Š” effect๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ง€์ ์—์„œ ๋นต๋น ๋ ˆ๋Š” ๋ธŒ๋ผ์šฐ์ € ํ•˜๋‹จ๊นŒ์ง€ ํ๋ฅด๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•Œ๋ก๋‹ฌ๋กํ•œ ์ƒ‰์œผ๋กœ ์กฐ๊ฐ์ด ๊ฝค ๋งŽ์ด ํฉ์–ด์ง„๋‹ค. ๋‹คํ–‰ํžˆ๋„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•˜์˜€๋‹ค.

Optional Props, react-confetti-explosion github

                         <div>
                          <ConfettiExplosion
                            force={0.25}
                            duration={1300}
                            particleCount={25}
                            particleSize={7}
                            colors={[
                              "#c91212",
                              "#ec9898",
                              "#f4d4d4",
                              "#910909",
                            ]}
                            width={400}
                            height={"-30px"}
                          />
                        </div>

์ปฌ๋Ÿฌ ์ฝ”๋“œ ์ฐธ๊ณ 

์ด๋Š” ์ƒ๋Œ€๋ฐฉ์—๊ฒŒ ๊ณต๊ฒฉ์„ ๋ฐ›์•˜์„ ๋•Œ ๋‚˜์˜ Board์— ๋ฐœ์ƒํ•˜๋Š” ์ดํŽ™ํŠธ์ด๋‹ค. ๋ธ”๋Ÿญ์ด ์˜ฌ๋ผ์˜ด๊ณผ ๋™์‹œ์— ๋ถ‰์€ ๊ณ„์—ด์˜ ์กฐ๊ฐ๋“ค์ด ํ„ฐ์ง€๋Š” ๋“ฏํ•œ ํšจ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

                      <div>
                        <ConfettiExplosion
                          force={0.25}
                          duration={1300}
                          particleCount={25}
                          particleSize={7}
                          colors={["#c8c8c8", "#e3e1e1", "#f7f7f7", "#878787"]}
                          width={400}
                          height={"-30px"}
                        />
                      </div>

์ปฌ๋Ÿฌ ์ฝ”๋“œ ์ฐธ๊ณ 

์ด๋Š” ์ƒ๋Œ€๋ฐฉ์„ ๊ณต๊ฒฉํ–ˆ์„ ๋•Œ ์ƒ๋Œ€๋ฐฉ์˜ Board์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ดํŽ™ํŠธ์ด๋‹ค. ๋ธ”๋Ÿญ์ด ์˜ฌ๋ผ์˜ด๊ณผ ๋™์‹œ์— ํฐ์ƒ‰ ๊ณ„์—ด์˜ ์กฐ๊ฐ๋“ค์ด ํ„ฐ์ง€๋Š” ๋“ฏํ•œ ํšจ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๊ฒฐ๊ณผ

์™ผ์ชฝ ํ…ŒํŠธ๋ฆฌ์Šค Board๋Š” ํ”Œ๋ ˆ์ด์–ด1์ด ๋ณด๋Š” ํ”Œ๋ ˆ์ด์–ด2์˜ ํ…ŒํŠธ๋ฆฌ์Šค Board์ด๋‹ค. ์˜ค๋ฅธ์ชฝ ํ…ŒํŠธ๋ฆฌ์Šค Board๋Š” ํ”Œ๋ ˆ์ด์–ด2์˜ ํ…ŒํŠธ๋ฆฌ์Šค Board์ด๋‹ค. ์˜ค๋ฅธ์ชฝ ํ…ŒํŠธ๋ฆฌ์Šค Board๋ฅผ ๋ณด๋ฉด ํ”Œ๋ ˆ์ด์–ด2๊ฐ€ ๊ณต๊ฒฉ์„ ๋ฐ›์€ ์ƒํ™ฉ์ด๊ธฐ์— ๋ถ‰์€ ๊ณ„์—ด์˜ ์กฐ๊ฐ์ด ํ„ฐ์ง€๋Š”๋“ฏํ•œ ํšจ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์™ผ์ชฝ ํ…ŒํŠธ๋ฆฌ์Šค Board๋ฅผ ๋ณด๋ฉด ํ”Œ๋ ˆ์ด์–ด1์ด ํ”Œ๋ ˆ์ด์–ด2๋ฅผ ๊ณต๊ฒฉํ–ˆ๊ธฐ์— ํฐ์ƒ‰ ๊ณ„์—ด์˜ ์กฐ๊ฐ์ด ํ„ฐ์ง€๋Š”๋“ฏํ•œ ํšจ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰, ํ”Œ๋ ˆ์ด์–ด ์ž…์žฅ์—์„œ ์ž์‹ ์ด ๊ณต๊ฒฉ๋ฐ›์œผ๋ฉด ๋ถ‰์€์ƒ‰, ๊ณต๊ฒฉ์„ ๊ฐ€ํ•  ๊ฒฝ์šฐ ํฐ์ƒ‰์˜ ์กฐ๊ฐ์ด ํ„ฐ์ง€๋Š”๋“ฏํ•œ ํšจ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


์‹œ์—ฐ์„ ํ•จ์— ์žˆ์–ด์„œ ์ง€๋Œ€ํ•œ ์˜ํ–ฅ์„ ์ฃผ๋Š” ๋ถ€๋ถ„์€ ์•„๋‹ˆ์ง€๋งŒ ์ดํŽ™ํŠธ๊ฐ€ ์žˆ๊ณ , ์—†๊ณ ์˜ ์ฐจ์ด๋Š” ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ณ , ๊ฐœ๋ฐœ์ž ์ž๊ธฐ ๋งŒ์กฑ์„ ์œ„ํ•ด(?) ์ถ”๊ฐ€ํ•˜์˜€๋‹ค. ์˜๋„ํ•œ ๋Œ€๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ž˜ ๋ณ€ํ˜•ํ•˜์—ฌ ์›ํ•˜๋Š” ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์–ด์„œ ๋ฟŒ๋“ฏํ•˜์˜€๋‹ค. ๐Ÿ˜†

 

'๐Ÿงญ KAIST JUNGLE > HandTris' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[HandTris] #8. WebSocket์ด ์ค‘๋ณต ์—ฐ๊ฒฐ๋œ ๊ฒƒ ๊ฐ™์•„์š” ๐Ÿค” - (์† ๋™์ž‘์œผ๋กœ ํ•˜๋Š” ์˜จ๋ผ์ธ ์›น ํ…ŒํŠธ๋ฆฌ์Šค ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ)  (4) 2024.07.23
[HandTris] #7. ์ƒ๋Œ€ ํ™”๋ฉด์— ๋ธ”๋Ÿญ ์ž”์ƒ์ด ๋‚จ๋Š” ์ด์Šˆ ํ•ด๊ฒฐ - (์† ๋™์ž‘์œผ๋กœ ํ•˜๋Š” ์˜จ๋ผ์ธ ์›น ํ…ŒํŠธ๋ฆฌ์Šค ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ)  (0) 2024.07.12
[HandTris] #6. Failed to send message to ExecutorSubscribableChannel[clientInboundChannel] - (์† ๋™์ž‘์œผ๋กœ ํ•˜๋Š” ์˜จ๋ผ์ธ ์›น ํ…ŒํŠธ๋ฆฌ์Šค ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ)  (0) 2024.07.08
[HandTris] #5. .env ์ ์šฉ์ด ์•ˆ ๋  ๋•Œ.. - (์† ๋™์ž‘์œผ๋กœ ํ•˜๋Š” ์˜จ๋ผ์ธ ์›น ํ…ŒํŠธ๋ฆฌ์Šค ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ)  (0) 2024.07.04
[HandTris] #4. ์›น์บ  ํ™”๋ฉด์„ ๊ฐ€๋ ค ๋ณด์ž - (์† ๋™์ž‘์œผ๋กœ ํ•˜๋Š” ์˜จ๋ผ์ธ ์›น ํ…ŒํŠธ๋ฆฌ์Šค ๊ฒŒ์ž„ ๋งŒ๋“ค๊ธฐ)  (0) 2024.06.30