Skip to content

rigood/favorite-worldcup

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

43 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ† ์ด์ƒํ˜• ์›”๋“œ์ปต (๋‚˜๋Š”์†”๋กœ ver)


ํ™ˆ ํ™”๋ฉด ๊ฒŒ์ž„ ์ง„ํ–‰ ์ตœ์ข… ๊ฒฐ๊ณผ ์นดํ†ก ๊ณต์œ 

๐Ÿ’ป ํ”„๋กœ์ ํŠธ

  • ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ
  • ๊ธฐํš, ์ œ์ž‘: 2022๋…„ 11์›” 5์ผ ~ 9์ผ
  • ์—…๋ฐ์ดํŠธ: 2023๋…„ 4์›” 24์ผ ~ 26์ผ

๐Ÿ“Œ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ๊ฒŒ์ž„ ์ง„ํ–‰๋ฐฉ์‹ ์„ ํƒ

    • ์ด ๋ผ์šด๋“œ ์„ ํƒ (32๊ฐ•, 16๊ฐ•, 8๊ฐ•)
    • ์ถœ์—ฐ์ง„(์ด์ƒํ˜•) ์„ฑ๋ณ„ ์„ ํƒ (์—ฌ์ž, ๋‚จ์ž, ์„ฑ๋ณ„๋ฌด๊ด€)
    • ์‚ฌ์šฉ์ž ๋‹‰๋„ค์ž„ ์ž…๋ ฅ ๊ฐ€๋Šฅ



  • ์ด์ƒํ˜• ์›”๋“œ์ปต ๊ฒŒ์ž„

    • ๋‚˜๋Š”์†”๋กœ ์ถœ์—ฐ์ง„์„ ๋žœ๋ค ์ถ”์ถœํ•˜์—ฌ 1:1 ๋งค์น˜
    • ํ˜„์žฌ ๋ผ์šด๋“œ, ์ง„ํ–‰์ค‘์ธ ๋‹จ๊ณ„ ํ‘œ์‹œ



  • ์ตœ์ข… ๊ฒฐ๊ณผ ํ™•์ธ ๋ฐ ๊ณต์œ 
    • ์ด์ƒํ˜• ์ด๋ฏธ์ง€ ์ €์žฅ ๊ฐ€๋Šฅ
    • ์นด์นด์˜คํ†ก ๋งํฌ ๊ณต์œ  ๊ฐ€๋Šฅ




โœ… ์—…๋ฐ์ดํŠธ ๊ธฐ๋ก

  • ์ตœ์ข… ๊ฒฐ๊ณผ ํŽ˜์ด์ง€์— ์ƒ‰์ข…์ด ํŒŒํ‹ฐํด ํšจ๊ณผ ์ถ”๊ฐ€ (11/15 ์™„๋ฃŒ)
    • react-canvas-confetti ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ

  • ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ์†๋„ ๊ฐœ์„  (4/24 ์™„๋ฃŒ)
    • png -> jpg ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์šฉ๋Ÿ‰ ์ค„์ด๊ธฐ

  • ๋‹ค์Œ ๋ผ์šด๋“œ ์ง„์ถœ ์‹œ ํ•˜๋‹จ์— ์•Œ๋ฆผ ํ‘œ์‹œ (4/24 ์™„๋ฃŒ)
    • react-toastify๋กœ ํ† ์ŠคํŠธ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ

  • ๊ฒŒ์ž„ ์ง„ํ–‰ ๋‹จ๊ณ„ ๋ง‰๋Œ€ bar๋กœ ํ‘œํ˜„ (4/24 ์™„๋ฃŒ)

  • ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ ๊ธฐ๋Šฅ ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ ์ฒดํฌ (4/24 ์™„๋ฃŒ)
    • html-to-image๋Š” safari์—์„œ ์ด๋ฏธ์ง€ ๋ Œ๋”๋ง ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š์Œ
    • ์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ € ํ™•์ธ ํ›„ safari์—์„œ๋Š” ๋‹ค์šด๋กœ๋“œ ๋ฒ„ํŠผ์„ ์ˆจ๊น€

  • ๊ตฌ๊ธ€ ์• ๋„๋ฆฌํ‹ฑ์Šค ์ ์šฉ (4/25 ์™„๋ฃŒ)
    • ํŽ˜์ด์ง€๋ณ„ ๋ฐฉ๋ฌธ์ž์ˆ˜ ์ง‘๊ณ„
    • ์ด๋ฏธ์ง€ ์ €์žฅ, ์นดํ†ก ๊ณต์œ  ๋ฒ„ํŠผ ํด๋ฆญ ์ด๋ฒคํŠธ ์ง‘๊ณ„

  • ์„œ๋ธŒ์…‹ ํฐํŠธ ์ ์šฉํ•˜์—ฌ ์›นํฐํŠธ ์ตœ์ ํ™” (4/26 ์™„๋ฃŒ)
    • ํฐํŠธ ํŒŒ์ผ์—์„œ ๋ถˆํ•„์š”ํ•œ ๊ธ€์ž ์ œ๊ฑฐ
    • GmarketSans์ฒด ๊ธฐ์กด 869KB -> 119KB๋กœ ์šฉ๋Ÿ‰ ๊ฐ์†Œ
    • Pretendard์ฒด ๊ธฐ์กด 1,104KB -> 175KB๋กœ ์šฉ๋Ÿ‰ ๊ฐ์†Œ

