Skip to content
SEO/seo-tips

λ‘œλ”©μ†λ„ μ΅œμ ν™” μ›ΉνŽ˜μ΄μ§€ λ‘œλ”©μ˜ 단계별 κ³Όμ •κ³Ό μŠ€νƒ€μΌ 적용 단계 μ„€λͺ…

효과적인 SEO κ°œμ„ μ„ μœ„ν•œ μ›ΉνŽ˜μ΄μ§€ λ‘œλ”© 속도 μ΅œμ ν™” 방법

μ›Ή νŽ˜μ΄μ§€ λ‘œλ”© 과정은 검색 μ΅œμ ν™”(SEO)의 핡심 μš”μ†Œμž…λ‹ˆλ‹€. 이 글은 DNS μ‘°νšŒλΆ€ν„° DOM 생성, λ Œλ”λ§ 트리λ₯Ό 거쳐 μ΅œμ’…μ μœΌλ‘œ 화면에 ν‘œμ‹œλ˜λŠ” μ›ΉνŽ˜μ΄μ§€ λ‘œλ”© 단계, 각 λ‹¨κ³„μ—μ„œ μ›Ή μ„±λŠ₯을 μ΅œμ ν™”ν•˜κΈ° μœ„ν•΄ μš΄μ˜μžκ°€ μ μš©ν•  수 μžˆλŠ” ꡬ체적인 방법(dns-prefetch, preconnect, CSS 및 JavaScript μ΅œμ ν™”)을 μ œκ³΅ν•©λ‹ˆλ‹€. μ΄λŠ” Core Web Vitals(LCP, INP, CLS) μ§€ν‘œ κ°œμ„ μ— ν•„μˆ˜μ μΈ μ •λ³΄μž…λ‹ˆλ‹€.


검색 μ΅œμ ν™” ν–₯상을 μœ„ν•œ μ›Ή νŽ˜μ΄μ§€ λ‘œλ”© 단계 뢄석 및 병λͺ© ν˜„μƒ

μ›Ή νŽ˜μ΄μ§€ λ‘œλ”© 과정은 검색 μ΅œμ ν™”μ— μ€‘μš”ν•œ μš”μ†Œ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. μ›Ή νŽ˜μ΄μ§€ λ‘œλ”©μ€ DNS 쑰회둜 IP μ£Όμ†Œλ₯Ό μ–»κ³ , TCPλ₯Ό 톡해 μ„œλ²„μ™€ 연결을 ν•˜κ²Œλ©λ‹ˆλ‹€. HTTP μš”μ²­μ„ 톡해 μ„œλ²„μ—μ„œ HTMLκ³Ό CSSλ₯Ό λ°›μ•„ DOM 및 λ Œλ”λ§ 트리λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. μƒμ„±λœ νŠΈλ¦¬μ— CSS둜 μŠ€νƒ€μΌμ„ μ μš©ν•˜κ³  JavaScriptλ₯Ό μ‹€ν–‰ν•˜μ—¬ 동적 μ½˜ν…μΈ λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. 이후 λ ˆμ΄μ•„μ›ƒμ„ κ³„μ‚°ν•˜κ³ , νŽ˜μΈνŒ… 및 μ»΄ν¬μ§€νŒ…μ„ 톡해 μ΅œμ’…μ μœΌλ‘œ 화면에 νŽ˜μ΄μ§€λ₯Ό ν‘œμ‹œν•˜κ²Œ λ©λ‹ˆλ‹€.

