ํฌ๋กฑ๋ ๋ง์คํฐํด๋์ค ์ฒซ ํ์ด์ง ๋ก๋ฉ์ ์ค์
Core Web Vitals
First contentful paint
์ต์ด ์ฝํ ์ธ ํ ํ์ธํธ(FCP)๋ ๋ธ๋ผ์ฐ์ ๊ฐ DOM์์ ์ฒซ ๋ฒ์งธ ์ฝํ ์ธ ๋นํธ๋ฅผ ๋ ๋๋งํ์ฌ, ํ์ด์ง๊ฐ ์ค์ ๋ก ๋ก๋๋๊ณ ์๋ค๋ ์ฒซ ๋ฒ์งธ ํผ๋๋ฐฑ์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๋ ๊ฒฝ์ฐ์ ๋๋ค. FCP ์ดํ์ ์ฌ์ฉ์๋ ์น ํ์ด์ง๊ฐ ๋ก๋๋์ด ์๋ค๋ ๊ฒ์ ๋๋ ์ ์์ต๋๋ค.
์ต์ด ์ฝํ ์ธ ํ ํ์ธํธ ํ์์คํฌํ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ํ ์คํธ, ์ด๋ฏธ์ง(๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง ํฌํจ), ๋น๋์ค, ๊ทธ๋ ค์ง ์บ๋ฒ์ค ๋๋ ๋น์ด์์ง ์์ SVG๋ฅผ ์ฒ์ ๋ ๋๋งํ ์์ ์ ๋๋ค. ์ด๊ฒ์ iframe์ ๋ชจ๋ ์ฝํ ์ธ ๋ฅผ ์ ์ธํ์ง๋ง ๋ณด๋ฅ ์ค์ธ ์น ๊ธ๊ผด์ด ์๋ ํ ์คํธ๋ฅผ ํฌํจํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ํ์ด์ง ์ฝํ ์ธ ๋ฅผ ์๋นํ๊ธฐ ์์ํ ๊ฒ์ ์ด ์์ ์ด ์ฒ์์ ๋๋ค.
Largest Contentful Paint(์ ์ผ ์ค์)
LCP๋ ์ฌ์ฉ์๊ฐ ํ์ด์ง๋ก ์ฒ์ ์ด๋ํ ์์ ์ ๊ธฐ์ค์ผ๋ก ํ์ ์์ญ์ ํ์๋๋ ๊ฐ์ฅ ํฐย ์ด๋ฏธ์ง, ํ ์คํธ ๋ธ๋ก ๋๋ ๋์์์ ๋ ๋๋ง ์๊ฐ์ ๋ณด๊ณ ํฉ๋๋ค.
Cumulative Layout Shift
๋ฐฉ๋ฌธ์์๊ฒ ์ฝํ ์ธ ๊ฐ ์ผ๋ง๋โ ๋ถ์์ ํ ์ง ์ธก์ ํ๋ ์ฌ์ฉ์ ๊ฒฝํ ์ธก์ ํญ๋ชฉ
ํ์ฌ ๋ณด๊ณ ์๋ ํ์ด์ง์ ๊ฐ์๊ธฐ ๋ฐ์ํ๋ ๋ ์ด์์์ ๋ณ๊ฒฝ์ ์๊ฐ์ ์ผ๋ก ๊ฑฐ์ฌ๋ฆฌ๋ฉฐ ์ฌ์ฉ์์ ์ฃผ์๋ฅผ ์ฐ๋งํ๊ฒ ํจ ๋ํ ์๋ชป๋ ํด๋ฆญ์ ์ ๋ํ์ฌ ์ค์ ํผํด๋ฅผ ์ผ์ผํฌ ์๋ ์๊ณ ์์ฃผ ์ค๋ง์ค๋ฌ์ด ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง ์ ์์
CLS(Cumulative Layout Shift)ย ์ธก์ ์ ์ฌ์ฉ์์๊ฒ ๋ฐ์ํ๋ ๋ ์ด์์ ์ด๋(layout shift) ๋น๋๋ฅผ ์ธก์ ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.

