Front-end/Optimizing

Prefetching vs Preloading vs Prerendering

xeunnie 2025. 3. 16. 01:00
728x90
๋ฐ˜์‘ํ˜•

Prefetching vs Preloading vs Prerendering

 

๐Ÿ ์›น ์„ฑ๋Šฅ ์ตœ์ ํ™”์˜ 3๋Œ€ ๊ธฐ์ˆ  ๋น„๊ต

 

ํ˜„๋Œ€ ์›น ๊ฐœ๋ฐœ์—์„œ๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)์„ ๊ทน๋Œ€ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ์†Œ์Šค ๋กœ๋”ฉ ์ตœ์ ํ™”๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Prefetching, Preloading, Prerendering์€ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•˜๋Š” ๊ธฐ์ˆ ๋“ค์ธ๋ฐ์š”, ์ด๋“ค์˜ ์ฐจ์ด์™€ ์‚ฌ์šฉ ๋ชฉ์ ์„ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๋ฉด ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ํ›จ์”ฌ ๋” ํšจ๊ณผ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์ด ์„ธ ๊ฐ€์ง€ ๊ธฐ์ˆ ์˜ ๊ฐœ๋…๊ณผ ์ฐจ์ด, ํ™œ์šฉ ์‚ฌ๋ก€๋ฅผ ๊นŠ์ด ์žˆ๊ฒŒ ๋‹ค๋ค„๋ณผ๊ฒŒ์š”.

 

1. Prefetching: ์˜ˆ์ธก ๊ธฐ๋ฐ˜ ๋ฆฌ์†Œ์Šค ๋กœ๋“œ

 

๐ŸŒŸ “์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์Œ์— ํ•„์š”๋กœ ํ•  ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฏธ๋ฆฌ ์ค€๋น„”

 

Prefetching์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‚ฌ์šฉ์ž์˜ ๋ฏธ๋ž˜ ํ–‰๋™์„ ์˜ˆ์ธกํ•ด ํŠน์ • ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฏธ๋ฆฌ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋กœ๋“œํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์•„์ง ํด๋ฆญํ•˜์ง€ ์•Š์•˜์ง€๋งŒ, ๊ณง ํด๋ฆญํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๋งํฌ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ค€๋น„ํ•˜๋Š” ๋ฐฉ์‹์ด์ฃ .

 

๐Ÿ“‹ ํŠน์ง•

์–ธ์ œ?

ํ˜„์žฌ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง ์ดํ›„, ์—ฌ์œ  ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ด ๋น„๋™๊ธฐ๋กœ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๋ชฉ์ ?

์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€ ์ด๋™ ์‹œ, ๋กœ๋“œ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

์–ด๋””์— ์‚ฌ์šฉ?

์˜ˆ๋ฅผ ๋“ค์–ด, ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฉ”๋‰ด, ๋‹ค์Œ ํŽ˜์ด์ง€ ๋งํฌ.

 

๐Ÿ”ง HTML ์˜ˆ์ œ

 

<link rel="prefetch" href="/next-page.html">

 

๐Ÿ› ๏ธ React/Next.js ์˜ˆ์ œ

 

import Link from "next/link";

 

function HomePage() {

  return (

    <Link href="/about" prefetch={true}>

      About Us

    </Link>

  );

}

 

2. Preloading: ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ์œ„ํ•œ ๋ฆฌ์†Œ์Šค ์šฐ์„  ๋กœ๋“œ

 

๐ŸŒŸ “ํ˜„์žฌ ํŽ˜์ด์ง€์— ๊ผญ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ตœ์šฐ์„ ์ ์œผ๋กœ ์ค€๋น„”

 

Preloading์€ ํ˜„์žฌ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์šฐ์„ ์ ์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๋„๋ก ๋ธŒ๋ผ์šฐ์ €์— ์ง€์‹œํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ๋กœ๋“œํ•˜๋Š” ์šฐ์„ ์ˆœ์œ„๋ฅผ ์กฐ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

 

๐Ÿ“‹ ํŠน์ง•

์–ธ์ œ?