검색엔진 μ΅œμ ν™” μž‘μ—…μ„ μœ„ν•΄μ„œλŠ” μ›Ή νŽ˜μ΄μ§€κ°€ μ–΄λ–€ λ°©μ‹μœΌλ‘œ λ‘œλ”©μ΄ λ˜λŠ”μ§€ μ›ΉνŽ˜μ΄μ§€ λ‘œλ”© λ‹¨κ³„μ˜ 기본적인 이해가 있으면 μž‘μ—…ν•˜κΈ°κ°€ μˆ˜μ›”ν•΄μ§‘λ‹ˆλ‹€. 각 λ‹¨κ³„λ³„λ‘œ μš΄μ˜μžκ°€ μ΅œμ ν™” μž‘μ—…μ—μ„œ μ§„ν–‰ν•  수 μžˆλŠ” λΆ€λΆ„κ³Ό ν•  수 μ—†λŠ” 뢀뢄을 μ•Œκ³  ν•  수 μžˆλŠ” 뢀뢄에 λŒ€ν•œ μž‘μ—…μ„ μ§„ν–‰ν•΄μ•Ό ν•˜λ©° μ›ΉνŽ˜μ΄μ§€ λ‘œλ”© μ‹œ κ·Έ μž‘μ—…μ€ 각 λ‹¨κ³„μ˜ 일뢀뢄에 ν•œμ •λ  수 μžˆμŠ΅λ‹ˆλ‹€.

검색엔진 μ΅œμ ν™” ν›„ λ‹€λ₯Έ μš”μ†Œλ‘œ 인해 λ°œμƒν•˜λŠ” λ¬Έμ œλ„ μ°¨ν›„ 점검 ν›„ νŒŒμ•…ν•΄μ•Ό ν•˜λ©° κ·Έ 뢀뢄이 μ›ΉνŽ˜μ΄μ§€μ˜ μ–΄λ–€ κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ”μ§€λŠ” λŒ€λž΅μ μœΌλ‘œ νŒŒμ•…ν•  ν•„μš”μ„±μ΄ μžˆμ–΄ μ•„λž˜λŠ” μ›ΉνŽ˜μ΄μ§€ λ‘œλ”©μ˜ 단계별 μ„€λͺ…을 κ°„λ‹¨ν•˜κ²Œ μš”μ•½ μ •λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€.

μ›ΉνŽ˜μ΄μ§€ λ‘œλ”© μˆœμ„œμ™€ Core Web Vitals μ΅œμ ν™”

1. DNS 쑰회 (DNS Lookup) 및 λ¦¬μ†ŒμŠ€ 사전 μ—°κ²° (TTFB κ°œμ„ )

DNS μ‘°νšŒλŠ” μ‚¬μš©μžκ°€ μ›Ήμ‚¬μ΄νŠΈ μ£Όμ†Œλ₯Ό μž…λ ₯ν•˜λ©΄ λΈŒλΌμš°μ €λŠ” 도메인 이름을 IP μ£Όμ†Œλ‘œ λ³€ν™˜ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. 일반적으둜 μ‚¬λžŒλ“€μ΄ μ‚¬μš©ν•˜κΈ° νŽΈλ¦¬ν•œ μ‚¬μ΄νŠΈ 이름을 컴퓨터가 이해할 수 μžˆλŠ” 숫자둜 λ³€κ²½ν•΄μ£ΌλŠ” μž‘μ—…μž…λ‹ˆλ‹€. DNS(Domain Name System)둜 μ„œλ²„μ— μš”μ²­μ„ 보내면 DNS μ„œλ²„λŠ” 도메인 이름에 ν•΄λ‹Ήν•˜λŠ” IP μ£Όμ†Œλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. μ΄λ•Œ μΊμ‹œλ₯Ό μ΄μš©ν•΄μ„œ μΊμ‹œ 정보가 λΈŒλΌμš°μ €μ— μ‘΄μž¬ν•˜λ©΄ DNS 쑰회 과정을 μƒλž΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

νŽ˜μ΄μ§€μ—μ„œ μ™ΈλΆ€μ˜ μ—¬λŸ¬ 개의 λ‹€λ₯Έ μ‚¬μ΄νŠΈ 정보λ₯Ό κ°€μ Έμ˜¬ λ•Œ 이 κ³Όμ •μ—μ„œ λ‘œλ”© μ‹œ λΆ€ν•˜κ°€ 걸릴 수 있기 λ•Œλ¬Έμ— νŽ˜μ΄μ§€μ— 많이 μ‚¬μš©ν•˜λŠ” 정보λ₯Ό κ°€μ Έμ˜€λŠ” μ‚¬μ΄νŠΈμ— λŒ€ν•΄μ„œ 미리 μ—°κ²°ν•  μ€€λΉ„λ₯Ό ν•΄μ£Όλ©΄ μ’€ 더 λΉ λ₯΄κ²Œ μ™ΈλΆ€ λ¦¬μ†ŒμŠ€λ₯Ό λ‘œλ”©μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