๋ฐ์์๋ ๊ด๋ จ ์งํ - Interaction to Next Paint
https://ui.toast.com/posts/ko_20220512 ๋ค์ ํ์ธํธ์ ๋ํ ์ํธ์์ฉ(Interaction to Next Paint, INP)์ย ์๋ต์ฑ์ ํ๊ฐํ๋ ์คํ์ ์ธ ํ๋ ๋ฉํธ๋ฆญ INP๋ ์ ์ฒด ํ์ด์ง ๋ผ์ดํ ์ฌ์ดํด๋์ ์ผ์ด๋ ๋ชจ๋ ์ํธ์์ฉ์ ๋ํ ์ง์ฐ์ ๊ธฐ๋กํ๋ค. ์ด๋ฌํ ์ํธ์์ฉ์ ๊ฐ์ฅ ๋์ ๊ฐ(๋๋ ๋ง์ ์ํธ ์์ฉ์ด ์๋ ํ์ด์ง์ ๊ฒฝ์ฐ ๊ฐ์ฅ ๋์ ๊ฐ์ ๊ฐ๊น์ด ๊ฐ)์ด ํ์ด์ง์ INP๋ก ๊ธฐ๋ก๋๋ค. INP๊ฐ ๋ฎ๋ค๋ฉด ํด๋น ํ์ด์ง๊ฐ ํญ์ ์์ ์ ์ผ๋ก ์๋ตํ ์ ์๋ค๋ ๊ฑธ ๋ณด์ฅํ๋ค.
๊ฐ์ ํด์ผ ํ ํญ๋ชฉ
- ์ฒซ ํ์ด์ง ๋ก๋ฉ์ ๋น ๋ฅด๊ฒ
- ํ๋ฅญํ ๋ฐ์
- ๋ถ๋๋ฝ๊ฒ ์ด์ด์ ธ ๋ณด์ด๊ธฐ
์ต์ ํ ์์ ์งํ ๋ฐฉ๋ฒ
**์ง๋จ > ๊ฐ์ > ํ
์คํธ > ์ง๋จ**
-
์ง๋จ
- ์ด๋๊ฐ ์ ์ผ๋งํผ ๋๋ฆฐ๊ฐ?
- ์ด๋ ์ธํฐ๋์ ์ด ์ฌ์ฉ์์๊ฒ ์ค์ํ ๊ฐ์น๋ฅผ ์ฃผ๋๊ฐ?
- ์ ๋์ ์ธ ์งํ๋ ์ผ๋ง์ธ๊ฐ?
- ์ด๋ป๊ฒ ์ง๋จํ๋๊ฐ?
- ํฌ๋กฌ ๊ฐ๋ฐ์๋๊ตฌ - lighthouse
- ํฌ๋กฌ ๊ฐ๋ฐ์๋๊ตฌ - performance, memory(๋์๋ ์๋?)
- pagespeed insights
-
๊ฐ์
-
ํ ์คํธ
- side effect๋ ์๋๊ฐ?
-
์ง๋จ
- ์ด๋๊ฐ ์ผ๋งํผ ๋นจ๋ผ์ก๋๊ฐ?
์ค์ ๋ฌธ์ ํด๊ฒฐ๋ฐฉ๋ฒ
1. ์ฒซ ํ์ด์ง ๋ก๋ฉ ์ง์ฐ๋ฌธ์ ํด๊ฒฐ
- HTML Parsing ๋ฐฉํดํ์ง ์๊ธฐ
scriptย ์์น ์กฐ์ (body ๋์ผ๋ก ์ด๋)defer/asyncย ์์ฑ ํ์ฉ
- Build๋ฅผ ํตํ ์ฝ๋ ์ต์ ํ
- ์ฝ๋ ์์ถ (minification) ๋ฐ ๋ฒ๋ค๋ง
- ๋ฒ๋ค๋ง์ ์ํ๋ฉด ํ์ผ ์๊ฐ ๋ง์์ง๊ณ , ์๋ฒ์ ๊ทธ๋๋ง๋ค ์์ฒญํ๊ธฐ ๋๋ฌธ์ ๋น์ฉ์ด ํผ. ๋ฒ๋ค๋ง์ ํตํด์ http request ์๋ฅผ ์ค์ด๊ธฐ
- ๋ฐฐํฌํ๋ ํ์ผ์ ์ค์์ผ๋ก์จ ๊ด๋ฆฌ ๋ํ ์ฌ์์ง
- ์ฝ๋ ์คํ๋ฆฌํ
(Code Splitting)
- ๋๋ฌด ํฐ ์ฝ๋๋ฅผ ๋๋๊ธฐ. ์ค์ง์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ถ๋ถ์ ์ ์๋ฐ ์ฒ์๋ถํฐ ๋ง์ด ๋ฐ์ผ๋ฉด ์ฒซ ๋ ๋๋ง ์๋๊ฐ ๋๋ ค์ง
- ์ ์ ํ ์ฝ๋ ์คํ๋ฆฌํ ์ ํตํด ํ์ํ ๋ถ๋ถ๋ง ๋ฐ๊ณ ์บ์ ํจ๊ณผ๋ฅผ ๋ณด๋ฉด์ ์ต์ ํ
- ๋๋ ํ
- Vite,ย ESBuild์ ๊ฐ์ ์ต์ ๋น๋ ๋๊ตฌ ํ์ฉ
- ์ฝ๋ ์์ถ (minification) ๋ฐ ๋ฒ๋ค๋ง
- ํด๋ผ์ด์ธํธ ๋์ ๋ ๋๋ง ํผํ๊ธฐ
- Server-Side Rendering (SSR)
- ๋์ ์ผ๋ก ์๋ฒ์์ ๋ ๋๋ง ํด์ ์ฃผ๋ ๊ฒ๋ค๋ก ์ปดํ์ผ๋๋ ํจ๊ณผ
- ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง์ด ์ฒซ ๋ ๋๋ง ๋๋ ํจ์ฌ ์ข์
- ํ์ง๋ง ์๋ฒ๊ฐ ๋ณต์กํด์ง๊ณ view๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์
- ์ด๊ธฐ ํ์ด์ง๋ ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง , ๋๋จธ์ง๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง์ด ์ด์์ ์ธ๋ฐ ์๋ฒ์์๋ ์ด๋ฅผ ๋ถ๋ฆฌํด์ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์
- Pre-Rendering (์:ย prerender-loader)
- Static Site Generation (SSG)ย ํ์ฉ ๊ฐ๋ฅ ์ฌ๋ถ ํ์ธ
- ๋ฆฌ์กํธ์์ ์ ๊ณตํ๋ API๋ฅผ ํ์ฉํด์ ํด๋ณด๊ธฐ
- Server-Side Rendering (SSR)
- Lazy Loading(์ง์ฐ๋ก๋ฉ)
- ์คํฌ๋กค์ด ๋ด๋ ค์ง๋ ์์ ์ ๋จ๊ณ์ ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์๊ฒ ํ๋ ๊ฒ
- Lazy Component Loading (Dynamic JS Loading)
- Image Lazy Loading (
loading="lazy") - React.lazy๋ฅผ ํตํด ๊ทธ๋๊ทธ๋ ์ปดํฌ๋ํธ ๊ฐ์ ธ์ค๊ธฐ
- IntersectionObserver APIย ํ์ฉ
- HTTP Header์ ์์ฑ ํ์ฉ
- Cache-Control (
max-age,ยno-cache,ยno-store) - Expires (์บ์ ๋ง๋ฃ ์๊ฐ)
- Last-Modified / If-Modified-Since (๋ง์ง๋ง ๊ฐฑ์ ์๊ฐ)
- ETagย ํ์ฉ: ๋ฆฌ์์ค ๋ณ๊ฒฝ ์ฌ๋ถ๋ฅผ ์๋ฒ์์ ํ๋จ
- ์๋ฒ๊ฐ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ ๋ ETag ๊ฐ์ ์์ฑํด ์๋ต ํค๋์ ํฌํจ (ETag: โabc123โ)
- ๋ธ๋ผ์ฐ์ ๋ ์ดํ ์์ฒญ์์ If-None-Match ํค๋์ ETag ๊ฐ์ ํฌํจ (If-None-Match: โabc123โ)
- ์๋ฒ๋ ETag๋ฅผ ๋น๊ต (๊ฐ์ด ๊ฐ์ผ๋ฉด ๋ฆฌ์์ค๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ผ๋ฏ๋ก 304 Not Modified๋ฅผ ๋ฐํ)
- Cache-Control (
- ์ด๋ฏธ์ง ์ต์ ํ
- WebP, AVIF ํฌ๋งท์ผ๋ก ์ด๋ฏธ์ง ๋ณํ
- WOFF2 ํฐํธ ํ์ฉ: WOFF๋ณด๋ค ๋ ์์ ํฌ๊ธฐ๋ก ์์ถ ๊ฐ๋ฅ
- ๊ธฐ์กด ํฐํธ ํ์ผ์ WOFF2๋ก ๋ณํํ์ฌ ๋ก๋ฉ ์๋ ๊ฐ์
2. ๋ฐ์ ์ง์ฐ, ์ ๋๋ฉ์ด์ ์ง์ฐ ํด๊ฒฐ
- ๋ฉ์ธ ์ค๋ ๋ Blocking ๋ฐฉ์ง
- DOM ์์ ์ต์ํ (Reflow์ Repaint ๋จ๊ณ ์ ๊ฑฐ ๋
ธ๋ ฅ)
- reflow๋ repaint๊ฐ ์ต๊ทผ๋ค์ด์๋ ๋ฆฌ์กํธ์์ ์ต์ ํ๋ฅผ ์์ผ์ค
- Reflow ์ค์ด๊ธฐ
- Composite ๋จ๊ณ์์ ๋์ํ๋๋ก GPU ๊ฐ์ ์์ฑ ์ฌ์ฉ
- 3D Transform (
translate3d) - Video/Canvas ์์ ํ์ฉ
transform/opacityย ๊ธฐ๋ฐ CSS ์ ๋๋ฉ์ด์ (Keyframes, Transition)will-changeย ์์ฑ ์ ์ฉ
- DOM ์์ ์ต์ํ (Reflow์ Repaint ๋จ๊ณ ์ ๊ฑฐ ๋
ธ๋ ฅ)
- ์ค๋ณต ๊ณ์ฐ ์ค์ด๊ธฐ
- Memoization (
useMemo)- ๊ฐ์ ์์ ์ด ์ผ์ด๋ ํ๋ฅ ์ด ์ ๊ณ์ฐ์ ๋ํด์ ๋ฉ๋ชจ์ด์ ์ด์
- ํจ์ฌ ๋น ๋ฅด๊ฒ ์บ์๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋๋ก ํจ
- ๋ฆฌ๋ ๋๋ง๋ง๋ค key value์ ๋ณด๊ดํ๊ณ ์๋ ์บ์ฑ ๋ฐฉ๋ฒ
- Memoization (
- ๋คํธ์ํฌ ์์ฒญ ์บ์ ์ ๋ต
- Service Worker ๋ฐ PWA๋ฅผ ํ์ฉํ ์บ์ฑ
- Cache Header ์ ๋ต
- Stale-while-Revalidate
- ์ด๋ ์๊ฐ๊น์ง๋ ์บ์์์ ๊ฐ์ ธ์ค๊ณ ๊ทธ ๋ค๋ถํฐ๋ ์๋ฒ์์ ๊ฐ์ ธ์ฌ ์ ์๋๋ก ํจ
- Prefetch ๋ฐ Preload ํ์ฉ
- Preload ์ฌ์ฉย :
- ํน์ ๋ฆฌ์์ค๊ฐ ์ฌ์ฉ๋ ๊ฒ์ ํ์คํ ์๊ณ ์์ ๋, ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ฅผ ์ฐ์ ์ ์ผ๋ก ๋ค์ด๋ก๋
<link rel="preload" href="/styles/main.css" as="style"> <link rel="preload" href="/scripts/main.js" as="script">- Prefetch ์ฌ์ฉย :
- ์์ธก ๋ก๋ฉ์ด๋ ์ฌ์ฉ์๊ฐ ๋ค์์ ํ์ํ ๋ฆฌ์์ค๋ฅผ ๋ฏธ๋ฆฌ ๋ก๋ํ ๋ ์ฌ์ฉ.
-
react-helmet ๋ฑ์ ์ฌ์ฉ
-
<link rel="prefetch" href="/images/background.jpg">
์ฑ๋ฅ ๊ด์ ์ผ๋ก ๋ณด๋ HTTP์ ๋ฐ์
1. HTTP/1.1 (1997๋ )
- TLS ์ํธํ ํต์
- Keep-Alive ๊ธฐ๋ณธ ์ ๊ณต (TCP ์ฐ๊ฒฐ ์ฌ์ฌ์ฉ)
- XMLHttpRequest
- fetch โ Promiseํจํด์ด ์ ์ฉ๋์ด ์์ง๋ง XMLHttpRequest๋ ํจํด์ด ์์ ์ฉ๋ผ์์
2. HTTP/1.1์ ํ๊ณ
- ๋ฆฌ์์ค ์ฐ์ ์์ ์์ด ๋ค์ด๋ก๋
- ํค๋ ํฌ๊ธฐ ์ฆ๊ฐ
- ๋์์ฑ์ ์ํด ์ฌ๋ฌ ๊ฐ์ ์ฐ๊ฒฐ(connection) ํ์
3. HTTP/2.0 (2015๋ )
- HTTP/2.0์ ์คํธ๋ฆผ-ํ๋ ์ ๊ด๊ณ
- ์ฌ๋ฌ ๊ฐ์ ์คํธ๋ฆผ์ ๋์์ ์ ์ก ๊ฐ๋ฅ
- ๊ฐ ์คํธ๋ฆผ์ ๋ค์์ ํ๋ ์์ผ๋ก ๊ตฌ์ฑ
- ์:
- ์คํธ๋ฆผ 1 โ ํ๋ ์ A, B, C
- ์คํธ๋ฆผ 2 โ ํ๋ ์ X, Y, Z
- ์:
- ํ๋ ์์ ๋ ๋ฆฝ์ ์ผ๋ก ์ ์ก๋๋ฉฐ ๊ณ ์ ID๋ฅผ ๊ฐ์ง
- ์คํธ๋ฆผ๊ณผ ํ๋ ์์ ๋ ๋ฆฝ์ ์ฒ๋ฆฌ๋ฅผ ํตํด ๋ณ๋ ฌ ๋ฐ์ดํฐ ์ ์ก ๊ฐ๋ฅ
- ๊ธฐ๋ฅ ๊ฐ์
- ๋ค์ค ์์ฒญ/์๋ต ์ฒ๋ฆฌ (Multiplexing)
- ํค๋ ํ๋ ์์ถ (HPACK)
- header packing
- Server Push ์ง์
4. HTTP/3 (2020๋ )
- QUIC ํ๋กํ ์ฝ ๊ธฐ๋ฐ
- UDP ์์์ ๋์ํ๋ฉฐ TCP์ ์ค๋ฒํค๋๋ฅผ ์ ๊ฑฐ
- 3-way Handshake ์๋ต
- ์ ์ ์ ๋ณด๋ฅผ ์บ์ฑ(RTT) ๋ฑ์ ํตํด ์ ๋ขฐ์ฑ ํ๋ณด
- ํจํท ์์ค ๋ณต๊ตฌ๋ฅผ ์ํดย ํจํท ์ฌ์ ์ก ๋ฐ ์ผ๋ จ๋ฒํธ ์ง์
- ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ฐํ
- ์ฌ๋ฌ ๊ฐ์ ์์ฒญ๊ณผ ์๋ต์ด ํ๋์ ์ฐ๊ฒฐ์์ ๋์์ ์ฒ๋ฆฌ
- ํ๋ ์ ๋จ์๋ก ๋ถ๋ฆฌ๋ UDP ํจํท ์ฌ์ฉ
- HTTP/3 ์ ์ฉ ์ฌ๋ก
- ์ฃผ์ CDN ์ ๊ณต์๋ค์ด HTTP/3 ์ง์ (Cloudflare, AWS CloudFront ๋ฑ)