Front-end/Optimizing

[Optimize] TTI(Time to Interactive)๋ž€ ๋ฌด์—‡์ผ๊นŒ? ๐Ÿงพ

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

TTI(Time to Interactive) ํ†บ์•„๋ณด๊ธฐ! ๐Ÿงพ

์›น ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋™์•ˆ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘์š”ํ•œ ์„ฑ๋Šฅ ์ง€ํ‘œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ TTI(Time to Interactive)์ž…๋‹ˆ๋‹ค. TTI๋Š” ๋‹จ์ˆœํžˆ ํŽ˜์ด์ง€๊ฐ€ ๋ณด์ด๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€์™€ ์‹ค์ œ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์ ์„ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” TTI๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์™œ ์ค‘์š”ํ•œ์ง€, ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•œ ์ „๋žต๊นŒ์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


๐ŸŒŸ TTI๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

TTI๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์›น ํŽ˜์ด์ง€์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ค€๋น„๊ฐ€ ๋˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ƒํ˜ธ์ž‘์šฉ์ด๋ž€, ํด๋ฆญ ๋˜๋Š” ํ‚ค๋ณด๋“œ ๋ˆ„๋ฆ„๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด:

  1. ํŽ˜์ด์ง€๊ฐ€ ์™„์ „ํžˆ ๋กœ๋“œ๋˜์–ด ๋ณด์ด์ง€๋งŒ,
  2. ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด๋„ ๋ฐ˜์‘์ด ์—†๋‹ค๋ฉด,
  3. ์‚ฌ์šฉ์ž๋Š” ํ•ด๋‹น ํŽ˜์ด์ง€๊ฐ€ ์•„์ง ์ค€๋น„๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ๋А๋‚๋‹ˆ๋‹ค.

TTI๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ์›น ํŽ˜์ด์ง€๊ฐ€ ์‹ค์ œ๋กœ ๋ฐ˜์‘ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์ „ํ™˜๋˜๋Š” ์‹œ์ ์„ ์ธก์ •ํ•ฉ๋‹ˆ๋‹ค.


๐ŸŽฏ TTI๋Š” ์–ด๋–ป๊ฒŒ ์ธก์ •๋˜๋‚˜์š”?

TTI๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€์™€ ์ƒํ˜ธ์ž‘์šฉ์„ ์‹œ๋„ํ•  ๋•Œ, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•ด๋‹น ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. Google์˜ Lighthouse์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ณต์‹ ์ •์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ํŽ˜์ด์ง€์˜ ์ฃผ์š” ์ฝ˜ํ…์ธ ๊ฐ€ ๋ Œ๋”๋ง๋˜๊ณ ,
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋“ฑ๋ก๋˜์—ˆ์œผ๋ฉฐ,
  • ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ 50ms ์ด์ƒ ์ฐจ๋‹จ๋˜์ง€ ์•Š๋Š” ์ƒํƒœ

์ธก์ • ๊ธฐ์ค€

  • First Contentful Paint (FCP): ์ฒ˜์Œ์œผ๋กœ ์ฝ˜ํ…์ธ ๊ฐ€ ํ™”๋ฉด์— ํ‘œ์‹œ๋œ ์‹œ์ 
  • First CPU Idle: ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฃผ์š” ์ž‘์—…์„ ์™„๋ฃŒํ•˜๊ณ , ์ผ์‹œ์ ์œผ๋กœ ์œ ํœด ์ƒํƒœ์ธ ์‹œ์ 
  • TTI: ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•  ์ค€๋น„๊ฐ€ ๋œ ์ƒํƒœ

๐Ÿค” ์™œ TTI๊ฐ€ ์ค‘์š”ํ•œ๊ฐ€์š”?

