"์šฐ๋ฆฌ ์›น์‚ฌ์ดํŠธ๋Š” ์˜ˆ์˜๊ณ  ๊ธฐ๋Šฅ๋„ ์ข‹์€๋ฐ... ์™œ ์ด๋ ‡๊ฒŒ ๋А๋ฆฌ์ง€?"

โ€• ๋ชจ๋“  ๊ฐœ๋ฐœ์ž์˜ ๊ณ ๋ฏผ

์ด ๊ธ€์€ ๋˜‘๋˜‘ํ•œ ์‚ฌ๋žŒ๋งŒ ๋ณด๋Š” ์–ด๋ ต๊ณ  ๋ณต์žกํ•œ ์ตœ์ ํ™”๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ฐ”๋กœ ์ง€๊ธˆ ๋‹น์žฅ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ์‰ฌ์šด ํŒ์„ ์•Œ๋ ค์ฃผ๋Š” ๊ธ€์ด์•ผ. ํ•จ๊ป˜ ๋”ฐ๋ผ ํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋‚ ์•„๊ฐ€๊ฒŒ ๋งŒ๋“ค์–ด๋ณผ๊นŒ? โœˆ๏ธโœจ


๐ŸŒ ์ฒซ ๋ฒˆ์งธ ์ด์•ผ๊ธฐ : ์ด๋ฏธ์ง€, ๋„ค ์ •์ฒด๊ฐ€ ๋ญ์•ผ?

์›น์‚ฌ์ดํŠธ๊ฐ€ ๋А๋ฆฐ ๊ฐ€์žฅ ํฐ ์ด์œ  ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ”๋กœ ์ด๋ฏธ์ง€์•ผ.

์˜ˆ์˜๊ฒŒ ๋ณด์ด๋ ค๊ณ  ์˜ฌ๋ฆฐ ์ด๋ฏธ์ง€๊ฐ€ ๋„ˆ๋ฌด ์ปค์„œ ๋กœ๋”ฉ์ด ๋А๋ฆฌ๋‹ค๋ฉด?
์‚ฌ์šฉ์ž๋Š” ๋„ค๊ฐ€ ์—ด์‹ฌํžˆ ๋งŒ๋“  ํŽ˜์ด์ง€๋ฅผ ๋ณด์ง€๋„ ์•Š๊ณ  ๋– ๋‚˜๋ฒ„๋ฆด๊ฑธ? ๐Ÿ˜ญ

๐Ÿ› ๏ธ ์ด๋ ‡๊ฒŒ ๊ณ ์ณ๋ณด์ž! (๊ฐ€์žฅ ์‰ฝ๊ณ  ๋น ๋ฅธ ๋ฐฉ๋ฒ•)

  • โœ… ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์ค„์ด๊ธฐ
    PNG โ†’ JPG or WebP๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ์ด๋ฏธ์ง€๋งŒ์œผ๋กœ ์†๋„๊ฐ€ ์ตœ๋Œ€ 50% ํ–ฅ์ƒ๋  ์ˆ˜ ์žˆ์–ด!
    (WebP๋ฅผ ๋ชฐ๋ž๋‹ค๊ณ ? ๊ฑฑ์ •๋งˆ, ๋ธŒ๋ผ์šฐ์ € ์ง€์›๋„ ๊ฑฐ์˜ ๋‹ค ๋ผ! ๐Ÿ‘)

  • โœ… ์ด๋ฏธ์ง€ ์••์ถ•ํ•˜๊ธฐ
    TinyPNG๋‚˜ Compressor.io์—์„œ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ๋Œ์–ด๋‹ค๊ฐ€ ๋˜์ ธ๋†“์œผ๋ฉด ๋์ด์•ผ! (๋ช‡ ์ดˆ๋งŒ์— ์••์ถ• ์™„๋ฃŒ!)

<!-- ๋ฐ”๊พธ๊ธฐ ์ „ -->
<img src="huge-image.png">

<!-- ๋ฐ”๊พผ ํ›„ -->
<img src="compressed-image.webp">

"์—์ด~ ์ด๋ฏธ์ง€ ์••์ถ•ํ•œ๋‹ค๊ณ  ์–ผ๋งˆ๋‚˜ ๋นจ๋ผ์ง€๊ฒ ์–ด?"
์ง์ ‘ ํ•ด๋ด, ๋ฐ”๋กœ ์ฒด๊ฐ๋ ๊ฑธ? ๐Ÿ˜


๐Ÿšฆ ๋‘ ๋ฒˆ์งธ ์ด์•ผ๊ธฐ : CDN์˜ ๋งˆ๋ฒ•์„ ๋ฏฟ๋‹ˆ?