๐Ÿ”จ ์‚ฌ์šฉ ๊ธฐ์ˆ 

  • React.js
  • react-router-dom
  • styled-components
  • html-to-image
  • react-canvas-confetti
  • react-ga
  • react-toastify

๐Ÿ” ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

  • ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ Radio ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ๊ฒŒ์ž„ ์ง„ํ–‰๋ฐฉ์‹์„ ์ž…๋ ฅ ๋ฐ›์Œ
  • useContext๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด ๋ผ์šด๋“œ, ์ถœ์—ฐ์ง„ ์„ฑ๋ณ„, ๋‹‰๋„ค์ž„ state๋ฅผ ์ „์—ญ์ ์œผ๋กœ ๊ด€๋ฆฌ
  • useEffect๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ผ์šด๋“œ๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ๋žœ๋ค์œผ๋กœ ํ›„๋ณด ์ถ”์ถœ
  • useState๋ฅผ ์ด์šฉํ•˜์—ฌ ํ›„๋ณด, ๋ Œ๋”๋ง ๋  ํ›„๋ณด, ์Šน์ž ๋ฐฐ์—ด์˜ state ๊ด€๋ฆฌ
  • ์นด์นด์˜คํ†ก ๊ณต์œ  API๋ฅผ ํ†ตํ•ด ๋งํฌ ๊ณต์œ  ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • html-to-image ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉํ•˜์—ฌ DOM์„ ์ด๋ฏธ์ง€๋กœ ์ €์žฅ
  • react-ga ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€๋ณ„ ๋ทฐ, ํด๋ฆญ ์ด๋ฒคํŠธ ์ง‘๊ณ„

