๐Ÿš€ ์ œ7 ์šฐ์ฃผ QA - FRONTENDBOOTCAMP-13th/JS-07-7zzang-Arcade GitHub Wiki

1๏ธโƒฃ ๊ธฐ๋ณธ ์ •๋ณด

ํ•ญ๋ชฉ ๋‚ด์šฉ
ํ”„๋กœ์ ํŠธ๋ช… ๐Ÿ•น๏ธ 7์งฑ ์˜ค๋ฝ์‹ค - ์ œ7 ์šฐ์ฃผ
ํ…Œ์ŠคํŠธ ๊ธฐ๊ฐ„ 2025.05.20 ~ 2025.05.22
๋‹ด๋‹น์ž ๋ฐ ํŒ€์› ํ™ฉ์œ ๋นˆ(PL)
ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ Windows 11 / macOS Sonoma Chrome 124.0, Edge, Safari ๋ฐ์Šคํฌํƒ‘ / ๋…ธํŠธ๋ถ (FHD ๊ธฐ์ค€ 1920ร—1080)

2๏ธโƒฃ ํ…Œ์ŠคํŠธ ๊ฐœ์š”

  • ํ…Œ์ŠคํŠธ ๋ชฉ์ 
    • ๊ฒŒ์ž„ ๋กœ์ง ๋ฐ UI ๋™์ž‘ ๊ฒ€์ฆ
    • ์ถฉ๋Œ ์ฒ˜๋ฆฌ(ํ”Œ๋ ˆ์ด์–ด ์ด์•Œ โ†” ์ , ํ”Œ๋ ˆ์ด์–ด โ†” ์  ์ด์•Œ, ํ”Œ๋ ˆ์ด์–ด โ†” ์  ๋ณธ์ฒด) ๊ฒ€์ฆ
    • ์ ์ˆ˜ ์ €์žฅ(localStorage & Firebase ์—ฐ๋™) ๊ธฐ๋Šฅ ํ™•์ธ
    • BGM on/off ๋ฐ ESC ํ‚ค ์ œ์–ด ๊ฒ€์ฆ
  • ํ…Œ์ŠคํŠธ ๋ฒ”์œ„
    • ์ธํŠธ๋กœ ํ™”๋ฉด, How-Play ํŒ์—…, ๊ฒŒ์ž„ ํ™”๋ฉด, ํŒ์—…(๊ฒŒ์ž„์˜ค๋ฒ„, ์ ์ˆ˜ ์ €์žฅ, ์ ์ˆ˜ ๋ณด๊ธฐ)
    • ์ถฉ๋Œ ์ฒ˜๋ฆฌ
      • ํ”Œ๋ ˆ์ด์–ด ์ด์•Œ โ†” ์ผ๋ฐ˜ ์ 
      • ํ”Œ๋ ˆ์ด์–ด โ†” ์  ๋ณธ์ฒด
      • ํ”Œ๋ ˆ์ด์–ด ์ด์•Œ โ†” ๋ณด์Šค
      • ์ (๋ฐ ๋ณด์Šค) ์ด์•Œ โ†” ํ”Œ๋ ˆ์ด์–ด
    • ๊ฐ ์ถฉ๋Œ ์‹œ ํญ๋ฐœ ์ดํŽ™ํŠธ, ์ ์ˆ˜/๋ชฉ์ˆจ ๋ณ€ํ™”, ๋ฌด์  ์ƒํƒœ ๋™์ž‘ ํ™•์ธ
    • ํ™”๋ฉด ๋ฐ–์œผ๋กœ ๋‚˜๊ฐ„ ์ด์•Œ ์ž๋™ ์ œ๊ฑฐ
    • ํญ๋ฐœ ์ดํŽ™ํŠธ์˜ ์ž๋™ ์‚ญ์ œ
  • ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•
    • ์ˆ˜๋™ ํ…Œ์ŠคํŠธ ์ค‘์‹ฌ (ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ํฌํ•จ)
    • ๊ฐ ์ถฉ๋Œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„๋กœ ํ”Œ๋ ˆ์ด์–ด ๋ฐ ์ /๋ณด์Šค ์œ„์น˜ ๊ณ ์ • ํ›„ ๋ฐ˜๋ณต ํ”Œ๋ ˆ์ด
    • Console ๋กœ๊ทธ ํ™•์ธ(spawnExplosion, Player.explode(), score ๋ณ€ํ™” ๋“ฑ)
    • Firebase ์ƒ์œ„ 5์  ๋žญํ‚น ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
๐Ÿ” ์ฃผ์š” ์ด์Šˆ ๋ชฉ๋ก
ID ํ•ญ๋ชฉ ์žฌํ˜„ ์กฐ๊ฑด ์‹ค์ œ ๊ฒฐ๊ณผ ์˜ˆ์ƒ ๊ฒฐ๊ณผ ์‹ฌ๊ฐ๋„
BUG-01 ์ด์•Œ ์œ„์น˜ ์žก๊ธฐ ํ”Œ๋ ˆ์ด์–ด ์œ„์น˜ ์ค‘์•™์œผ๋กœ ์ด์•Œ์ด ๋ฐœ์‚ฌ const bulletX = this.x + this.width / 2- ๋„“์ด; ์ด์•Œ์ด ์ค‘์•™์œผ๋กœ ์ž˜ ๊ฐ„๋‹ค! Minor
BUG-02 object๊ฐ€ ์ค‘๋ณต ์ƒ์„ฑ๋˜๋Š” ๋ฌธ์ œ pushState โ†’ popstate ๋กœ์ง์—์„œ ๋งค๋ฒˆ ๋ฌด์กฐ๊ฑด ์ƒˆ <object>๋งŒ ์ƒ์„ฑ currentObj.hidden = true; currentObj.style.display = 'none'; ์˜ค๋ธŒ์ ํŠธ ์ค‘๋ณต์„ ์ž˜ ๋ง‰์•˜๋‹ค. Minor

