Memory Leak

์›น ํŽ˜์ด์ง€ ๋‚ด์—์„œ ๋ฌด๊ฑฐ์šด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ ์‚ฌ์šฉ์‚ฌ์— ํŽ˜์ด์ง€ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณธ๋‹ค.
๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜, ๋ฉ”๋ชจ๋ฆฌ ํŒฝ์ฐฝ, ์žฆ์€ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ๋“ฑ์ด ๋Œ€ํ‘œ์ ์ธ ์›์ธ์œผ๋กœ ๊ผฝํžŒ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ํŒฝ์ฐฝ๊ณผ ๋ˆ„์ˆ˜์˜ ํŒ๋ณ„

๋‹จ์ˆœํžˆ ์‚ฌ์ดํŠธ์˜ ์ ์  ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์—ฌ๊ธฐ์„œ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ธฐ์ค€์€ RAIL ๋ชจ๋ธ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฃผ์•ˆ์ ์„ ๋‘๋Š”๊ฒƒ์ด๋‹ค.

RAIL ๋ชจ๋ธ

์‚ฌ์šฉ์ž ์ค‘์‹ฌ์˜ ์„ฑ๋Šฅ ๋ชจ๋ธ๋กœ ๋‹ค์Œ ๋„ค๊ฐ€์ง€์˜ ์ธก๋ฉด์„ ๋ฐ˜์˜ํ•œ๋‹ค.

  • Response
    • ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์€ 100ms ๋‚ด์— ์ธ์ง€ํ•ด์•ผ ํ•จ
  • Animation
    • ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ์Šคํฌ๋กค ์‹œ๊ฐ„์„ 10ms ์ด๋‚ด์— ํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•ด์•ผ ํ•จ
  • Idle
    • ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ์œ ํœด์‹œ๊ฐ„์„ ๊ทน๋Œ€ํ™” ํ•ด์•ผ ํ•จ
  • Load
    • ๋Œ€ํ™”ํ˜• ์ฝ˜ํ…์ธ ์˜ ๊ฒฝ์šฐ 1000ms ์ด๋‚ด์— ์ „๋‹ฌํ•ด์•ผ ํ•จ

๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์˜ˆ๋ฐฉ ๋ฐ ๋ถ„์„

  • ํฌ๋กฌ (Chrome) ์˜ ์ž‘์—… ๊ด€๋ฆฌ์ž๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง
    • ํƒ€์ž„๋ผ์ธ (Timeline) ๊ธฐ๋ก์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์˜ ์‹œ๊ฐํ™”
    • ํž™ ์Šค๋ƒ…์ƒท์œผ๋กœ ๋ถ„๋ฆฌ๋œ DOM ํŠธ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์˜ ๋ฐœ๊ฒฌ
    • Javascript ํž™ (Heap) ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํŒŒ์•… (Allocation Timeline)
    • ํ•จ์ˆ˜๋ณ„ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๊ด€์ธก
    • ์žฆ์€ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ๊ด€์ธก

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  • ํฌ๋กฌ ์ž‘์—…๊ด€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์ธ ๊ฐ€๋Šฅ
  • ์‹œ๊ฐ„์˜ ํ๋ฆ„์— ๋”ฐ๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ํƒ€์ž„๋ผ์ธ์œผ๋กœ ๊ธฐ๋กํ•˜์—ฌ ์‹œ๊ฐํ™”ํ•œ๋‹ค.
  • ๋ถ„๋ฆฌ๋œ DOM ํŠธ๋ฆฌ (์ผ๋ฐ˜์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์›์ธ) ์„ ํž™ ์Šค๋ƒ…์ƒท์œผ๋กœ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • JS ํž™์— ์ƒˆ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋  ๋•Œ ํ• ๋‹น ํƒ€์ž„๋ผ์ธ ๊ธฐ๋ก์„ ํ™•์ธํ•˜์—ฌ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

Chrome Heap Snapshot

Google Chrome Browser ์—์„œ ์ œ๊ณต๋˜๋Š” ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ Heap Snapshot ์„ ์ฐ์œผ๋ฉฐ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ทฐ ์„ ํƒ๊ธฐ๋ฅผ ํ†ตํ•œ ๋ถ„์„ ํ™˜๊ฒฝ์ด ์ œ๊ณต๋œ๋‹ค.

  • Summary View
    • ์ƒ์„ฑ์ž ์ด๋ฆ„์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”๋œ ๊ฐ์ฒด๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
    • ์ƒ์„ฑ์ž ๊ธฐ์ค€์œผ๋กœ ๊ฐ๊ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์œผ๋กœ ๊ฐ์ฒด ์ถ”์ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • DOM ๋ˆ„์ˆ˜ ์ถ”์ ์— ์œ ์šฉํ•˜๋‹ค.
  • Comparison View
    • ๋‘ ์Šค๋ƒ…์ƒท๊ฐ„์˜ ์ฐจ์ด์ ์„ ํ‘œ์‹œํ•œ๋‹ค.
    • ๋‘๊ฐœ ํ˜น์€ ์ž‘์—… ์ด์ „๊ณผ ์ดํ›„์˜ ์Šค๋ƒ…์ƒท ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๋น„์›Œ์ง„ ๋ฉ”๋ชจ๋ฆฌ ๋ธํƒ€์™€ ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ๊ฒ€์‚ฌํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์กด์žฌ ์›์ธ๊ณผ ์ด์œ ๋ฅผ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Containment View
    • Heap Content ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ์ข€๋” ์ž์„ธํžˆ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ถ€ํ„ฐ ์ฐธ์กฐ๋œ ๊ฐ์ฒด๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
    • ํด๋กœ์ ธ ๋ถ„์„์ด ๊ฐ€๋Šฅํ•˜๊ณ  ๊ฐ์ฒด๋ฅผ ์‹ฌ์ธต์ ์œผ๋กœ ํƒ์ƒ‰ ๋ฐ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Dominators View
    • ๋„๋ฏธ๋„ค์ดํ„ฐ ํŠธ๋ฆฌ๋ฅผ ํ‘œ์‹œํ•˜์—ฌ ๋ˆ„์  ์ง€์ ์„ ์ฐพ๋Š”๋ฐ ์œ ์šฉํ•˜๋‹ค.
    • ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ์˜ˆ์ƒ์น˜ ์•Š๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ˜น์€ ์‚ญ์ œ/๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์ด ๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.