๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

WEB

[ WEB ] ์›น ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•

 

 

 

์›น ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์—์„œ๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ๊ผญ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. 

์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๋Š๋ฆฐ ๋กœ๋”ฉ ์†๋„์™€ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๋Š” ๋ถˆํ•„์š”ํ•œ ์ž์› ๋‚ญ๋น„๋Š” ์‚ฌ์šฉ์ž๋กœ ํ•˜์—ฌ๊ธˆ ์ข‹์ง€ ์•Š์€ ๊ฒฝํ—˜์„ ๋‚จ๊ธฐ๊ณ , ์ด๋Ÿฐ ๊ฒฝํ—˜์€ ์‚ฌ์šฉ์ž๋กœ ํ•˜์—ฌ๊ธˆ ์„œ๋น„์Šค๋ฅผ ์ดํƒˆํ•˜๊ฒŒ๋” ๋งŒ๋“œ๋Š” ์ฃผ์š” ์›์ธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์›น ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

 

 


 

 

 


1. ์ดˆ๊ธฐ ๋กœ๋”ฉ ์ตœ์ ํ™”

์ฝ”๋“œ ๋ถ„ํ•  (Code Splitting): ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ์ฒญํฌ๋กœ ๋‚˜๋ˆ„์–ด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋กœ๋“œํ•œ๋‹ค. Webpack, Rollup ๋“ฑ์˜ ๋ฒˆ๋“ค๋Ÿฌ์—์„œ dynamic import๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ถ€๋ถ„์—์„œ๋งŒ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

 


Lazy Loading: ์ด๋ฏธ์ง€๋‚˜ ๋น„๋””์˜ค ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•„์š”ํ•  ๋•Œ ๋กœ๋“œํ•œ๋‹ค. ํ•„์š”ํ•˜์ง€ ์•Š์€ ํŽ˜์ด์ง€์—์„œ๋Š” ๋กœ๋“œ๋˜์ง€ ์•Š์œผ๋ฉฐ, `loading="lazy"` ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ Intersection Observer API๋ฅผ ํ™œ์šฉํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ๋ทฐํฌํŠธ๋กœ ์ด๋™(ํฌ์ปค์‹ฑ)ํ•˜๊ธฐ ์ „๊นŒ์ง€ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ๋กœ๋“œ๋ฅผ ์ค„์ธ๋‹ค.

 


Tree Shaking: ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ๋ฒˆ๋“ค ํฌ๊ธฐ๋ฅผ ์ค„์ธ๋‹ค. ES6 ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋ฒˆ๋“ค๋Ÿฌ ์„ค์ •์—์„œ tree shaking์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋Š” ๋ฒˆ๋“ค์— ํฌํ•จ์‹œํ‚ค์ง€ ์•Š๋„๋ก ํ•˜์—ฌ ๋ฒˆ๋“ค ํŒŒ์ผ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

 


2. ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ์ตœ์ ํ™”

DOM ์กฐ์ž‘ ์ตœ์†Œํ™”: DOM ์—…๋ฐ์ดํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ € ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ ์ตœ์†Œํ™”๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. Virtual DOM์„ ์‚ฌ์šฉํ•˜๋Š” React ๋“ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ DOM ๋ณ€๊ฒฝ์„ batch๋กœ ๋ฌถ์–ด์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ DOM์กฐ์ž‘์„ ์ตœ์†Œํ™” ํ•˜๋Š” ์ „๋žต์„ ํ†ตํ•ด DOM์—…๋ฐ์ดํŠธ๋กœ ์ธํ•œ ์„ฑ๋Šฅ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•ด์•ผํ•œ๋‹ค.

 