dns-prefetchλŠ” λΈŒλΌμš°μ €κ°€ 도메인 이름을 미리 DNS μ‘°νšŒν•˜μ—¬ IP μ£Όμ†Œλ₯Ό μΊμ‹œν•˜λ„λ‘ μ„€μ •ν•©λ‹ˆλ‹€.
preconnectλŠ” λΈŒλΌμš°μ €κ°€ μ™ΈλΆ€ 도메인에 λŒ€ν•œ 연결을 미리 μ„€μ •ν•˜λ„λ‘ μ§€μ‹œν•©λ‹ˆλ‹€.

βœ” μ˜ˆμ‹œ (μ™ΈλΆ€ λ¦¬μ†ŒμŠ€ 사전 연결을 ν†΅ν•œ μ΅œμ ν™”)

link rel="preconnect" href="https://fonts.googleapis.com"
link rel="dns-prefetch" href="https://fonts.gstatic.com"

이 기법은 TTFB(Time To First Byte)λ₯Ό 쀄여 LCP(Largest Contentful Paint) μ‹œκ°„μ„ κ°œμ„ ν•˜λŠ” 데 효과적이며, 특히 ꡬ글 ν°νŠΈλ‚˜ μ™ΈλΆ€ CDN λ“± λ‘œλ”©μ΄ ν•„μš”ν•œ λ¦¬μ†ŒμŠ€μ— μ‚¬μš©λ©λ‹ˆλ‹€.

2. μ„œλ²„μ™€ μ—°κ²° (TCP Handshake) 및 3. HTTP μš”μ²­ / 4. μ„œλ²„ 응닡

λΈŒλΌμš°μ €λŠ” DNS 쑰회λ₯Ό 톡해 얻은 IP μ£Όμ†Œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ›Ή μ„œλ²„μ™€ TCP 연결을 μ„€μ •ν•©λ‹ˆλ‹€. μ΄λ•Œ λ°μ΄ν„°μ˜ 전솑 속도, νŒ¨ν‚·μ˜ μ†μ‹€μ΄λ‚˜ 였λ₯˜ λ°œμ†‘ λ“±μ˜ μ œμ–΄λ₯Ό ν•˜κ²Œ λ©λ‹ˆλ‹€. μ—°κ²° ν›„ HTTP μš”μ²­μ„ μ„œλ²„μ— 보내고, μ„œλ²„λŠ” μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³  HTML μ½”λ“œ, μƒνƒœ μ½”λ“œ, 헀더 정보 등을 ν¬ν•¨ν•œ 응닡을 λ³΄λƒ…λ‹ˆλ‹€. 이 초기 μ—°κ²° 및 응닡 λ‹¨κ³„λŠ” TTFB에 직접적인 영ν–₯을 미치며, TTFBκ°€ λΉ λ₯Όμˆ˜λ‘ 전체 λ‘œλ”© μ„±λŠ₯이 ν–₯μƒλ©λ‹ˆλ‹€. μ„œλ²„ μΈ‘ μ΅œμ ν™”(CDN, 캐싱, μ„œλ²„ 응닡 μ‹œκ°„ 단좕)κ°€ ν•„μˆ˜μ μž…λ‹ˆλ‹€.

5. HTML νŒŒμ‹± 및 DOM 트리 생성 (DOM)