ํ˜„์žฌ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง ์ค‘ ์ค‘์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋จผ์ € ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๋ชฉ์ ?

์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€์—์„œ ๋ฐ”๋กœ ๋ณด๊ฒŒ ๋  ํ•ต์‹ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ๋น ๋ฅด๊ฒŒ ์ค€๋น„.

์–ด๋””์— ์‚ฌ์šฉ?

์›นํฐํŠธ, ์ค‘์š”ํ•œ CSS ํŒŒ์ผ, ๋ฉ”์ธ ๋ฐฐ๋„ˆ ์ด๋ฏธ์ง€ ๋“ฑ.

 

๐Ÿ”ง HTML ์˜ˆ์ œ

 

<link rel="preload" href="/styles.css" as="style">

<link rel="preload" href="/image.jpg" as="image">

 

๐Ÿ› ๏ธ React ์˜ˆ์ œ

 

function App() {

  return (

    <>

      <link rel="preload" href="/styles.css" as="style" />

      <img src="/image.jpg" alt="Main Banner" />

    </>

  );

}

 

3. Prerendering: ๋ฏธ๋ž˜๋ฅผ ์œ„ํ•œ ์™„๋ฒฝํ•œ ์ค€๋น„

 

๐ŸŒŸ “๋‹ค์Œ ํŽ˜์ด์ง€๋ฅผ ์™„์ „ํžˆ ๋ Œ๋”๋งํ•˜๊ณ  ์ค€๋น„”

 

Prerendering์€ ํŽ˜์ด์ง€์˜ ๋ฆฌ์†Œ์Šค๋ฟ ์•„๋‹ˆ๋ผ, ํŽ˜์ด์ง€ ์ž์ฒด๋ฅผ ๋ฏธ๋ฆฌ ๋ Œ๋”๋งํ•˜์—ฌ ์ค€๋น„ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๋งํฌ๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ์ฆ‰์‹œ ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ“‹ ํŠน์ง•

์–ธ์ œ?

์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ํŽ˜์ด์ง€๋ฅผ ์˜ˆ์ƒํ•˜์—ฌ, ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ ๋ Œ๋”๋ง.

์‚ฌ์šฉ ๋ชฉ์ ?

ํŽ˜์ด์ง€ ์ „ํ™˜ ์‹œ ์ง€์—ฐ ์—†์ด ์ฆ‰์‹œ ๋กœ๋“œ.

์–ด๋””์— ์‚ฌ์šฉ?

์ฒซ ๋ฐฉ๋ฌธ ์ดํ›„ ๋ฐ”๋กœ ์ด๋™ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ํŽ˜์ด์ง€.

 

๐Ÿ”ง HTML ์˜ˆ์ œ

 

<link rel="prerender" href="/next-page.html">

 

๐Ÿ› ๏ธ React ์˜ˆ์ œ

 

React์—์„œ๋Š” Prerendering์„ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋ณด๋‹ค๋Š” Next.js์˜ Static Generation ๊ฐ™์€ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

 

// Next.js

function getStaticProps() {

  return { props: { data: "Prerendered Data" } };

}

 

export default function Page({ data }) {

  return <div>{data}</div>;

}

 

4. ์ฃผ์š” ์ฐจ์ด์  ๋น„๊ตํ‘œ ๐Ÿ“Š

 

๊ธฐ์ˆ  ์‚ฌ์šฉ ์‹œ์  ์ฃผ์š” ๋ชฉ์  ํ™œ์šฉ ์˜ˆ์‹œ

Prefetching ํ˜„์žฌ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง ์™„๋ฃŒ ํ›„ ์—ฌ์œ  ๋ฆฌ์†Œ์Šค ํ™œ์šฉ ๋‹ค์Œ์— ํ•„์š”ํ•  ๋ฆฌ์†Œ์Šค ์ค€๋น„ ๋งํฌ๋œ ๋‹ค์Œ ํŽ˜์ด์ง€ ๋ฐ์ดํ„ฐ