TTI๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์˜ ํ’ˆ์งˆ์„ ์ง์ ‘์ ์œผ๋กœ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ TTI๋Š” ์„ฑ๋Šฅ ์ด์  ๊ณ„์‚ฐ์—์„œ 10%์˜ ๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ–๋Š”๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž ๋งŒ์กฑ๋„: TTI๊ฐ€ ์งง์„์ˆ˜๋ก ์‚ฌ์šฉ์ž๋Š” ํŽ˜์ด์ง€๊ฐ€ ๋ฐ˜์‘์ด ๋น ๋ฅด๊ณ  ์ง๊ด€์ ์ด๋ผ๊ณ  ๋А๋‚๋‹ˆ๋‹ค.
  2. SEO์™€ ๋žญํ‚น: Google์€ TTI์™€ ๊ฐ™์€ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ๊ฒ€์ƒ‰ ๋žญํ‚น์— ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ดํƒˆ๋ฅ  ๊ฐ์†Œ: ๋А๋ฆฐ ํŽ˜์ด์ง€๋Š” ์‚ฌ์šฉ์ž๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋งŒ๋“ค๊ณ , ์ด๋Š” ๋†’์€ ์ดํƒˆ๋ฅ ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ์‹ค์ œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„ฑ: ํŽ˜์ด์ง€๊ฐ€ ์™„์ „ํžˆ ๋ Œ๋”๋ง๋˜์—ˆ๋”๋ผ๋„ ๋ฐ˜์‘ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์€ ๋งค์šฐ ๋‚˜์ฉ๋‹ˆ๋‹ค.

๐Ÿ›  TTI๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•

TTI๋ฅผ ์ตœ์ ํ™”ํ•˜๋ ค๋ฉด ํŽ˜์ด์ง€๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ƒํ˜ธ์ž‘์šฉ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์ „ํ™˜๋˜๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์ฃผ์š” ์ „๋žต๋“ค์ž…๋‹ˆ๋‹ค.

1๏ธโƒฃ  ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ์ž‘์—… ์ค„์ด๊ธฐ

TTI๋ฅผ ๋ฐฉํ•ดํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์š”์†Œ๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ๊ณผ๋ถ€ํ•˜์ž…๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ๋ Œ๋”๋ง, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰, ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ฒ˜๋ฆฌ๋ฅผ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฐจ๋‹จ๋˜๋ฉด ๋ฐ˜์‘ ์†๋„๊ฐ€ ๋А๋ ค์ง‘๋‹ˆ๋‹ค.

  • ํฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ๋ถ„ํ• : Webpack์ด๋‚˜ Rollup ๊ฐ™์€ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ๋ฅผ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.
  • ํฌ๋ฆฌํ‹ฐ์ปฌ ๋ Œ๋”๋ง ๊ฒฝ๋กœ ์ตœ์ ํ™”: ํ•„์š”ํ•œ ์ฝ”๋“œ๋งŒ ๋กœ๋“œํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • ์ค‘๋ณต๋œ ์ž‘์—… ์ œ๊ฑฐ: ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ๊ณผ ๋ฐ˜๋ณต ์ž‘์—…์„ ์ค„์ž…๋‹ˆ๋‹ค.

2๏ธโƒฃ  Lazy Loading

ํŽ˜์ด์ง€ ๋กœ๋“œ ์ดˆ๊ธฐ์—๋Š” ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉ์— ํ•„์š”ํ•œ ํ•„์ˆ˜ ์ž์›๋งŒ ๋กœ๋“œํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

<img src="placeholder.jpg" data-src="actual-image.jpg" loading="lazy" />

3๏ธโƒฃ Third-Party ์Šคํฌ๋ฆฝํŠธ ์ตœ์ ํ™”

  • ๊ด‘๊ณ , ์†Œ์…œ ๋ฏธ๋””์–ด ์œ„์ ฏ, ๋ถ„์„ ๋„๊ตฌ ๋“ฑ ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ๋Š” ์ข…์ข… TTI๋ฅผ ์ €ํ•˜์‹œํ‚ต๋‹ˆ๋‹ค.
  • ์ค‘์š”ํ•˜์ง€ ์•Š์€ ์Šคํฌ๋ฆฝํŠธ๋Š” async๋‚˜ defer ์†์„ฑ์„ ์‚ฌ์šฉํ•ด ๋น„๋™๊ธฐ๋กœ ๋กœ๋“œํ•˜์„ธ์š”.
<script src="analytics.js" async></script>

4๏ธโƒฃ ์„œ๋น„์Šค ์›Œ์ปค(Service Worker) ์‚ฌ์šฉ

  • ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ํšจ์œจ์ ์œผ๋กœ ์บ์‹ฑํ•˜๊ณ , ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ๊ฐ„์„ ์ค„์ž…๋‹ˆ๋‹ค.
  • React, Vue ๋“ฑ์˜ PWA(Progressive Web App) ์„ค์ •์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5๏ธโƒฃ ๋น„๋™๊ธฐ ๋ฐ ์ง€์—ฐ ์‹คํ–‰

ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ž‘์—…์„ ์ง€์—ฐ์‹œ์ผœ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์˜ ๋ถ€๋‹ด์„ ์ค„์ž…๋‹ˆ๋‹ค.