λΈŒλΌμš°μ €λŠ” HTML μ½”λ“œλ₯Ό 읽고 λΆ„μ„ν•˜μ—¬ DOM(Document Object Model) 트리λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. DOM νŠΈλ¦¬λŠ” HTML λ¬Έμ„œμ˜ ꡬ쑰λ₯Ό ν‘œν˜„ν•˜λ©°, 이 κ³Όμ •μ—μ„œ μ™ΈλΆ€ λ¦¬μ†ŒμŠ€(CSS, JavaScript)λ₯Ό λ°œκ²¬ν•˜λ©΄ λ‘œλ“œλ₯Ό μš”μ²­ν•©λ‹ˆλ‹€. 이 νŒŒμ‹± κ³Όμ •μ—μ„œ λ Œλ”λ§ 차단 λ¦¬μ†ŒμŠ€(Render Blocking Resource)κ°€ 발견되면 νŒŒμ‹±μ΄ μΌμ‹œ 쀑단될 수 μžˆμŠ΅λ‹ˆλ‹€.

6. CSS 처리 및 CSSOM 생성

ꡬ쑰가 ν˜•μ„±λ˜λ©΄ CSS νŒŒμΌμ„ 읽어 λ“€μ—¬μ„œ HTML λ¬Έμ„œμ˜ μŠ€νƒ€μΌμ„ μ •μ˜ν•˜κ²Œ λ©λ‹ˆλ‹€. λΈŒλΌμš°μ €λŠ” CSSλ₯Ό νŒŒμ‹±ν•˜μ—¬ CSSOM(CSS Object Model) 트리λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. CSSλŠ” λ Œλ”λ§ 차단 λ¦¬μ†ŒμŠ€(Rendering Blocking Resource)μ΄λ―€λ‘œ, μž‘μ€ 핡심 CSSλŠ” HTML 파일 내에 인라인으둜 μ‚½μž…ν•˜κ³ (Critical CSS), λ‚˜λ¨Έμ§€ CSSλŠ” 비동기 λ‘œλ”©μ„ μ μš©ν•˜μ—¬ FCP(First Contentful Paint)λ₯Ό κ°œμ„ ν•΄μ•Ό ν•©λ‹ˆλ‹€.

7. JavaScript μ‹€ν–‰ 및 μƒν˜Έμž‘μš©μ„± μ΅œμ ν™”

λΈŒλΌμš°μ €λŠ” HTML λ¬Έμ„œμ— ν¬ν•¨λœ JavaScriptλ₯Ό νŒŒμ‹±ν•˜κ³  μ‹€ν–‰ν•©λ‹ˆλ‹€. JavaScriptλŠ” DOMκ³Ό CSSOM을 μˆ˜μ •ν•  수 있으며, 이둜 인해 νŽ˜μ΄μ§€μ˜ λ‚΄μš©μ΄λ‚˜ μŠ€νƒ€μΌμ΄ λ™μ μœΌλ‘œ 변경될 수 μžˆμŠ΅λ‹ˆλ‹€. JavaScript 싀행은 메인 μŠ€λ ˆλ“œλ₯Ό μ°¨μ§€ν•˜μ—¬ μ‚¬μš©μž μž…λ ₯에 λŒ€ν•œ νŽ˜μ΄μ§€μ˜ λ°˜μ‘μ„ μ§€μ—°μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” INP(Interaction to Next Paint)와 TBT(Total Blocking Time)에 직접적인 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€. λΆˆν•„μš”ν•œ μŠ€ν¬λ¦½νŠΈλŠ” deferλ‚˜ async 속성을 μ‚¬μš©ν•˜μ—¬ λΉ„λ™κΈ°μ μœΌλ‘œ λ‘œλ”©ν•˜κ³ , μ½”λ“œλ₯Ό μ΅œμ†Œν™”(Minify)ν•˜μ—¬ μ‹€ν–‰ μ‹œκ°„μ„ 단좕해야 ν•©λ‹ˆλ‹€.

8. λ Œλ”λ§ 트리 ꡬ성 (Render Tree Creation) 및 9. λ ˆμ΄μ•„μ›ƒ 계산 (Reflow)