Preloading ํ˜„์žฌ ํŽ˜์ด์ง€ ๋ Œ๋”๋ง ์ค‘ ์šฐ์„  ์ฒ˜๋ฆฌ ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ํ•ต์‹ฌ ๋ฆฌ์†Œ์Šค ์ค€๋น„ CSS, ์›นํฐํŠธ, ์ค‘์š” ์ด๋ฏธ์ง€

Prerendering ๋ฏธ๋ž˜์— ๋ฐฉ๋ฌธํ•  ํŽ˜์ด์ง€๋ฅผ ์™„์ „ํžˆ ๋ Œ๋”๋ง ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญ ์ฆ‰์‹œ ์ฝ˜ํ…์ธ  ์ œ๊ณต ์‚ฌ์šฉ์ž ํ–‰๋™ ์˜ˆ์ธก ๊ธฐ๋ฐ˜ ํŽ˜์ด์ง€ ์ „ํ™˜

 

5. ์–ธ์ œ, ๋ฌด์—‡์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ? ๐Ÿง

 

๐Ÿ” Prefetching

์‚ฌ์šฉ์ž๊ฐ€ ๋งํฌ๋ฅผ ํด๋ฆญํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๊ฒฝ์šฐ.

๋„ค๋น„๊ฒŒ์ด์…˜์ด๋‚˜ ์ถ”์ฒœ ์ฝ˜ํ…์ธ ์— ์ ์šฉ.

 

๐Ÿ” Preloading

ํ˜„์žฌ ํŽ˜์ด์ง€์— ์ค‘์š”ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด.

๋ Œ๋”๋ง ์†๋„๊ฐ€ ์ค‘์š”ํ•œ CSS, JS, ์ด๋ฏธ์ง€ ํŒŒ์ผ์— ์ ์šฉ.

 

๐Ÿ” Prerendering

ํŠน์ • ํŽ˜์ด์ง€๋กœ์˜ ์ „ํ™˜์ด ๋งค์šฐ ๋†’์€ ํ™•๋ฅ ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ.

์‚ฌ์šฉ์ž ์—ฌ์ •์—์„œ ํ™•์‹คํžˆ ๋‹ค์Œ์— ๋ฐฉ๋ฌธํ•  ํŽ˜์ด์ง€๋ฅผ ์ค€๋น„.

 

6. ์ตœ์ ํ™” ํŒ ๐ŸŽฏ

1. ์‚ฌ์šฉ์ž ํ–‰๋™ ์˜ˆ์ธก

์‚ฌ์šฉ์ž๊ฐ€ ์ž์ฃผ ๋ฐฉ๋ฌธํ•˜๋Š” ํŒจํ„ด์„ ๋ถ„์„ํ•ด Prefetching๊ณผ Prerendering์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

2. ๋ฆฌ์†Œ์Šค ํฌ๊ธฐ ๊ณ ๋ ค

ํฐ ๋ฆฌ์†Œ์Šค๋Š” Preloading์œผ๋กœ ์ œํ•œ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ž‘์€ ๋ฆฌ์†Œ์Šค๋Š” Prefetching์œผ๋กœ ๊ด€๋ฆฌํ•˜์„ธ์š”.

3. Lighthouse๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง

Google Lighthouse๋ฅผ ํ™œ์šฉํ•ด ์„ฑ๋Šฅ ์ ์ˆ˜๋ฅผ ํ™•์ธํ•˜๊ณ , ์ตœ์ ํ™” ๊ฒฐ๊ณผ๋ฅผ ๋ถ„์„ํ•˜์„ธ์š”.

 

๊ฒฐ๋ก : ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์œ„ํ•œ ์ „๋žต์  ์„ ํƒ์ด ์ค‘์š”

 

Prefetching, Preloading, Prerendering์€ ๊ฐ๊ฐ์˜ ๋ชฉ์ ๊ณผ ์‚ฌ์šฉ ์‹œ์ ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ๊ธฐ์ˆ ์„ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋ฉด ํŽ˜์ด์ง€ ๋กœ๋“œ ์†๋„์™€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํฌ๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐ŸŒท์ „์„ค์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ด…์‹œ๋‹น!๐ŸŒท

728x90
๋ฐ˜์‘ํ˜•