CDN(Content Delivery Network)์ด๋ž€ ์‰ฝ๊ฒŒ ๋งํ•ด์„œ,
์ „ ์„ธ๊ณ„ ๊ณณ๊ณณ์— ์›น์‚ฌ์ดํŠธ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ด ๋‘๊ณ ,
๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์œ„์น˜์—์„œ ๋น ๋ฅด๊ฒŒ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๋งˆ๋ฒ• ๊ฐ™์€ ์„œ๋น„์Šค์•ผ!

๐Ÿ› ๏ธ CDN ๊ฐ„๋‹จ ์ ์šฉ๋ฒ•

๊ฐ€์žฅ ์‰ฝ๊ฒŒ ์“ฐ๋Š” ๋ฐฉ๋ฒ•์€?
Cloudflare ๊ฐ™์€ ๋ฌด๋ฃŒ CDN์„ ์จ์„œ ๋ฒ„ํŠผ ๋ช‡ ๋ฒˆ ํด๋ฆญ์œผ๋กœ ์ ์šฉ ๋!

  • ๊ฐ€์ž… ํ›„ DNS๋งŒ ์—ฐ๊ฒฐํ•˜๋ฉด 5๋ถ„ ๋งŒ์— ์ ์šฉ ๊ฐ€๋Šฅํ•ด. (์„ธ์ƒ ์‰ฌ์›€ ์ฃผ์˜ โš ๏ธ)
  • ๋Œ€๋ถ€๋ถ„์˜ ์ •์  ์ฝ˜ํ…์ธ (CSS, JS, ์ด๋ฏธ์ง€)๋Š” ์ž๋™์œผ๋กœ ์บ์‹ฑ๋˜๊ธฐ ์‹œ์ž‘ํ•ด.

"CDN์ด ๋ญ ์–ผ๋งˆ๋‚˜ ๋นจ๋ผ์งˆ๊นŒ?" ํ•˜๊ณ  ์˜์‹ฌํ•˜์ง€ ๋ง๊ณ  ์จ๋ด!
๊ฑฐ์ง“๋ง ์•ˆ ํ•˜๊ณ , ์ฒด๊ฐ ์†๋„๊ฐ€ ๋‘ ๋ฐฐ๋Š” ๋นจ๋ผ์งˆ ๊ฑฐ์•ผ. ๐Ÿ˜ฑ


๐Ÿ“ฆ ์„ธ ๋ฒˆ์งธ ์ด์•ผ๊ธฐ : ๋„ˆ์˜ JS ํŒŒ์ผ์ด ๋ฌด๊ฑฐ์šด ์ด์œ 

๋„ˆ๋„ ๋ชจ๋ฅด๋Š” ์ƒˆ ์›น์‚ฌ์ดํŠธ๊ฐ€ ๋А๋ ค์ง„ ์ด์œ ๋Š” ๋ฐ”๋กœ,
์ˆ˜๋งŽ์€ JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•„์š” ์—†๋Š” ์ฝ”๋“œ ๋•Œ๋ฌธ์ด์•ผ!

๐Ÿ› ๏ธ ์ด๊ฑธ ๋”ฐ๋ผ ํ•ด๋ด! (์ฝ”๋“œ ์ตœ์ ํ™”)

  • โœ… ๋ฒˆ๋“ค ์ตœ์ ํ™” (Webpack ๊ธฐ์ค€)

    // Webpack.config.js
    module.exports = {
      optimization: {
        splitChunks: {
          chunks: 'all', // ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋”ฐ๋กœ ๋ถ„๋ฆฌ!
        },
      },
    };
  • โœ… ๋ถˆํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ญ์ œํ•˜๊ธฐ
    moment.js๊ฐ€ ์šฉ๋Ÿ‰ ํฌ๊ธฐ๋กœ ์•…๋ช…๋†’์€ ๊ฑฐ ์•Œ์ง€?
    (๋Œ€์ฒด์žฌ๋กœ dayjs ๊ฐ™์€ ๊ฐ€๋ฒผ์šด ๊ฑธ ์จ๋ณด์ž)

  • โœ… Tree Shaking ํ™œ์„ฑํ™”
    ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ์ œ๊ฑฐ!

    {
      "sideEffects": false
    }

    (package.json์— ์ถ”๊ฐ€!)

์ด ์ •๋„๋งŒ ์ ์šฉํ•ด๋„ ์ตœ์†Œ JS ๋ฒˆ๋“ค ์šฉ๋Ÿ‰์ด 30~50% ์ค„์–ด๋“ค ๊ฑฐ์•ผ! ๐ŸŽ‰


โšก ๋„ค ๋ฒˆ์งธ ์ด์•ผ๊ธฐ : ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ์˜ ํž˜์„ ๋นŒ๋ ค๋ด!