λΈŒλΌμš°μ €λŠ” DOMκ³Ό CSSOM을 κ²°ν•©ν•˜μ—¬ λ Œλ”λ§ 트리λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. λ Œλ”λ§ νŠΈλ¦¬λŠ” 화면에 μ‹€μ œλ‘œ 그렀질 μš”μ†Œμ˜ μ •λ³΄λ§Œμ„ ν¬ν•¨ν•©λ‹ˆλ‹€. 이후 λΈŒλΌμš°μ €λŠ” λ Œλ”λ§ 트리λ₯Ό 기반으둜 각 μš”μ†Œμ˜ μ •ν™•ν•œ μœ„μΉ˜μ™€ 크기λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€. 이 과정을 λ ˆμ΄μ•„μ›ƒ λ˜λŠ” λ¦¬ν”Œλ‘œμš°λΌκ³  ν•©λ‹ˆλ‹€.

검색 μ΅œμ ν™”μ—μ„œ κ°€μž₯ μ€‘μš”ν•œ CLS 츑정값이 이 λΆ€λΆ„μ—μ„œ κ°€μž₯ λ§Žμ€ 문제λ₯Ό μΌμœΌν‚€κ²Œ λ©λ‹ˆλ‹€. 예기치 μ•Šμ€ λ ˆμ΄μ•„μ›ƒ 변경을 μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•΄ 이미지에 width와 heightλ₯Ό λͺ…μ‹œν•˜κ±°λ‚˜, κ΄‘κ³  μ˜μ—­μ— 곡간을 미리 확보해야 CLS(Cumulative Layout Shift)λ₯Ό λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

블둝 μš”μ†Œ: 기본적으둜 전체 λ„ˆλΉ„λ₯Ό μ°¨μ§€ν•˜λ©°, μ€„λ°”κΏˆμ„ λ°œμƒμ‹œν‚΅λ‹ˆλ‹€.
인라인 μš”μ†Œ: 기본적으둜 μ½˜ν…μΈ μ˜ λ„ˆλΉ„μ— λ§žμΆ”μ–΄ 배치되며, μ€„λ°”κΏˆμ„ λ°œμƒμ‹œν‚€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

9. νŽ˜μΈνŒ… (Painting) 및 11. μ»΄ν¬μ§€νŒ… (Compositing)

λΈŒλΌμš°μ €λŠ” 각 μš”μ†Œλ₯Ό 화면에 κ·Έλ¦½λ‹ˆλ‹€. 이 κ³Όμ •μ—μ„œλŠ” 색상, ν…μŠ€νŠΈ, 이미지 등이 μ‹€μ œλ‘œ λ Œλ”λ§λ©λ‹ˆλ‹€. μ»΄ν¬μ§€νŒ…μ€ 각각의 λ Œλ”λ§λœ μš”μ†Œλ₯Ό κ²°ν•©ν•˜μ—¬ μ΅œμ’…μ μœΌλ‘œ 화면에 ν‘œμ‹œν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. λ³΅μž‘ν•œ λ ˆμ΄μ•„μ›ƒμ˜ 경우, λΈŒλΌμš°μ €λŠ” μ—¬λŸ¬ λ ˆμ΄μ–΄λ‘œ κ΅¬μ„±λœ νŽ˜μ΄μ§€λ₯Ό μ΄λ•Œ μ²˜λ¦¬ν•˜λ©°. 각 λ ˆμ΄μ–΄λŠ” λ…λ¦½μ μœΌλ‘œ λ Œλ”λ§λ˜λ©°, μ΅œμ’…μ μœΌλ‘œ 화면에 ν‘œμ‹œλ˜κΈ° 전에 ν•©μ³μ§‘λ‹ˆλ‹€.

10. νŽ˜μ΄μ§€ λ‘œλ”© μ™„λ£Œ (Load Event)

λͺ¨λ“  λ¦¬μ†ŒμŠ€κ°€ λ‘œλ“œλ˜κ³ , JavaScriptκ°€ μ‹€ν–‰λ˜κ³ , νŽ˜μ΄μ§€κ°€ λ Œλ”λ§λ˜λ©΄μ„œ λΈŒλΌμš°μ €μ— νŽ˜μ΄μ§€μ˜ λ‘œλ”©μ΄ μ™„λ£Œλ˜λŠ” μ‹œμ μž…λ‹ˆλ‹€.

