λ€μν λ€νΈμν¬μ κΈ°κΈ° νκ²½μ μλ κΈλ‘λ² μ¬μ©μλ₯Ό μν΄ μνν μ¬μ©μ κ²½νμ 보μ₯νλ λͺ¨λ°μΌ μ± λ° μΉμ¬μ΄νΈ μ±λ₯ μ΅μ ν κΈ°λ²μ μμ보μΈμ.
λͺ¨λ°μΌ μ±λ₯: κΈλ‘λ² μ¬μ©μλ₯Ό μν μ΅μ ν κΈ°λ²
μ€λλ λͺ¨λ°μΌ νΌμ€νΈ μλμλ λΉ λ₯΄κ³ μνν μ¬μ©μ κ²½νμ μ 곡νλ κ²μ΄ 무μλ³΄λ€ μ€μν©λλ€. λ‘λ©μ΄ λλ¦° μΉμ¬μ΄νΈλ λ²λ² 거리λ λͺ¨λ°μΌ μ±μ μ¬μ©μμ λΆλ§, μ΄ν, κ·Έλ¦¬κ³ κΆκ·Ήμ μΌλ‘λ μμ΅ μμ€λ‘ μ΄μ΄μ§ μ μμ΅λλ€. μ΄λ λ€νΈμν¬ μν, κΈ°κΈ° μ±λ₯, μ¬μ©μ κΈ°λμΉκ° ν¬κ² λ€λ₯Ό μ μλ κΈλ‘λ² μ¬μ©μλ₯Ό λμμΌλ‘ ν λ νΉν κ·Έλ μ΅λλ€. μ΄ μ’ ν© κ°μ΄λμμλ μ¬μ©μμ μμΉλ κΈ°κΈ°μ κ΄κ³μμ΄ κΈμ μ μΈ μ¬μ©μ κ²½νμ 보μ₯νλ λ° λμμ΄ λλ λ€μν λͺ¨λ°μΌ μ±λ₯ μ΅μ ν κΈ°λ²μ μ¬μΈ΅μ μΌλ‘ λ€λ£Ήλλ€.
λͺ¨λ°μΌ μ±λ₯ μ΄ν΄νκΈ°
ꡬ체μ μΈ κΈ°λ²μ μ΄ν΄λ³΄κΈ° μ μ, μ’μ λͺ¨λ°μΌ μ±λ₯μ ꡬμ±νλ μμκ° λ¬΄μμΈμ§ μ΄ν΄νλ κ²μ΄ μ€μν©λλ€. μ£Όμ μ§νλ λ€μκ³Ό κ°μ΅λλ€:
- λ‘λ μκ°(Load Time): μΉνμ΄μ§λ μ±μ΄ μμ ν λ‘λλμ΄ μνΈμμ©μ΄ κ°λ₯ν΄μ§κΈ°κΉμ§ 걸리λ μκ°μ λλ€. λ‘λ μκ°μ μ΅μ ννλ κ²μ μλ§λ μ¬λ¬λΆμ΄ ν μ μλ κ°μ₯ μν₯λ ₯ μλ λ³νμΌ κ²μ λλ€.
- μ΅μ΄ μ½ν μΈ ν νμΈνΈ(FCP): 첫 λ²μ§Έ μ½ν μΈ (μ: ν μ€νΈ λλ μ΄λ―Έμ§)κ° νλ©΄μ λνλκΈ°κΉμ§ 걸리λ μκ°μ λλ€. μ΄λ μ¬μ©μμκ² νμ΄μ§κ° λ‘λ© μ€μ΄λΌλ μκ°μ νμΈμ μ 곡ν©λλ€.
- μνΈμμ©κΉμ§μ μκ°(TTI): νμ΄μ§κ° μμ ν μνΈμμ© κ°λ₯ν΄μ Έμ μ¬μ©μκ° λ²νΌμ ν΄λ¦νκ³ , μμμ μμ±νκ³ , λ€λ₯Έ μμμ μνΈμμ©ν μ μκ² λκΈ°κΉμ§ 걸리λ μκ°μ λλ€.
- νμ΄μ§ ν¬κΈ°(Page Size): HTML, CSS, JavaScript, μ΄λ―Έμ§, λμμ λ± νμ΄μ§λ₯Ό λ‘λνλ λ° νμν λͺ¨λ 리μμ€μ μ΄ ν¬κΈ°μ λλ€. νμ΄μ§ ν¬κΈ°κ° μμμλ‘ λ‘λ μκ°μ΄ λΉ¨λΌμ§λλ€.
- μ΄λΉ νλ μ μ(FPS): μ λλ©μ΄μ κ³Ό μ νμ΄ μΌλ§λ λΆλλ½κ² μ€νλλμ§λ₯Ό λνλ΄λ μ²λμ λλ€. FPSκ° λμμλ‘(μ΄μμ μΌλ‘λ 60) μ¬μ©μ κ²½νμ΄ λ λΆλλ¬μμ§λλ€.
- CPU μ¬μ©λ(CPU Usage): μ±μ΄λ μΉμ¬μ΄νΈκ° μλΉνλ μ²λ¦¬ λ₯λ ₯μ μμ λλ€. λμ CPU μ¬μ©λμ λ°°ν°λ¦¬λ₯Ό μλͺ¨μν€κ³ κΈ°κΈ° μλλ₯Ό μ νμν¬ μ μμ΅λλ€.
- λ©λͺ¨λ¦¬ μ¬μ©λ(Memory Usage): μ±μ΄λ μΉμ¬μ΄νΈκ° μ¬μ©νλ RAMμ μμ λλ€. κ³Όλν λ©λͺ¨λ¦¬ μ¬μ©μ μΆ©λμ΄λ μλ μ νλ‘ μ΄μ΄μ§ μ μμ΅λλ€.
μ΄ μ§νλ€μ μλ‘ μ°κ²°λμ΄ μμΌλ©°, νλλ₯Ό μ΅μ ννλ©΄ λ€λ₯Έ μ§νμλ κΈμ μ μΈ μν₯μ λ―ΈμΉλ κ²½μ°κ° λ§μ΅λλ€. κ΅¬κΈ νμ΄μ§μ€νΌλ μΈμ¬μ΄νΈ(Google PageSpeed Insights), WebPageTest, λΌμ΄νΈνμ°μ€(Lighthouse)μ κ°μ λꡬλ₯Ό μ¬μ©νλ©΄ μ΄λ¬ν μ§νλ₯Ό μΈ‘μ νκ³ κ°μ μμμ νμ νλ λ° λμμ΄ λ©λλ€. μ΄ μ§νλ€μ νμ© κ°μ μ ν리μΌμ΄μ μ ν(μ: μ μμκ±°λ μΉμ¬μ΄νΈ λ μμ λ―Έλμ΄ μ±)μ λ°λΌ λ¬λΌμ§ μ μλ€λ μ μ λͺ μ¬νμΈμ.
μ΄λ―Έμ§ μ΅μ ν
μ΄λ―Έμ§λ μ’ μ’ μΉνμ΄μ§λ μ± ν¬κΈ°μ κ°μ₯ ν° λΆλΆμ μ°¨μ§ν©λλ€. μ΄λ―Έμ§λ₯Ό μ΅μ ννλ©΄ λ‘λ μκ°μ ν¬κ² μ€μ΄κ³ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
κΈ°λ²:
- μ¬λ°λ₯Έ νμ μ ν: μ¬μ§μλ JPEG, ν¬λͺ λκ° μλ κ·Έλν½μλ PNG, μ°μν μμΆλ₯ κ³Ό νμ§μ μν΄μλ WebP(μ§μλλ κ²½μ°)λ₯Ό μ¬μ©νμΈμ. λ λμ μμΆλ₯ κ³Ό νμ§μ μν΄ μ΅μ μ΄λ―Έμ§ νμμΈ AVIF μ¬μ©μ κ³ λ €νλ, λ¨Όμ λΈλΌμ°μ νΈνμ±μ νμΈνμΈμ.
- μ΄λ―Έμ§ μμΆ: μ΄λ―Έμ§ μμΆ λꡬ(μ: TinyPNG, ImageOptim, ShortPixel)λ₯Ό μ¬μ©νμ¬ νμ§μ ν¬κ² μ νμν€μ§ μμΌλ©΄μ νμΌ ν¬κΈ°λ₯Ό μ€μ΄μΈμ. μ€μν μ΄λ―Έμ§μλ 무μμ€ μμΆμ, λ μ€μν μ΄λ―Έμ§μλ μμ€ μμΆμ κ³ λ €νμΈμ.
- μ΄λ―Έμ§ ν¬κΈ° μ‘°μ : νλ©΄μ νμλλ μ€μ ν¬κΈ°λ‘ μ΄λ―Έμ§λ₯Ό μ 곡νμΈμ. ν° μ΄λ―Έμ§λ₯Ό μμ ν¬κΈ°λ‘ νμνλ κ²μ λμνκ³Ό μ²λ¦¬ λ₯λ ₯μ λλΉνλ―λ‘ νΌνμΈμ.
srcsetμμ±μ μ¬μ©νλ λ°μν μ΄λ―Έμ§λ νλ©΄ ν¬κΈ°μ λ°λΌ λμ μΌλ‘ λ€λ₯Έ ν¬κΈ°μ μ΄λ―Έμ§λ₯Ό μ 곡ν μ μμ΅λλ€. μ:<img srcset="image-320w.jpg 320w, image-480w.jpg 480w, image-800w.jpg 800w" sizes="(max-width: 320px) 100vw, (max-width: 480px) 100vw, 800px" src="image-800w.jpg" alt="Responsive Image"> - μ§μ° λ‘λ©(Lazy Loading): μ΄λ―Έμ§κ° λ·°μ λ€μ΄μ€λ €κ³ ν λλ§ λ‘λνμΈμ. μ΄λ μ΄κΈ° νμ΄μ§ λ‘λ μκ°μ ν¬κ² κ°μ ν μ μμ΅λλ€.
<img>μμμloading="lazy"μμ±μ μ¬μ©νμ¬ μ§μ° λ‘λ©μ ꡬννμΈμ. ꡬν λΈλΌμ°μ μ κ²½μ° JavaScript λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμΈμ. - μ½ν μΈ μ μ‘ λ€νΈμν¬(CDN) μ¬μ©: CDNμ μ΄λ―Έμ§(λ° κΈ°ν μ μ μμ°)λ₯Ό μ μΈκ³ μ¬λ¬ μλ²μ λΆμ°μμΌ μ¬μ©μκ° κ°μ₯ κ°κΉμ΄ μλ²μμ μ½ν μΈ λ₯Ό μμ νλλ‘ λ³΄μ₯νμ¬ μ§μ° μκ°μ μ€μ λλ€. μΈκΈ° μλ CDN μ 곡μ 체λ‘λ Cloudflare, Amazon CloudFront, Akamaiκ° μμ΅λλ€.
μμ: λΈλΌμ§μμ μ곡μνμ νλ§€νλ μ μμκ±°λ μΉμ¬μ΄νΈλ μ ν μ΄λ―Έμ§μ WebPλ₯Ό μ¬μ©νκ³ μ§μ° λ‘λ©μ μ μ©νμ¬ λλ¦° λͺ¨λ°μΌ λ€νΈμν¬λ₯Ό μ¬μ©νλ μ¬μ©μλ€μ μΌν κ²½νμ κ°μ ν μ μμ΅λλ€.
μ½λ μ΅μ ν (HTML, CSS, JavaScript)
ν¨μ¨μ μΈ μ½λλ λ‘λ©μ΄ λΉ λ₯΄κ³ λ°μμ±μ΄ μ’μ μΉμ¬μ΄νΈμ μ±μ νμμ μ λλ€.
κΈ°λ²:
- μ½λ μΆμ(Minify): HTML, CSS, JavaScript νμΌμμ λΆνμν λ¬Έμ(μ: 곡백, μ£Όμ)λ₯Ό μ κ±°νμ¬ νμΌ ν¬κΈ°λ₯Ό μ€μ΄μΈμ. UglifyJS, CSSNanoμ κ°μ λꡬλ₯Ό μ¬μ©νλ©΄ μ΄ κ³Όμ μ μλνν μ μμ΅λλ€.
- νμΌ κ²°ν©: μ¬λ¬ CSS λ° JavaScript νμΌμ λ μ μ μμ νμΌλ‘ κ²°ν©νμ¬ HTTP μμ² μλ₯Ό μ€μ΄μΈμ. λ€λ§, μ΄ κΈ°λ²μ λ§€μ° ν° νμΌμ΄ μΊμ±μ λΆμ μ μΈ μν₯μ λ―ΈμΉ μ μμΌλ―λ‘ μ μ€νκ² μ¬μ©ν΄μΌ ν©λλ€.
- λΉλκΈ° λ‘λ©: JavaScript νμΌμ λΉλκΈ°μ μΌλ‘ λ‘λ(
asyncλλdeferμμ± μ¬μ©)νμ¬ νμ΄μ§ λ λλ§μ μ°¨λ¨νμ§ μλλ‘ νμΈμ.asyncλ μ°¨λ¨ μμ΄ μ€ν¬λ¦½νΈλ₯Ό λ€μ΄λ‘λνκ³ μ€ννλ λ°λ©΄,deferλ μ°¨λ¨ μμ΄ μ€ν¬λ¦½νΈλ₯Ό λ€μ΄λ‘λνμ§λ§ HTML νμ±μ΄ μλ£λ νμ μ€νν©λλ€. - μ½λ λΆν (Code Splitting): JavaScript μ½λλ₯Ό λ μμ μ²ν¬λ‘ λλκ³ νμ¬ νμ΄μ§λ κΈ°λ₯μ νμν μ½λλ§ λ‘λνμΈμ. μ΄λ μ΄κΈ° λ‘λ μκ°μ ν¬κ² μ€μ΄κ³ μ ν리μΌμ΄μ μ μ²΄κ° μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€. React, Angular, Vue.jsμ κ°μ νλ μμν¬λ μ½λ λΆν μ μν λ΄μ₯ μ§μμ μ 곡ν©λλ€.
- μ¬μ©νμ§ μλ μ½λ μ κ±°: νλ‘μ νΈμμ μ¬μ©νμ§ μλ CSSλ JavaScript μ½λλ₯Ό μλ³νκ³ μ κ±°νμΈμ. PurgeCSSμ κ°μ λꡬλ₯Ό μ¬μ©νλ©΄ μ¬μ©νμ§ μλ CSS μ νμλ₯Ό μ°Ύμ μ κ±°νλ λ° λμμ΄ λ©λλ€.
- CSS μ νμ μ΅μ ν: ν¨μ¨μ μΈ CSS μ νμλ₯Ό μ¬μ©νμ¬ λ λλ§ μ±λ₯μ ν₯μμν€μΈμ. μ§λμΉκ² 볡μ‘ν μ νμλ νΌνκ³ κ°λ₯νλ©΄ λ ꡬ체μ μΈ μ νμλ₯Ό μ¬μ©νμΈμ.
- μΈλΌμΈ μ€νμΌ λ° μ€ν¬λ¦½νΈ νΌνκΈ°: μΈλΆ CSS λ° JavaScript νμΌμ λΈλΌμ°μ μ μν΄ μΊμλμ§λ§, μΈλΌμΈ μ€νμΌκ³Ό μ€ν¬λ¦½νΈλ μΊμλμ§ μμ΅λλ€. μΈλΆ νμΌμ μ¬μ©νλ©΄ νΉν μμ£Ό λ°©λ¬Ένλ νμ΄μ§μ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
- μ΅μ JavaScript νλ μμν¬ μ¬μ©: React, Angular, Vue.jsμ κ°μ νλ μμν¬λ 볡μ‘ν μΉ μ ν리μΌμ΄μ μ λ ν¨μ¨μ μΌλ‘ ꡬμΆνκ³ μ±λ₯μ μ΅μ ννλ λ° λμμ΄ λ μ μμ΅λλ€. κ·Έλ¬λ νλ μμν¬μ ν¬κΈ°μ 볡μ‘μ±μ μ€λ²ν€λλ₯Ό μΆκ°ν μλ μμΌλ―λ‘ μ μν΄μΌ ν©λλ€. κ°λ¨ν νλ‘μ νΈμ κ²½μ° Reactμ λ μμ λμμΈ Preact μ¬μ©μ κ³ λ €ν΄ λ³΄μΈμ.
μμ: μΈλμ ν λ΄μ€ μΉμ¬μ΄νΈλ μ½λ λΆν μ μ¬μ©νμ¬ κΈ°μ¬ νμ΄μ§μ νμν JavaScript μ½λλ§ λ‘λνκ³ , μΉμ¬μ΄νΈμ λ€λ₯Έ μΉμ (μ: λκΈ, κ΄λ ¨ κΈ°μ¬)μ λν μ½λ λ‘λ©μ μ΄κΈ° νμ΄μ§ λ‘λ μ΄νλ‘ μ§μ°μν¬ μ μμ΅λλ€.
μΊμ±
μΊμ±μ μμ£Ό μ‘μΈμ€νλ λ°μ΄ν°λ₯Ό μ μ₯νκ³ λ§€λ² μλ²μμ κ°μ Έμ€λ λμ μΊμμμ μ 곡νμ¬ μ±λ₯μ ν₯μμν€λ κ°λ ₯ν κΈ°μ μ λλ€.
μΊμ± μ ν:
- λΈλΌμ°μ μΊμ±: λΈλΌμ°μ λ μ μ μμ°(μ: μ΄λ―Έμ§, CSS, JavaScript)μ μΊμνμ¬ HTTP μμ² μλ₯Ό μ€μ
λλ€. λΈλΌμ°μ κ° μ΄λ¬ν μμ°μ μΌλ§λ μ€λ μΊμν΄μΌ νλμ§ μ μ΄νλ €λ©΄ μλ²μμ μ μ ν μΊμ ν€λ(μ:
Cache-Control,Expires)λ₯Ό μ€μ νλλ‘ κ΅¬μ±νμΈμ. - μ½ν μΈ μ μ‘ λ€νΈμν¬(CDN) μΊμ±: CDNμ μ μΈκ³ μλ²μ μ½ν μΈ λ₯Ό μΊμνμ¬ μ¬μ©μκ° κ°μ₯ κ°κΉμ΄ μλ²μμ μ½ν μΈ λ₯Ό λ°λλ‘ λ³΄μ₯ν©λλ€.
- μλ² μΈ‘ μΊμ±: μλ²μμ μμ£Ό μ‘μΈμ€νλ λ°μ΄ν°λ₯Ό μΊμνμ¬ λ°μ΄ν°λ² μ΄μ€μ λΆνλ₯Ό μ€μ λλ€. Redisλ Memcachedμ κ°μ κΈ°μ μ΄ μλ² μΈ‘ μΊμ±μ μΌλ°μ μΌλ‘ μ¬μ©λ©λλ€.
- μ ν리μΌμ΄μ μΊμ±: API μλ΅μ΄λ κ³μ°λ κ°κ³Ό κ°μ λ°μ΄ν°λ₯Ό μ ν리μΌμ΄μ μ체 λ΄μ μΊμν©λλ€. μ΄λ μΈλ©λͺ¨λ¦¬ μΊμλ μꡬ μ μ₯μλ₯Ό μ¬μ©νμ¬ μνν μ μμ΅λλ€.
- μλΉμ€ μ컀 μΊμ±: μλΉμ€ μ컀λ λ°±κ·ΈλΌμ΄λμμ μ€νλλ©° λ€νΈμν¬ μμ²μ κ°λ‘μ± μ μλ JavaScript νμΌμ λλ€. μ μ μμ°κ³Ό μ¬μ§μ΄ μ 체 νμ΄μ§λ₯Ό μΊμνλ λ° μ¬μ©λ μ μμ΄, μΉμ¬μ΄νΈκ° μ€νλΌμΈμ΄λ μ°κ²° μνκ° μ’μ§ μμ νκ²½μμλ μλνλλ‘ ν μ μμ΅λλ€. μλΉμ€ μ컀λ νλ‘κ·Έλ μλΈ μΉ μ±(PWA)μ ν΅μ¬ κ΅¬μ± μμμ λλ€.
μμ: λλ¨μμμμ ν μ¬ν μμ½ μΉμ¬μ΄νΈλ λ‘κ³ λ CSS νμΌκ³Ό κ°μ μ μ μμ°μλ λΈλΌμ°μ μΊμ±μ, μ΄λ―Έμ§μλ CDN μΊμ±μ, μμ£Ό μ‘μΈμ€νλ νκ³΅νΈ μ€μΌμ€μλ μλ² μΈ‘ μΊμ±μ μ¬μ©νμ¬ μΈν°λ· μ°κ²°μ΄ λΆμμ ν μ§μμ μ¬μ©μ κ²½νμ κ°μ ν μ μμ΅λλ€.
λ€νΈμν¬ μ΅μ ν
μ¬μ©μμ μλ² κ°μ λ€νΈμν¬ μ°κ²°μ μ΅μ ννλ κ² λν μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
κΈ°λ²:
- HTTP μμ² μ΅μν: νμΌμ κ²°ν©νκ³ , CSS μ€νλΌμ΄νΈλ₯Ό μ¬μ©νκ³ , λ°μ΄ν° URIλ₯Ό μ¬μ©νμ¬ μ΄λ―Έμ§λ₯Ό μλ² λ©νμ¬ HTTP μμ² μλ₯Ό μ€μ΄μΈμ(λ¨, λ°μ΄ν° URIλ CSS νμΌμ ν¬κΈ°λ₯Ό μ¦κ°μν¬ μ μμ΅λλ€). HTTP/2 λ©ν°νλ μ±μ μ¬λ¬ μμ²μ μ€λ²ν€λλ₯Ό μ€μ¬μ£Όλ―λ‘ μ΄ κΈ°λ²μ HTTP/1.1 μμ λ³΄λ€ λ μ€μν΄μ‘μ΅λλ€.
- μ½ν μΈ μ μ‘ λ€νΈμν¬(CDN) μ¬μ©: CDNμ μ½ν μΈ λ₯Ό μ μΈκ³ μ¬λ¬ μλ²μ λΆμ°μμΌ μ§μ° μκ°μ μ€μ΄κ³ λ€μ΄λ‘λ μλλ₯Ό ν₯μμν΅λλ€.
- μμΆ νμ±ν: μλ²μμ Gzip λλ Brotli μμΆμ νμ±ννμ¬ HTTP μλ΅μ ν¬κΈ°λ₯Ό μ€μ΄μΈμ. Brotliλ Gzipλ³΄λ€ λ λμ μμΆλ₯ μ μ 곡ν©λλ€.
- HTTP/2 λλ HTTP/3 μ¬μ©: HTTP/2μ HTTP/3λ HTTP/1.1μ λΉν΄ λ©ν°νλ μ±, ν€λ μμΆ, μλ² νΈμ λ± μλΉν μ±λ₯ ν₯μμ μ 곡νλ μ΅μ λ²μ μ HTTP νλ‘ν μ½μ λλ€. HTTP/3λ UDP κΈ°λ° μ μ‘ νλ‘ν μ½μΈ QUICμ μ¬μ©νμ¬ μμ€μ΄ λ§μ λ€νΈμν¬ νκ²½μμ μ±λ₯μ λμ± ν₯μμν΅λλ€.
- μ€μ 리μμ€ μ°μ μμ μ§μ : 리μμ€ ννΈ(μ:
preload,preconnect,dns-prefetch)λ₯Ό μ¬μ©νμ¬ λΈλΌμ°μ μ μ΄λ€ 리μμ€κ° κ°μ₯ μ€μνλ©° λ¨Όμ λ€μ΄λ‘λν΄μΌ νλμ§ μλ €μ£ΌμΈμ.<link rel="preload" href="style.css" as="style"> - DNS μ‘°ν μ΅μ ν: λΉ λ₯Έ DNS μ 곡μ
체λ₯Ό μ¬μ©νκ³
<link rel="dns-prefetch" href="//example.com">λ₯Ό μ¬μ©νμ¬ DNS μ΄λ¦μ 미리 νμΈνμ¬ DNS μ‘°ν μκ°μ μ€μ΄μΈμ.
μμ: κΈλ‘λ² λ΄μ€ κΈ°κ΄μ CDNμ μ¬μ©νμ¬ μ μΈκ³ μ¬μ©μμκ² μ½ν μΈ λ₯Ό λ°°ν¬νκ³ , Gzip μμΆμ νμ±ννμ¬ HTTP μλ΅ ν¬κΈ°λ₯Ό μ€μ΄κ³ , HTTP/2λ₯Ό μ¬μ©νμ¬ λ€νΈμν¬ ν΅μ ν¨μ¨μ±μ κ°μ ν μ μμ΅λλ€.
λͺ¨λ°μΌ νΉν μ΅μ ν
μμμ λ Όμλ μΌλ°μ μΈ μ΅μ ν κΈ°λ² μΈμλ, λͺ¨λ°μΌκ³Ό κ΄λ ¨λ λͺ κ°μ§ νΉλ³ν κ³ λ € μ¬νμ΄ μμ΅λλ€.
κΈ°λ²:
- λ°μν λμμΈ: λ€μν νλ©΄ ν¬κΈ°μ ν΄μλμ μ μνλλ‘ μΉμ¬μ΄νΈλ μ±μ λμμΈνμΈμ. CSS λ―Έλμ΄ μΏΌλ¦¬λ₯Ό μ¬μ©νμ¬ νλ©΄ ν¬κΈ°, λ°©ν₯, κΈ°κΈ° κΈ°λ₯μ λ°λΌ λ€λ₯Έ μ€νμΌμ μ μ©νμΈμ.
- ν°μΉ μΉνμ λμμΈ: λ²νΌ λ° κΈ°ν μνΈμμ© μμκ° ν°μΉμ€ν¬λ¦°μμ μ½κ² νν μ μλλ‘ μΆ©λΆν ν¬κ³ κ°κ²©μ΄ λμμ§ νμΈνμΈμ.
- λͺ¨λ°μΌ λ€νΈμν¬μ μ΅μ ν: λ리거λ λΆμμ ν λͺ¨λ°μΌ λ€νΈμν¬μ μ 견λλλ‘ μΉμ¬μ΄νΈλ μ±μ μ€κ³νμΈμ. μ§μ° λ‘λ©, μΊμ±, μμΆκ³Ό κ°μ κΈ°μ μ μ¬μ©νμ¬ λ°μ΄ν° μ¬μ©λμ μ΅μννκ³ μ λμν νκ²½μμ μ±λ₯μ ν₯μμν€μΈμ.
- AMP(Accelerated Mobile Pages) μ¬μ©: AMPλ κ°λ³κ³ λΉ λ₯΄κ² λ‘λ©λλ λͺ¨λ°μΌ νμ΄μ§λ₯Ό λ§λ€κΈ° μν νλ μμν¬λ₯Ό μ 곡νλ μ€ν μμ€ νλ‘μ νΈμ λλ€. PWAμ λΆμκ³Ό μ λ°μ μΈ λͺ¨λ°μΌ μΉ μ±λ₯ ν₯μμΌλ‘ AMPμ μ€μμ±μ΄ μ€μ΄λ€μμ§λ§, λ΄μ€ κΈ°μ¬λ κΈ°ν μ½ν μΈ κ° λ§μ νμ΄μ§μλ μ¬μ ν μ μ©ν μ μμ΅λλ€.
- νλ‘κ·Έλ μλΈ μΉ μ±(PWA) κ³ λ €: PWAλ μ€νλΌμΈ μ§μ, νΈμ μλ¦Ό, κΈ°κΈ° νλμ¨μ΄ μ κ·Ό λ± λ€μ΄ν°λΈ μ±κ³Ό μ μ¬ν κ²½νμ μ 곡νλ μΉ μ ν리μΌμ΄μ μ λλ€. PWAλ μ¬μ©μκ° λ€μ΄ν°λΈ μ±μ λ€μ΄λ‘λν νμ μμ΄ λΉ λ₯΄κ³ λ§€λ ₯μ μΈ λͺ¨λ°μΌ κ²½νμ μ 곡νλ νλ₯ν λ°©λ²μ΄ λ μ μμ΅λλ€.
- μ μ¬μ κΈ°κΈ°μ μ΅μ ν: μ μΈκ³ λ§μ μ¬μ©μλ€μ΄ μ²λ¦¬ λ₯λ ₯κ³Ό λ©λͺ¨λ¦¬κ° μ νλ μ μ¬μ λͺ¨λ°μΌ κΈ°κΈ°λ₯Ό μ¬μ©ν©λλ€. 리μμ€ μ¬μ©μ μ΅μννκ³ λ³΅μ‘ν μ λλ©μ΄μ μ΄λ ν¨κ³Όλ₯Ό νΌνμ¬ μ΄λ¬ν κΈ°κΈ°μμ μΉμ¬μ΄νΈλ μ±μ΄ μννκ² μ€νλλλ‘ μ΅μ ννμΈμ.
μμ: κ°λ°λμκ΅ μ¬μ©μλ₯Ό λμμΌλ‘ νλ μ¨λΌμΈ μλ§€μ 체λ λ°μν λμμΈμ μ¬μ©νμ¬ λ€μν λͺ¨λ°μΌ κΈ°κΈ°μμ μΉμ¬μ΄νΈκ° μ 보μ΄λλ‘ νκ³ , μ λμν λ€νΈμν¬μ λ§κ² μ΄λ―Έμ§λ₯Ό μ΅μ ννλ©°, μ€νλΌμΈ μΌν κ²½νμ μ 곡νκΈ° μν΄ PWA ꡬμΆμ κ³ λ €ν μ μμ΅λλ€.
λͺ¨λν°λ§ λ° λΆμ
κ°μ μμμ νμ νκ³ μ΅μ ν λ Έλ ₯μ ν¨κ³Όλ₯Ό μΆμ νκΈ° μν΄ μΉμ¬μ΄νΈλ μ±μ μ±λ₯μ μ§μμ μΌλ‘ λͺ¨λν°λ§νκ³ λΆμνλ κ²μ΄ μ€μν©λλ€.
λꡬ λ° κΈ°λ²:
- κ΅¬κΈ νμ΄μ§μ€νΌλ μΈμ¬μ΄νΈ: ꡬκΈμ λͺ¨λ² μ¬λ‘μ κΈ°λ°νμ¬ μΉμ¬μ΄νΈ μ±λ₯ κ°μ μ μν κΆμ₯ μ¬νμ μ 곡ν©λλ€.
- WebPageTest: λ€μν μμΉμ κΈ°κΈ°μμ μΉμ¬μ΄νΈ μ±λ₯μ ν μ€νΈν μ μλ κ°λ ₯ν λꡬμ λλ€.
- λΌμ΄νΈνμ°μ€: μΉ νμ΄μ§μ μ±λ₯, μ κ·Όμ±, νλ‘κ·Έλ μλΈ μΉ μ± κΈ°λ₯ λ±μ κ°μ¬νκΈ° μν μ€ν μμ€ μλν λꡬμ λλ€. Chrome κ°λ°μ λꡬμμ μ¬μ©ν μ μμ΅λλ€.
- μ€μ μ¬μ©μ λͺ¨λν°λ§(RUM): μ€μ μ¬μ©μλ‘λΆν° μ±λ₯ λ°μ΄ν°λ₯Ό μμ§νμ¬ μ€μ νκ²½μμ μΉμ¬μ΄νΈλ μ±μ΄ μ΄λ»κ² μλνλμ§μ λν κ·μ€ν ν΅μ°°λ ₯μ μ 곡ν©λλ€. New Relic, Dynatrace, Sentryμ κ°μ λκ΅¬κ° RUM κΈ°λ₯μ μ 곡ν©λλ€.
- κ΅¬κΈ μ λ리ν±μ€: νμ΄μ§ λ‘λ μκ°, μ΄νλ₯ , μ νμ¨κ³Ό κ°μ ν΅μ¬ μ±κ³Ό μ§νλ₯Ό μΆμ ν©λλ€.
- λͺ¨λ°μΌ μ± λΆμ: Firebase Analytics, Amplitude, Mixpanelκ³Ό κ°μ λͺ¨λ°μΌ μ± λΆμ νλ«νΌμ μ¬μ©νμ¬ μ± μ±λ₯, μ¬μ©μ νλ, μΆ©λλ₯ μ μΆμ ν©λλ€.
μμ: μ μΈκ³μ μΌλ‘ μ¬μ©λλ μμ λ―Έλμ΄ μ±μ RUMμ μ¬μ©νμ¬ μ¬λ¬ μ§μμ μ±λ₯μ λͺ¨λν°λ§νκ³ , λ‘λ μκ°μ΄ λλ¦° μ§μμ μλ³νλ©°, μ΅μ ν λ Έλ ₯μ μ°μ μμμ λ μ μμ΅λλ€. μλ₯Ό λ€μ΄, νΉμ μν리카 κ΅κ°μμ μ΄λ―Έμ§ λ‘λ©μ΄ λ리λ€λ κ²μ λ°κ²¬νκ³ , ν΄λΉ μ¬μ©μμ κΈ°κΈ° λ° λ€νΈμν¬ μ‘°κ±΄μ λ§κ² μ΄λ―Έμ§κ° μ λλ‘ μ΅μ νλμ§ μμμ κ°λ₯μ±μ μ‘°μ¬ν μ μμ΅λλ€.
κ΅μ ν(i18n) κ³ λ € μ¬ν
κΈλ‘λ² μ¬μ©μλ₯Ό μν΄ μ΅μ νν λ, κ΅μ ν(i18n) λͺ¨λ² μ¬λ‘λ₯Ό κ³ λ €νλ κ²μ΄ μ€μν©λλ€.
μ£Όμ κ³ λ € μ¬ν:
- νμ§ν(l10n): λ λμ μ¬μ©μμΈ΅μ ν보νκΈ° μν΄ μΉμ¬μ΄νΈλ μ±μ λ€λ₯Έ μΈμ΄λ‘ λ²μνμΈμ. λ²μ κ΄λ¦¬ μμ€ν (TMS)μ μ¬μ©νμ¬ λ²μ νλ‘μΈμ€λ₯Ό κ°μννμΈμ.
- μ½ν μΈ μ‘°μ : λ€λ₯Έ λ¬Ένμ λ§₯λ½μ λ§κ² μ½ν μΈ λ₯Ό μ‘°μ νμΈμ. μ¬κΈ°μλ λ μ§ λ° μκ° νμ, ν΅ν κΈ°νΈ, μ΄λ―Έμ§ λ±μ΄ ν¬ν¨λ©λλ€.
- μ€λ₯Έμͺ½μμ μΌμͺ½(RTL) μ°κΈ° μ§μ: μΉμ¬μ΄νΈλ μ±μ΄ μλμ΄, νλΈλ¦¬μ΄μ κ°μ RTL μΈμ΄λ₯Ό μ§μνλμ§ νμΈνμΈμ.
- κΈκΌ΄ μ΅μ ν: λ€λ₯Έ λ¬Έμ μ§ν©μ μ§μνλ μΉ κΈκΌ΄μ μ¬μ©νμΈμ. κΈκΌ΄ νμΌ ν¬κΈ°λ₯Ό μ€μ΄κΈ° μν΄ κΈκΌ΄ μλΈμ μ¬μ©μ κ³ λ €νμΈμ. κΈκΌ΄ λΌμ΄μ μ€ μ νμ μ μνμΈμ.
- μ λμ½λ μ§μ: μΉμ¬μ΄νΈλ μ±μ΄ λͺ¨λ μΈμ΄μ λ¬Έμλ₯Ό νμν μ μλλ‘ μ λμ½λ(UTF-8) μΈμ½λ©μ μ¬μ©νμΈμ.
μμ: μ¬λ¬ μΈμ΄λ‘ κ°μ’λ₯Ό μ 곡νλ μ΄λ¬λ νλ«νΌμ μΉμ¬μ΄νΈμ μ±μ΄ RTL μΈμ΄λ₯Ό μ§μνκ³ , λ€λ₯Έ λ¬Έμ μ§ν©μ μ ν©ν κΈκΌ΄μ μ¬μ©νλ©°, λ€λ₯Έ λ¬Ένμ λ§₯λ½μ λ§κ² μ½ν μΈ λ₯Ό μ‘°μ ν΄μΌ ν©λλ€. μλ₯Ό λ€μ΄, λΉμ¦λμ€ μν°μΌμ λν κ°μ’μ μ¬μ©λλ μ΄λ―Έμ§λ λμ κ³ κ°μ νΉμ λ¬Ένμ κ·λ²μ λ§κ² μ‘°μ λμ΄μΌ ν©λλ€.
μ κ·Όμ±(a11y) κ³ λ € μ¬ν
μ κ·Όμ±μ κΈλ‘λ² μ¬μ©μλ₯Ό μν΄ μ΅μ νν λ λ λ€λ₯Έ μ€μν κ³ λ € μ¬νμ λλ€. μΉμ¬μ΄νΈλ μ±μ΄ μ₯μ λ₯Ό κ°μ§ μ¬μ©μμκ²λ μ κ·Ό κ°λ₯νμ§ νμΈνμΈμ.
μ£Όμ κ³ λ € μ¬ν:
- μλ§¨ν± HTML: μλ§¨ν± HTML μμλ₯Ό μ¬μ©νμ¬ μ½ν μΈ μ ꡬ쑰μ μλ―Έλ₯Ό λΆμ¬νμΈμ.
- λ체 ν μ€νΈ(alt text): λͺ¨λ μ΄λ―Έμ§μ λ체 ν μ€νΈλ₯Ό μ 곡νμΈμ.
- ν€λ³΄λ νμ: μΉμ¬μ΄νΈλ μ±μ ν€λ³΄λλ₯Ό μ¬μ©νμ¬ νμν μ μλμ§ νμΈνμΈμ.
- μμ λλΉ: ν μ€νΈμ λ°°κ²½μ μ¬μ΄μ μΆ©λΆν μμ λλΉλ₯Ό μ¬μ©νμΈμ.
- μ€ν¬λ¦° 리λ νΈνμ±: μΉμ¬μ΄νΈλ μ±μ΄ μ€ν¬λ¦° 리λμ νΈνλλμ§ νμΈνμΈμ.
- ARIA μμ±: ARIA μμ±μ μ¬μ©νμ¬ λ³΄μ‘° κΈ°μ μ μΆκ° μ 보λ₯Ό μ 곡νμΈμ.
μμ: μλ―Όμκ² μ 보λ₯Ό μ 곡νλ μ λΆ μΉμ¬μ΄νΈλ μ€ν¬λ¦° 리λλ ν€λ³΄λ νμμ μ¬μ©νλ μ¬μ©μλ₯Ό ν¬ν¨νμ¬ μ₯μ λ₯Ό κ°μ§ μ¬μ©μμκ² μΉμ¬μ΄νΈκ° μμ ν μ κ·Ό κ°λ₯νλλ‘ λ³΄μ₯ν΄μΌ ν©λλ€. μ΄λ WCAG(μΉ μ½ν μΈ μ κ·Όμ± κ°μ΄λλΌμΈ)μ κ°μ κΈλ‘λ² μ κ·Όμ± νμ€κ³Ό μΌμΉν©λλ€.
κ²°λ‘
λͺ¨λ°μΌ μ±λ₯ μ΅μ νλ μ§μμ μΈ λͺ¨λν°λ§, λΆμ λ° κ°μ μ΄ νμν μ§μμ μΈ κ³Όμ μ λλ€. μ΄ κ°μ΄λμ μ€λͺ λ κΈ°λ²μ ꡬνν¨μΌλ‘μ¨ μμΉλ κΈ°κΈ°μ κ΄κ³μμ΄ μΉμ¬μ΄νΈλ μ±μ μ¬μ©μ κ²½νμ ν¬κ² ν₯μμν¬ μ μμ΅λλ€. κΈλ‘λ² μ¬μ©μμ μꡬλ₯Ό μ°μ μνκ³ κ·Έμ λ°λΌ μ΅μ ν μ λ΅μ μ‘°μ νλ κ²μ μμ§ λ§μΈμ. μλ, ν¨μ¨μ±, μ κ·Όμ±μ μ§μ€ν¨μΌλ‘μ¨ λͺ¨λ°μΌ μ‘΄μ¬κ°μ΄ μ μΈκ³ μ¬μ©μμκ² κ°μΉλ₯Ό μ 곡νκ³ λΉμ¦λμ€ λͺ©νλ₯Ό λ¬μ±νλλ‘ λ³΄μ₯ν μ μμ΅λλ€.