3๏ธโƒฃ ๊ฒฐ๋ก  ๋ฐ ๊ฐœ์„  ์‚ฌํ•ญ

  • ์ฃผ์š” ๋ฌธ์ œ ์š”์•ฝ
    • ์ด์•Œ ์œ„์น˜ ๋ณด์ • ์˜ค๋ฅ˜ (BUG-01)
      • ํ”Œ๋ ˆ์ด์–ด ์ด์•Œ ๋ฐœ์‚ฌ ์‹œ X์ถ• ๊ธฐ์ค€ ์œ„์น˜ ๊ณ„์‚ฐ์‹์— ์˜คํƒ€๊ฐ€ ์žˆ์–ด, ์ค‘์•™์ด ์•„๋‹Œ ์ขŒ์ธก์œผ๋กœ ์น˜์šฐ์ณ ๋ฐœ์‚ฌ๋˜๋Š” ํ˜„์ƒ ๋ฐœ์ƒ
    • ์˜ค๋ธŒ์ ํŠธ ์ค‘๋ณต ์ƒ์„ฑ (BUG-02)
      • popstate ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์—์„œ ๊ธฐ์กด <object> ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ˆจ๊ธฐ๊ธฐ๋งŒ ํ•˜๊ณ , ๋งค ์ด๋ฒคํŠธ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•ด ๋ˆ„์ ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ
  • ํ•ด๊ฒฐ๋œ ์ด์Šˆ
    • ์ด์•Œ ์œ„์น˜ ์ •๋ ฌ
      • ๋ฐœ์‚ฌ ์œ„์น˜ ๊ณ„์‚ฐ์‹์„ this.x + (this.width / 2) - (bulletWidth / 2) ํ˜•ํƒœ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ํ”Œ๋ ˆ์ด์–ด ์ค‘์•™์—์„œ ์ •ํ™•ํžˆ ๋ฐœ์‚ฌ๋˜๋„๋ก ๋ณด์ •
    • ์ค‘๋ณต ์˜ค๋ธŒ์ ํŠธ ๋ฐฉ์ง€
      • popstate ํ•ธ๋“ค๋Ÿฌ ์ง„์ž… ์‹œ ๊ธฐ์กด currentObj ์œ ๋ฌด๋ฅผ ์ฒดํฌํ•˜๊ณ , ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ์žฌ์ƒ์„ฑ ๋กœ์ง์„ ์Šคํ‚ตํ•˜๋„๋ก ์กฐ๊ฑด๋ฌธ ์ถ”๊ฐ€
  • ์ถ”๊ฐ€ ํ…Œ์ŠคํŠธ ํ•„์š” ์—ฌ๋ถ€
    • ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง• ๊ฒ€์ฆ
      • ์ˆ˜์ •๋œ ์ถฉ๋Œ ์ฒ˜๋ฆฌ ๋ฐ ์˜ค๋ธŒ์ ํŠธ ๋กœ์ง์ด Edge, Safari ๋“ฑ ํƒ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์ •์ƒ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ
    • ์ŠคํŠธ๋ ˆ์Šค ํ…Œ์ŠคํŠธ
      • ์งง์€ ๊ฐ„๊ฒฉ์œผ๋กœ ๋น ๋ฅด๊ฒŒ pushState/popstate๋ฅผ ๋ฐ˜๋ณต ํ˜ธ์ถœํ–ˆ์„ ๋•Œ๋„ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ค‘๋ณต๋˜์ง€ ์•Š๊ณ , ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์—†์ด ์•ˆ์ •์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ์ ๊ฒ€
    • Firebase ์—ฐ๋™ ์‹ ๋ขฐ์„ฑ
      • ๋„คํŠธ์›Œํฌ ์ง€์—ฐ ์‹œ์—๋„ ์ ์ˆ˜ ์ €์žฅ ๋ฐ ์กฐํšŒ๊ฐ€ ์˜ค๋ฅ˜ ์—†์ด ์ฒ˜๋ฆฌ๋˜๋Š”์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ ์žฌ๊ฒ€์ฆ
  • ํ–ฅํ›„ ๊ฐœ์„  ๋ฐฉํ–ฅ
    • ๋ชจ๋“ˆํ™” ๋ฐ ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ๊ฐ•ํ™”
      • ์ถฉ๋Œ ์ฒ˜๋ฆฌ, ์˜ค๋ธŒ์ ํŠธ ๊ด€๋ฆฌ, ์ƒํƒœ ์ „ํ™˜ ๋กœ์ง ๊ฐ๊ฐ์„ ๋ณ„๋„ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , Jest ๋“ฑ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๊ธฐ๋Šฅ๋ณ„ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ 80% ์ด์ƒ ํ™•๋ณด
    • ์ž๋™ํ™” CI/CD ํŒŒ์ดํ”„๋ผ์ธ
      • GitHub Actions ๋“ฑ์„ ๋„์ž…ํ•ด ์ฝ”๋“œ ํ‘ธ์‹œ ์‹œ ์œ ๋‹› ํ…Œ์ŠคํŠธยท๋ฆฐํŠธ ๊ฒ€์‚ฌยท๋นŒ๋“œ ๊ฒ€์ฆ์„ ์ž๋™ํ™”ํ•˜์—ฌ ํ’ˆ์งˆ ๋ณด์ฆ
โš ๏ธ **GitHub.com Fallback** โš ๏ธ