검색 μ΅œμ ν™” κ³Όμ • μ›ΉνŽ˜μ΄μ§€ λ‘œλ”©κ³Όμ •
검색 μ΅œμ ν™” κ³Όμ • μ›ΉνŽ˜μ΄μ§€ λ‘œλ”©κ³Όμ •

Core Web Vitals μ§€ν‘œμ™€ λ‘œλ”© 단계별 μ—°κ΄€μ„± 정리

Google이 μ •μ˜ν•œ Core Web VitalsλŠ” μ‚¬μš©μž κ²½ν—˜μ„ μΈ‘μ •ν•˜λŠ” 핡심 μ§€ν‘œμ΄λ©°, μ›ΉνŽ˜μ΄μ§€ λ‘œλ”©μ˜ 각 단계와 λ°€μ ‘ν•˜κ²Œ κ΄€λ ¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜λŠ” μ£Όμš” μ§€ν‘œμ™€ μ΅œμ ν™”κ°€ ν•„μš”ν•œ λ‘œλ”© 단계λ₯Ό μ •λ¦¬ν•œ ν‘œμž…λ‹ˆλ‹€.

Core Web Vital μ§€ν‘œ μΈ‘μ • λ‚΄μš© μ–‘ν˜Έ κΈ°μ€€ μ£Όμš” κ΄€λ ¨ λ‘œλ”© 단계 핡심 μ΅œμ ν™” μ „λž΅
LCP
(Largest Contentful Paint)
λ‘œλ”© μ„±λŠ₯ (κ°€μž₯ 큰 μ½˜ν…μΈ  ν‘œμ‹œ μ‹œκ°„) 2.5초 이내 1~6단계 (특히, μ„œλ²„ 응닡, 이미지 λ‘œλ”©, CSS 차단) TTFB 단좕, Critical CSS 인라인, λ¦¬μ†ŒμŠ€ 사전 λ‘œλ”©
INP
(Interaction to Next Paint)
μƒν˜Έμž‘μš© 및 λ°˜μ‘μ„± (μ‚¬μš©μž μž…λ ₯ ν›„ ν™”λ©΄ λ°˜μ‘κΉŒμ§€μ˜ μ§€μ—° μ‹œκ°„) 200ms 미만 7단계 (JavaScript μ‹€ν–‰) JavaScript μ΅œμ†Œν™”/λΆ„ν• , 메인 μŠ€λ ˆλ“œ 점유 μ‹œκ°„ 단좕
CLS
(Cumulative Layout Shift)
μ‹œκ°μ  μ•ˆμ •μ„± (예기치 μ•Šμ€ λ ˆμ΄μ•„μ›ƒ 이동) 0.1 미만 9단계 (λ ˆμ΄μ•„μ›ƒ 계산) 이미지/κ΄‘κ³  μ˜μ—­ 크기 λͺ…μ‹œ, μ›Ή 폰트 λ‘œλ”© μ œμ–΄

Q: Critical CSSλ₯Ό 인라인으둜 μ²˜λ¦¬ν•˜λŠ” 것이 정말 속도 κ°œμ„ μ— 도움이 λ˜λ‚˜μš”?

A: λ„€, 맀우 νš¨κ³Όμ μž…λ‹ˆλ‹€. Critical CSSλŠ” 첫 화면을 λ Œλ”λ§ν•˜λŠ” 데 ν•„μš”ν•œ μ΅œμ†Œν•œμ˜ CSSμž…λ‹ˆλ‹€. 이 CSSλ₯Ό HTML 파일 내에 인라인으둜 μ‚½μž…ν•˜λ©΄, λΈŒλΌμš°μ €κ°€ μ™ΈλΆ€ CSS νŒŒμΌμ„ μš”μ²­ν•˜κ³  λ‹€μš΄λ‘œλ“œν•˜λŠ” μ‹œκ°„μ„ μ ˆμ•½ν•˜μ—¬ CSSOM 생성 μ‹œκ°„μ„ λ‹¨μΆ•ν•˜κ³  FCP(First Contentful Paint)λ₯Ό λΉ λ₯΄κ²Œ κ°œμ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Q: defer와 async 속성은 JavaScript λ‘œλ”©μ— μ–΄λ–»κ²Œ λ‹€λ₯Έ 영ν–₯을 λ―ΈμΉ˜λ‚˜μš”?

