728x90
1. ์น ์ฌ์ดํธ ์ต์ ํ ๋ฐฉ๋ฒ
- ๋ฒ ์คํธ : ์๋ฌด๊ฒ๋ ํ์ง ์๋๋ค.
- ํ์ค์ ์ธ ์ ํ : ๋ ์ผํ๋ค.
2. ์ต์ ํ ์์ ์งํ ํ๋ฆ
- ์ง๋จ > ๊ฐ์ > ํ ์คํธ > ์ง๋จ
1. ์ง๋จ
- ์ฒซ ํ์ด์ง ์ ์ด๋ ๊ฒ ๋๋ฆผ?
- Core Web Vitals
- First Contentful Paint
- Lagest Contentful Paint
- Cumulative Layout Shift
- Core Web Vitals
- ์ ์ด๋ ๊ฒ ๋ฆ๊ฒ ๋ฐ์ํจ?
- Core Web Vitals
- ์ ์ด๋ ๊ฒ ๋๊น?
- ์ ๋๋ฉ์ด์ ๋์
- ํฌ๋กฌ ๊ฐ๋ฐ์๋๊ตฌ - lighthouse

- ํฌ๋กฌ ๊ฐ๋ฐ์๋๊ตฌ - performance, memory(๋์๋ ์๋?)
2.1 ๋ฌธ์ ํด๊ฒฐ - ๋ก๋ฉ ์ง์ฐ
- HTML Parsing ๋ฐฉํดํ์ง ์๊ธฐ
- script ์์น ์กฐ์ (body ๋์ผ๋ก ์ด๋)
- defer/async ์์ฑ ํ์ฉ
- Build๋ฅผ ํตํ ์ฝ๋ ์ต์ ํ
- ์ฝ๋ ์์ถ (minification) ๋ฐ ๋ฒ๋ค๋ง
- ์ฝ๋ ์คํ๋ฆฌํ (Code Splitting)
- Vite, ESBuild์ ๊ฐ์ ์ต์ ๋น๋ ๋๊ตฌ ํ์ฉ
- ํด๋ผ์ด์ธํธ ๋์ ๋ ๋๋ง ํผํ๊ธฐ
- Server-Side Rendering (SSR)
- Pre-Rendering
- ์ ์ ์ธ ์ฌ์ดํธ์ (๋ธ๋ก๊ทธ ๋ฑ) ์ฌ์ ๋ ๋๋ง(๋ฏธ๋ฆฌ HTML๋ง๋ค์ด๋๊ธฐ)
- ์: Vite ๊ธฐ๋ฐ์ vite-plugin-ssr
- NEXT.JS์ SSG (Static Site Generation)
- Lazy Loading
- Lazy Component Loading (Dynamic JS Loading)
- Image Lazy Loading (loading="lazy")
- ํ์ง๋ง LCP์ํฅ์ ์ฃผ๋ ์ด๋ฏธ์ง์๋ 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๋ฅผ ๋ฐํ)
- ์ด๋ฏธ์ง ์ต์ ํ
- WebP, AVIF ํฌ๋งท์ผ๋ก ์ด๋ฏธ์ง ๋ณํ
- ๊ธฐ์กด ํฐํธ ํ์ผ์ WOFF2๋ก ๋ณํํ์ฌ ๋ก๋ฉ ์๋ ๊ฐ์
- WOFF2 ํฐํธ ํ์ฉ: WOFF๋ณด๋ค ๋ ์์ ํฌ๊ธฐ๋ก ์์ถ ๊ฐ๋ฅ
2.2 ๋ฌธ์ ํด๊ฒฐ - ๋ฐ์ ์ง์ฐ
- ๋ฉ์ธ ์ค๋ ๋ Blocking ๋ฐฉ์ง
- DOM ์์ ์ต์ํ (๋ถํ์ํ Layout๊ณผ Paint ์ ๊ฑฐ ๋ ธ๋ ฅ)
- Layout ์ค์ด๊ธฐ
- Composite ๋จ๊ณ์์ ๋์ํ๋๋ก GPU ๊ฐ์ ์์ฑ ์ฌ์ฉ
- ๋ ๋ฆฝ์ ์ธ ๋ ์ด์ด ํ์ฉ(transform, opacity)
- Video/Canvas ์์ ํ์ฉ
- transform/opacity ๊ธฐ๋ฐ CSS ์ ๋๋ฉ์ด์ (Keyframes, Transition)
- ์ค๋ณต ๊ณ์ฐ ์ค์ด๊ธฐ
- Memoization ๊ธฐ๋ฒ
- ๋คํธ์ํฌ ์์ฒญ ์บ์ ์ ๋ต
- Service Worker ๋ฐ PWA๋ฅผ ํ์ฉํ ์บ์ฑ
- Cache Header ์ ๋ต
- Prefetch ๋ฐ Preload ํ์ฉ
- Preload ์ฌ์ฉ :
- ํ์ฌ ํ์ด์ง์์ ๊ณง๋ฐ๋ก ์ฐ์ผ ํต์ฌ ๋ฆฌ์์ค(ํฐํธ, ๋ฉ์ธ CSS/JS)๋ฅผ ์ต์์ ์ฐ์ ์์๋ก ๋ค์ด๋ก๋
<link rel="preload" href="/styles/main.css" as="style"> <link rel="preload" href="/scripts/main.js" as="script">- Prefetch ์ฌ์ฉ :
- ๋ค์ ํ์ด์ง์์ ์ฌ์ฉ๋ ๋ฆฌ์์ค๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ํ๊ฐํ ๋ ๋ฎ์ ์ฐ์ ์์๋ก ๋ฏธ๋ฆฌ ๋ค์ด๋ก๋ํ์ฌ ์บ์์ ์ ์ฅ
<link rel="prefetch" href="/images/background.jpg"> - Speculation Rules API - ๊ฐ์ ๋ preloading ๊ธฐ๋ฒ
- ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค์ ํ์ด์ง๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฏธ๋ฆฌ ์คํ(Prerender)ํ๊ฒ ๋ง๋๋ ์ต์ ํ์ค API
- JSON ํํ์ ๊ท์น์ ํตํด ์ด๋ค ๋งํฌ๋ฅผ ์ด๋ค ๊ฐ๋๋ก ์ค๋นํ ์ง ์ธ๋ฐํ๊ฒ ์ ์ด
<script type="speculationrules">
{
"prerender": [
{
"source": "list",
"urls": ["/main", "/product/detail"],
"eagerness": "moderate"
}
],
"prefetch": [
{
"where": { "href_matches": "/articles/*" },
"eagerness": "conservative"
}
]
}
</script>
- (์ฐธ๊ณ ) ์ง์๋์ง ์๋ ๋ธ๋ผ์ฐ์ ์์๋ rel="prefetch" ๋ฐฉ์์ผ๋ก fallback
์ฑ๋ฅ ๊ด์ ์ผ๋ก ๋ณด๋ HTTP์ ๋ฐ์
HTTP ๋ ๋ฒจ์์์ ์ฑ๋ฅ ๊ฐ์ ๋ฐฉ๋ฒ๋ ์์๋๋ฉด ์ข์.
1. HTTP/1.1 (1997๋ )
- TLS ์ํธํ ํต์
- Keep-Alive ๊ธฐ๋ณธ ์ ๊ณต (TCP ์ฐ๊ฒฐ ์ฌ์ฌ์ฉ)
- 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)
Server Push ์ง์(์ฌ์ค์ deprecated)
4. HTTP/3 (2020๋ ~ ํ์ฌ ํ์ค)
HTTP/3๋ ๋ก์ ์์ง์ธ TCP๋ฅผ ๋ฒ๋ฆฌ๊ณ , QUIC(ํต) ์ด๋ผ๋ ์๋ก์ด ์์ง์ ์ฅ์ฐฉ
- QUIC ํ๋กํ ์ฝ ๊ธฐ๋ฐ (UDP ํ์ฉ)
- ์ฐ๊ฒฐ ์ง์ฐ ์ต์ํ (1-RTT / 0-RTT)
- 1-RTT(Round-Trip Time):์ฒ์ ์ ์ํ ๋ ์ธ์ฌ์ ์ํธํ ์ค์ ์ ํ ๋ฒ์ ๋๋.
(TCP+TLS ๋๋น ์ ๋ฐ ์๊ฐ) - 0-RTT: ์ฌ๋ฐฉ๋ฌธ ์์๋ ์ธ์ฌ์กฐ์ฐจ ์๋ตํ๊ณ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋
- 1-RTT(Round-Trip Time):์ฒ์ ์ ์ํ ๋ ์ธ์ฌ์ ์ํธํ ์ค์ ์ ํ ๋ฒ์ ๋๋.
- TCP HOLB(Head-Of-Line Blocking) ๋ฌธ์ ํด๊ฒฐ
- ์ฌ๋ฌ ๋ฆฌ์์ค๋ฅผ ๋ ๋ฆฝ์ ์ธ ํ์ดํ(์คํธ๋ฆผ)๋ก ๋ณด๋ด์ ํ ํ์ดํ์์ ์ฌ๊ณ (ํจํท ์ ์ค)๊ฐ ๋๋ ๋ค๋ฅธ ํ์ดํ๋ ๋ฉ์ถ์ง ์๊ณ ๊ทธ๋๋ก ์งํ
- ์ฐ๊ฒฐ ์ง์ฐ ์ต์ํ (1-RTT / 0-RTT)
- ๋คํธ์ํฌ ์ ํ ์ต์ ํ (Connection ID)
- ๊ณผ๊ฑฐ์๋ Wi-Fi์์ LTE๋ก ๋ฐ๋๋ฉด IP๊ฐ ๋ณํด ์ฐ๊ฒฐ์ด ๋๊น.
- HTTP/3๋ ๊ณ ์ ํ ID๋ฅผ ๋ถ์ฌํด ์ฌ์ฉ์๊ฐ ์ด๋ ์ค์๋ ๋๊น ์๋ ๋ถ๋๋ฌ์ด ์ฐ๊ฒฐ์ ์ ์ง
- ๋ณด์ ๋ด์ฅ (TLS 1.3 ๊ธฐ๋ณธ ํ์ฌ)
- ์ต์ ์ํธํ ํ์ค์ธ TLS 1.3์ด ์์ง ๋ด๋ถ์ ์ผ์ฒดํ์ผ๋ก ์ค๊ณ๋์ด ๋ณด์ ์๋ฆฝ ๋จ๊ณ๊ฐ ํจ์ฌ ๋น ๋ฅด๊ณ ์์
'๐ WEB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| RAG ์ฐ๋ ์น ์ฑ (0) | 2026.01.23 |
|---|---|
| ์น ์ฌ์ดํธ ์ต์ ํ ๋ฐฉ๋ฒ (0) | 2026.01.19 |
| HTTP Multipart/form-data ์ง์ ํ์ ๋ง๋ค๋ฉฐ ์๋ฆฌ ์ดํดํ๊ธฐ (0) | 2025.10.01 |
| Node.js๋ก ๊ณ ์ฑ๋ฅ ์น์๋ฒ ๋ง๋ค๊ธฐ: Cluster์ Worker Threads (0) | 2025.09.28 |
| HTTP ํจํท ๋ถ์ํ๊ธฐ (0) | 2025.09.18 |