// ์š”์ฒญ์„ ์ง€์—ฐ ์‹คํ–‰
setTimeout(() => {
  console.log("์ง€์—ฐ ์‹คํ–‰!");
}, 1000);

๐ŸŒŸ ์‹ค์ œ TTI ์ตœ์ ํ™” ์‚ฌ๋ก€

React์™€ Lazy Loading ์˜ˆ์ œ

React์—์„œ React.lazy๋ฅผ ์‚ฌ์šฉํ•ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋™์ ์œผ๋กœ ๋กœ๋“œํ•˜๋ฉด ์ดˆ๊ธฐ ๋กœ๋”ฉ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import React, { Suspense } from "react";

const HeavyComponent = React.lazy(() => import("./HeavyComponent"));

function App() {
  return (
    <Suspense fallback={<div>Loading...</div>}>
      <HeavyComponent />
    </Suspense>
  );
}

๐Ÿงช TTI์™€ ๊ด€๋ จ๋œ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ

TTI ์ตœ์ ํ™”๋ฅผ ์‹œ๋„ํ•˜๋ฉด์„œ ๋งˆ์ฃผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋“ค:

  1. ํฐ ๋ฒˆ๋“ค ํฌ๊ธฐ: ์ดˆ๊ธฐ ๋กœ๋“œ์— ๋งŽ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋˜๋ฉด TTI๊ฐ€ ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋ธ”๋กœํ‚น ๋ฆฌ์†Œ์Šค: CSS์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์ด ๋กœ๋“œ๋˜๊ธฐ ์ „๊นŒ์ง€ ํŽ˜์ด์ง€๊ฐ€ ๋ Œ๋”๋ง๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ๋‚ฎ์€ ๋„คํŠธ์›Œํฌ ์†๋„: ์ €์‚ฌ์–‘ ๊ธฐ๊ธฐ๋‚˜ ๋А๋ฆฐ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋” ์‹ฌ๊ฐํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

๐Ÿ“Š TTI ์ธก์ • ๋„๊ตฌ

TTI๋ฅผ ์ธก์ •ํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ ์œ„ํ•œ ์ฃผ์š” ๋„๊ตฌ:

  1. Lighthouse: TTI๋ฅผ ๋น„๋กฏํ•œ ๋‹ค์–‘ํ•œ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ํ‰๊ฐ€
  2. WebPageTest: ํŽ˜์ด์ง€ ๋กœ๋”ฉ ๊ณผ์ •์˜ ์ž์„ธํ•œ ๋ถ„์„
  3. Chrome DevTools: ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ์ž‘์—…์„ ์ถ”์ ํ•˜์—ฌ ๋ณ‘๋ชฉ ํ˜„์ƒ ํŒŒ์•…
  4. PageSpeed Insights: Google์—์„œ ์ œ๊ณตํ•˜๋Š” ์›น ์„ฑ๋Šฅ ๋ถ„์„ ๋„๊ตฌ

๐ŸŽ‰ ๋งˆ๋ฌด๋ฆฌ: TTI๋ฅผ ์žก์•„๋ผ!

TTI๋Š” ๋‹จ์ˆœํžˆ ํŽ˜์ด์ง€๊ฐ€ “๋ณด์ด๋Š”” ๊ฒƒ์„ ๋„˜์–ด, ์‚ฌ์šฉ์ž์™€ “์†Œํ†ต”ํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ๋Š”์ง€ ์ธก์ •ํ•˜๋Š” ์ค‘์š”ํ•œ ์ง€ํ‘œ์ž…๋‹ˆ๋‹ค. React, ์„œ๋น„์Šค ์›Œ์ปค, Lazy Loading ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•ด TTI๋ฅผ ์ตœ์ ํ™”ํ•˜๋ฉด, ์„ฑ๋Šฅ์€ ๋ฌผ๋ก  ์‚ฌ์šฉ์ž ๋งŒ์กฑ๋„๊นŒ์ง€ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

 

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

728x90
๋ฐ˜์‘ํ˜•