๐Ÿš‘ ๋ฌธ์ œ ํ•ด๊ฒฐ

  • ๊นƒํ—ˆ๋ธŒ ๋ฐฐํฌํ–ˆ์œผ๋‚˜ ๋นˆ ํ™”๋ฉด๋งŒ ๋œจ๋Š” ๋ฌธ์ œ

    • ์›์ธ: BrowserRouter์— ๊ธฐ๋ณธ URL์„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์Œ
    • ํ•ด๊ฒฐ: createBrowserRouter์— basename ์ถ”๊ฐ€

  • ์„œ๋ธŒํŽ˜์ด์ง€์—์„œ ์ƒˆ๋กœ๊ณ ์นจ ํ•˜๋Š” ๊ฒฝ์šฐ 404 not found ์—๋Ÿฌ ๋ฐœ์ƒ

    • ์›์ธ: ๊นƒํ—ˆ๋ธŒ ๋ฐฐํฌ๋Š” SPA๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„๊ฐ€ index.html ์™ธ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋Š” ์ธ์‹ํ•˜์ง€ ๋ชปํ•จ
    • ํ•ด๊ฒฐ: ์„œ๋ธŒํŽ˜์ด์ง€ url์„ ๋ณ€ํ™˜ํ•˜์—ฌ index.html๋กœ redirect ์‹œ์ผœ์ฃผ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ 404.html์— ์ถ”๊ฐ€

  • html-to-image ์„ ํ†ตํ•œ ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ ์†๋„๊ฐ€ ๋„ˆ๋ฌด ๋Š๋ฆผ



    • ์›์ธ: ์ด๋ฏธ์ง€๋กœ ๋ณ€ํ™˜ํ•  DOM์— CSS๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์ ํŠธ ๋‚ด ๋ชจ๋“  ์›นํฐํŠธ๋ฅผ ๋‹ค์šด๋ฐ›๊ฒŒ ๋˜๋Š”๋ฐ, CDN์„ ํ†ตํ•ด ํ•ด๋‹น ํฐํŠธ๋“ค์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์˜ค๋žœ ์‹œ๊ฐ„์ด ์†Œ์š”๋จ (์•ฝ 10์ดˆ)

    • ํ•ด๊ฒฐ: ๊ธฐ๋ณธ ํฐํŠธ ์‚ฌ์šฉ (์ถ”ํ›„ ์„œ๋ธŒ์…‹ํฐํŠธ ๋‹ค์šด ๋ฐ›์•„ css ์ ์šฉ ์˜ˆ์ •)



  • Winner ํŽ˜์ด์ง€์—์„œ GET ์š”์ฒญ undefined 404 ์—๋Ÿฌ ๋ฐœ์ƒ


  • ์›์ธ
    • winner ์ด๋ฏธ์ง€ GET ์š”์ฒญ์— ๋Œ€ํ•œ 404 ์—๋Ÿฌ๋กœ ํ™•์ธ๋จ
    • ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ดˆ๊ธฐ ๋ Œ๋”๋ง ๋œ ์ดํ›„์— useEffect๋ฅผ ํ†ตํ•ด winner ์ƒํƒœ๊ฐ’์„ ์„ค์ •ํ•˜๋ฏ€๋กœ, ์ฒ˜์Œ์— ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ Œ๋”๋ง ๋  ๋•Œ๋Š” winner ์ƒํƒœ๊ฐ’์ด undefined์ž„
  • ํ•ด๊ฒฐ
    • winner ๊ฐ’์ด falsy์ธ ๊ฒฝ์šฐ, ๋กœ๋”ฉ ๋ฌธ๊ตฌ๋ฅผ ๋ Œ๋”๋งํ•˜๋„๋ก ์ฝ”๋“œ ์ˆ˜์ •
    • winner ๊ฐ’์ด ์„ค์ •๋œ ์ดํ›„ GET ์š”์ฒญ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ ๋ฐœ์ƒX


  • ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ(์‚ผ์„ฑ ์ธํ„ฐ๋„ท ๋ธŒ๋ผ์šฐ์ €)์—์„œ ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋˜์ง€ ์•Š์Œ

    • ์›์ธ
      • USB ๋””๋ฒ„๊น… ํ™•์ธ ๊ฒฐ๊ณผ, ์ด๋ฏธ์ง€ ํŒŒ์ผ์€ ์ •์ƒ์ด์—ˆ์œผ๋‚˜
      • ๋ธŒ๋ผ์šฐ์ €์— ์ž๋™ ๋‹ค์šด๋กœ๋“œ ์ฐจ๋‹จ ๊ธฐ๋Šฅ์ด ์„ค์ •๋˜์–ด ์žˆ์—ˆ์Œ
    • ํ•ด๊ฒฐ: ์ž๋™ ๋‹ค์šด๋กœ๋“œ ์ฐจ๋‹จ ํ•ด์ œ ํ›„ ์ •์ƒ ๋‹ค์šด๋กœ๋“œ ํ™•์ธ

  • ๋ชจ๋ฐ”์ผ์—์„œ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ hover ์Šคํƒ€์ผ์ด ๋‚จ์•„ ์žˆ๋Š” ๋ฌธ์ œ

    • ์›์ธ: ๋ชจ๋ฐ”์ผ ๋“ฑ ํ„ฐ์น˜์Šคํฌ๋ฆฐ ํ™˜๊ฒฝ์—์„œ๋Š” ์š”์†Œ๋ฅผ ํ„ฐ์น˜ํ•œ ํ›„ ๋‹ค๋ฅธ ์š”์†Œ๋ฅผ ํ„ฐ์น˜ํ•˜๊ธฐ ์ „๊นŒ์ง€ ๊ณ„์† hover ์ƒํƒœ๊ฐ€ ์œ ์ง€๋จ
    • ํ•ด๊ฒฐ
      • ์ตœ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ„ฐ์น˜์Šคํฌ๋ฆฐ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จ(isTouchScreen)
      • useContext๋ฅผ ํ†ตํ•ด isTouchScreen ๊ฐ’์„ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ์ฐธ์กฐ
      • isTouchScreen์„ styled-component์˜ props๋กœ ์ „๋‹ฌํ•˜์—ฌ ํ„ฐ์น˜์Šคํฌ๋ฆฐ์ผ ๊ฒฝ์šฐ์—๋งŒ hover ์Šคํƒ€์ผ์„ ์ ์šฉํ•จ

About

๐Ÿ† ์ด์ƒํ˜• ์›”๋“œ์ปต (๋‚˜๋Š”์†”๋กœ ver)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published