A: 두 속성 λͺ¨λ‘ JavaScriptλ₯Ό λΉ„λ™κΈ°μ μœΌλ‘œ λ‹€μš΄λ‘œλ“œν•˜μ—¬ HTML νŒŒμ‹± 차단을 λ°©μ§€ν•©λ‹ˆλ‹€. asyncλŠ” λ‹€μš΄λ‘œλ“œκ°€ μ™„λ£Œλ˜λŠ” μ¦‰μ‹œ μ‹€ν–‰λ˜λ―€λ‘œ μ‹€ν–‰ μˆœμ„œκ°€ 보μž₯λ˜μ§€ μ•Šμ§€λ§Œ, deferλŠ” λ‹€μš΄λ‘œλ“œκ°€ μ™„λ£Œλœ ν›„ HTML νŒŒμ‹±μ΄ λλ‚˜λŠ” μ‹œμ (DOM 생성 μ™„λ£Œ 직전)에 λ¬Έμ„œ μˆœμ„œλŒ€λ‘œ μ‹€ν–‰λ˜μ–΄ μ‹€ν–‰ μˆœμ„œκ°€ 보μž₯λ©λ‹ˆλ‹€. 보톡 λ‹€λ₯Έ μŠ€ν¬λ¦½νŠΈμ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ” μŠ€ν¬λ¦½νŠΈμ—λŠ” asyncλ₯Ό, DOM에 μ˜μ‘΄ν•˜κ±°λ‚˜ μˆœμ„œκ°€ ν•„μš”ν•œ μŠ€ν¬λ¦½νŠΈμ—λŠ” deferλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

Q: μ›ΉνŽ˜μ΄μ§€ λ‘œλ”© 단계 쀑 CLS에 κ°€μž₯ 큰 영ν–₯을 λ―ΈμΉ˜λŠ” λ‹¨κ³„λŠ” 무엇이며, μ–΄λ–»κ²Œ λ°©μ§€ν•΄μ•Ό ν•˜λ‚˜μš”?

A: CLS(Cumulative Layout Shift)에 κ°€μž₯ 큰 영ν–₯을 λ―ΈμΉ˜λŠ” λ‹¨κ³„λŠ” 9. λ ˆμ΄μ•„μ›ƒ 계산과 7. JavaScript μ‹€ν–‰μž…λ‹ˆλ‹€. 특히, λ‘œλ”©λœ λ¦¬μ†ŒμŠ€(이미지, κ΄‘κ³ , 폰트)κ°€ 곡간을 ν™•λ³΄ν•˜μ§€ λͺ»ν•œ 채 λ’€λŠ¦κ²Œ λ‚˜νƒ€λ‚˜ λ ˆμ΄μ•„μ›ƒμ„ λ°€μ–΄λ‚΄λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€. λ°©μ§€μ±…μœΌλ‘œλŠ” 이미지/κ΄‘κ³  μ˜μ—­μ— width/heightλ₯Ό λͺ…μ‹œν•˜μ—¬ 곡간을 미리 ν™•λ³΄ν•˜κ³ , μ›Ή 폰트 λ‘œλ”© μ‹œ font-display: swap을 μ‚¬μš©ν•˜μ—¬ CLS λ°œμƒμ„ μ΅œμ†Œν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Latest in this category

    μΏ νŒ‘νŒŒνŠΈλ„ˆμŠ€ API V2 기반으둜 μ΅œμ‹ μƒν’ˆ 및 μΈκΈ°μƒν’ˆμ΄ μžλ™ λ…ΈμΆœλ©λ‹ˆλ‹€.

    AI μ±—λ΄‡μœΌλ‘œ κ΄€λ ¨ 정보λ₯Ό λΉ λ₯΄κ²Œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 멈좀
    λ…Έλž˜ μž¬μƒ 멈좀