Debounce์™€ Throttle ์‚ฌ์šฉ: ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ด๋ฒคํŠธ(์Šคํฌ๋กค, ์ž…๋ ฅ ๋“ฑ)์˜ ๊ณผ๋„ํ•œ ํ˜ธ์ถœ์„ ์ œํ•œํ•œ๋‹ค. Debounce๋Š” ๋‹ค์ค‘ ์ด๋ฒคํŠธ๊ฐ€ ๊ฐ์ง€๋  ๋•Œ ๋งˆ์ง€๋ง‰ ์ด๋ฒคํŠธ๋ฅผ 1ํšŒ๋งŒ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๊ณ , Throttle์€ ์ผ์ • ๊ธฐ๊ฐ„(์‹œ๊ฐ„)์•ˆ์— ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ๋ญ‰์ณ์„œ ๋ณด๋‚ด๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค

 

 

 


3. ๋„คํŠธ์›Œํฌ ์ตœ์ ํ™”

๋ฆฌ์†Œ์Šค ์••์ถ•: Gzip์ด๋‚˜ Brotli๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „๋‹ฌ๋˜๋Š” ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ธ๋‹ค. ์„œ๋ฒ„์—์„œ ์••์ถ• ์„ค์ •์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•œ๋‹ค.

CDN(Content Delivery Network) ์‚ฌ์šฉ: ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ๋ถ„์‚ฐ๋œ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์™€ ๊ฐ€๊นŒ์šด ์„œ๋ฒ„์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

HTTP/2์™€ HTTP/3 ์‚ฌ์šฉ: ๋‹ค์ค‘ ์š”์ฒญ์„ ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ์—์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ๋ณ‘๋ชฉ์„ ์ค„์ธ๋‹ค.

 

 

 


4. ์ด๋ฏธ์ง€ ์ตœ์ ํ™”

์ด๋ฏธ์ง€ ํฌ๋งท ์ตœ์ ํ™”: WebP, AVIF์™€ ๊ฐ™์€ ์ตœ์‹  ์ด๋ฏธ์ง€ ํฌ๋งท์„ ์‚ฌ์šฉํ•˜๊ณ  ์ด๋ฏธ์ง€ ์ตœ์ ํ™” ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•ด ์šฉ๋Ÿ‰์„ ์ค„์ธ๋‹ค.

Responsive Images ์‚ฌ์šฉ: ์‚ฌ์šฉ์ž ๋””๋ฐ”์ด์Šค์— ์ ํ•ฉํ•œ ํฌ๊ธฐ์˜ ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ณตํ•œ๋‹ค. srcset๊ณผ sizes ์†์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ™”๋ฉด ํฌ๊ธฐ์— ๋Œ€์‘ํ•œ๋‹ค.

5. ๋กœ๋”ฉ ์†๋„ ์ธก์ •๊ณผ ๋ชจ๋‹ˆํ„ฐ๋ง

Lighthouse: Chrome DevTools์—์„œ ์„ฑ๋Šฅ ์ ์ˆ˜๋ฅผ ์ธก์ •ํ•˜๊ณ  ๊ฐœ์„ ํ•ด์•ผํ•  ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๋ฐฉํ–ฅ์„ ํ™•์ธํ•œ๋‹ค.

Web Vitals: ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ง€ํ‘œ(LCP, FID, CLS)๋ฅผ ๋ถ„์„ํ•˜๊ณ  Google Analytics ๋˜๋Š” Web Vitals ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค.

Real User Monitoring(RUM): ์‹ค์ œ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ๊ทธ์— ๋งž์ถฐ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค. Datadog, New Relic๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 



๊ฒฐ๋ก 

์›น ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ์„ฑ๊ณผ๋ฅผ ๋†’์ด๋Š” ์ค‘์š”ํ•œ ์ž‘์—…์ด๋‹ค. ์œ„์—์„œ ์†Œ๊ฐœํ•œ ๋ฐฉ๋ฒ•๋“ค์„ ํ•˜๋‚˜์”ฉ ์ ์šฉํ•ด ๋ณด๊ณ  ์‹ค์ œ ์†๋„ ์ธก์ • ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง๋“ฑ์„ ํ†ตํ•ด ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค์— ๋งž๋Š” ํšจ์œจ์ ์ด๊ณ  ๋น ๋ฅธ ์›น ์„œ๋น„์Šค๋ฅผ ๊ณ ๋ฏผํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.