์‚ฌ์šฉ์ž๊ฐ€ ํ•œ ๋ฒˆ์ด๋ผ๋„ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋ฉด ์ด๋ฏธ ๋‚ด๋ ค๋ฐ›์€ ์ฝ˜ํ…์ธ ๋Š” ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œํ•  ํ•„์š”๊ฐ€ ์—†์ž–์•„?
๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ "์บ์‹œํ•ด๋„ ๋ผ!"๋ผ๊ณ  ์•Œ๋ ค์ฃผ์ž.

๐Ÿ› ๏ธ ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ ์‰ฝ๊ฒŒ ์„ค์ •ํ•˜๊ธฐ

.htaccess๋‚˜ ์„œ๋ฒ„ ์„ค์ •์—์„œ ๊ฐ„๋‹จํžˆ ์„ค์ • ๊ฐ€๋Šฅ!

# .htaccess (Apache ์„œ๋ฒ„)
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType text/css "access plus 1 month"
  ExpiresByType application/javascript "access plus 1 month"
  ExpiresByType image/jpeg "access plus 6 months"
</IfModule>

ํ•œ ์ค„๋กœ ์„œ๋ฒ„๊ฐ€ ์—„์ฒญ๋‚˜๊ฒŒ ๋นจ๋ผ์ง€๋Š” ๋งˆ๋ฒ• ๊ฐ™์€ ๋ณ€ํ™”! ๐Ÿ”ฅ


๐Ÿง™โ€โ™€๏ธ ๋งˆ์ง€๋ง‰ ์ด์•ผ๊ธฐ : ํŽ˜์ด์ง€๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ๋น„๋ฒ• - Lazy Loading

ํŽ˜์ด์ง€๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ชจ๋“  ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋”ฉํ•˜๋ฉด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€?
๊ทธ๋Ÿผ, ์Šคํฌ๋กคํ•  ๋•Œ๋งŒ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋”ฉํ•˜๊ฒŒ ๋งŒ๋“ค๋ฉด ์–ด๋•Œ?

๐Ÿ› ๏ธ Lazy loading ์‰ฝ๊ฒŒ ์ ์šฉํ•˜๊ธฐ

HTML๋งŒ์œผ๋กœ๋„ ๊ฐ€๋Šฅํ•ด!

<img src="image.jpg" loading="lazy">

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ž๋™์œผ๋กœ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ค„ ๊ฑฐ์•ผ.
์ด๊ฒƒ๋งŒ ์ ์šฉํ•ด๋„ ์ฒด๊ฐ ๋กœ๋”ฉ ์†๋„๊ฐ€ ์—„์ฒญ ๋นจ๋ผ์ ธ! ๐Ÿš€


๐Ÿง‘โ€๐Ÿ’ป ์ง„์งœ ํšจ๊ณผ๊ฐ€ ์žˆ์„๊นŒ? (์ง์ ‘ ์ ์šฉํ•ด๋ณธ ํ›„๊ธฐ)

๊ฐœ๋ฐœ์ž๋“ค์ด ์ตœ์ ํ™”๋ฅผ ์™ธ๋ฉดํ•˜๋Š” ์ด์œ ๋Š” ๋‹จ ํ•˜๋‚˜์•ผ.

"๋ญ๋ถ€ํ„ฐ ํ•ด์•ผ ํ• ์ง€ ๋ชฐ๋ผ์„œ..."

๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ ์žˆ๋Š” ํŒ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ๋”ฐ๋ผ ํ•ด๋ด.
์ •๋ง๋กœ ๋†€๋ž๊ฒŒ ํŽ˜์ด์ง€๊ฐ€ ๋นจ๋ผ์ง€๋Š” ๊ฑธ ๋А๋‚„ ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ.

์ตœ์ ํ™”๋Š” ์–ด๋ ต์ง€ ์•Š์•„!
์ž‘์€ ๋…ธ๋ ฅ์œผ๋กœ ํฐ ๋ณ€ํ™”๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž๊ณ ! ๐Ÿ’ช๐Ÿ”ฅ


๐ŸŽฏ ์ •๋ฆฌ (TL;DR)

  • ๐Ÿ–ผ๏ธ ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ค„์ด๊ธฐ
  • ๐ŸŒŽ CDN ์จ๋ณด๊ธฐ
  • ๐Ÿ“‚ JS ์ฝ”๋“œ ์ตœ์ ํ™”ํ•˜๊ธฐ
  • ๐Ÿ—ƒ๏ธ ๋ธŒ๋ผ์šฐ์ € ์บ์‹ฑ ์ ์šฉํ•˜๊ธฐ
  • ๐Ÿ”„ Lazy loading์œผ๋กœ ์ด๋ฏธ์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ

์ด ์ค‘์— ํ•˜๋‚˜๋งŒ ์ ์šฉํ•ด๋„ ๋А๋‚„ ์ˆ˜ ์žˆ๋Š” ๋ณ€ํ™”๊ฐ€ ๋‚˜ํƒ€๋‚  ๊ฑฐ์•ผ.

์ด์ œ ๋„ˆ์˜ ์›น์‚ฌ์ดํŠธ๋Š”...

โœจ โ€œ๊ด‘์† ๋กœ๋”ฉโ€ โœจ์„ ํ–ฅํ•ด ๊ฐ„๋‹ค!!!

(์ข‹์•„์š” ๋ˆ„๋ฅด๋ฉด ํ–‰์šด์˜ 10๋ฐฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ์ด ์˜ฌ์ง€๋„?! ๐Ÿ€)


์–ด๋•Œ? ์žฌ๋ฐŒ๊ณ  ์‰ฝ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ์ถฉ๋ถ„ํžˆ ํ’€์–ด๋†จ๋Š”๋ฐ,
ํ˜น์‹œ ๋” ๊ตฌ์ฒด์ ์ธ ์˜ˆ์‹œ๋‚˜ ๊ถ๊ธˆํ•œ ๋ถ€๋ถ„ ์žˆ์œผ๋ฉด ์–ธ์ œ๋“  ๋งํ•ด์ค˜!

profile
๐Ÿฑ ๋„์ฟ„์—์„œ ํ™œ๋™ ์ค‘์ธ ์›น ๊ฐœ๋ฐœ์ž ๐Ÿ‡ฏ๐Ÿ‡ต๐Ÿ’ป ๐Ÿง‘โ€๐Ÿ’ป ์ตœ๊ทผ์—๋Š” ์š”์ฆ˜IT์—์„œ ์ž‘๊ฐ€๋กœ๋„ ํ™œ๋™ ์ค‘์ž…๋‹ˆ๋‹ค! ๐Ÿ“ ์š”์ฆ˜IT ๊ธ€ ๋ชจ์Œ: https://yozm.wishket.com/magazine/@donghyuk65/

10๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2025๋…„ 3์›” 10์ผ

์ข‹์€๊ธ€ ์ž˜๋ดค์Šต๋‹ˆ๋‹ค! ํฌ์ŠคํŠธ์— ์žˆ๋Š” ์ด๋ฏธ์ง€๋Š” ์–ด๋–ค ํˆด๋กœ ๊ทธ๋ฆฌ์‹ ๊ฑธ๊ฐ€์š”?
์‹œ๊ฐํ™”๊ฐ€ ์ž˜๋˜์–ด์„œ ๊ธ€์„ ์ดํ•ดํ•˜๋Š”๋ฐ ์ข‹๋”๋ผ๊ณ ์š”!

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2025๋…„ 3์›” 18์ผ

์ข‹์€ ๊ธ€ ์ž˜ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค^^

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2025๋…„ 3์›” 18์ผ

์ด๋ฏธ์ง€ํ™”๋ฅผ ์ •๋ง ์ž˜ํ•˜์‹œ๋„ค์š”!

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2025๋…„ 3์›” 21์ผ

์™€, ์—„์ฒญ๋‚˜๊ฒŒ ์žฌ๋ฏธ์žˆ๊ณ  ์œ ์ตํ•œ ๊ธ€์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๋ง™์Šต๋‹ˆ๋‹ค.

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2025๋…„ 3์›” 23์ผ

์ข‹์€ ๋‚ด์šฉ์ด๋„ค์š”. ํŠนํžˆ ์ตœ๊ทผ์— ๊ฒฝํ—˜ํ•œ ๋‚ด์šฉ๋„ ํฌํ•จ๋˜์–ด ์žˆ์–ด ํฅ๋ฏธ์žˆ๊ฒŒ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค. CDN์˜ ๊ฒฝ์šฐ ์ œ๊ฐ€ ์ฐธ์—ฌํ•œ ๋ชจ๋ฐ”์ผ๋ถ„์•ผ์—์„œ๋„ ํ™œ์šฉ์ด ๋˜์—ˆ๊ฑฐ๋“ ์š”.
์˜ˆ๋ฅผ๋“ค์–ด ์žฅ์• ๋ฐœ์ƒ๋“ฑ์œผ๋กœ ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์ด ๋ฐœ์ƒํ• ๊ฒฝ์šฐ CDN์„ ์ด์šฉํ•˜์—ฌ ์ ์ ˆํ•œ ์‘๋‹ต์„ JSONํŒŒ์ผ(์ •์ ํŒŒ์ผ)๋กœ ๋ฐฐ์น˜ํ•ด ์ฒ˜๋ฆฌํ–ˆ์–ด์š”.

1๊ฐœ์˜ ๋‹ต๊ธ€