μ¬λ¬ κ°μ μ΄λ―Έμ§λ₯Ό λͺ¨μ νλμ μ€νλΌμ΄νΈ μ΄λ―Έμ§λ‘ λ§λ€κ³
CSSμ background-position μμ±μ μ¬μ©νμ¬ μ΄λ―Έμ§μ
μΌμ λΆλΆλ§ ν΄λμ€ λ±μΌλ‘ ꡬλΆνμ¬ μ¬μ©νλ λ°©λ²μ΄λ€.
Font Awesome
Font Awesomeμμ ν€νΈλ₯Ό htmlμ headμ λ£μ΄μ£Όκ±°λ,
Reactμμλ μ§μ μ€μΉλ₯Ό ν΄μ μ¬μ©ν μ μλ€.
λΆλ¬μ¨ μμ΄μ½μ ν΄λμ€λͺ
μ μ§μ λΆμ΄κ±°λ
Font Awesomeμ΄ μ ν΄μ€ λ°©λ²μ μ¬μ©νμ¬ μ€νμΌλ§ ν΄μ£Όλ©΄ λ¨.
// ν΅μ¬ ν¨ν€μ§ μ€μΉ
npm i --save @fortawesome/fontawesome-svg-core
// μμ΄μ½ ν¨ν€μ§ μ€μΉ (ν΄λΉ μ½λλ λ¬΄λ£ μμ΄μ½λ€μ
λλ€. μ λ£ μμ΄μ½μ μ¬μ©ν κ²½μ° μΆκ°λ‘ μ€μΉκ° νμν©λλ€.)
npm i --save @fortawesome/free-solid-svg-icons
npm i --save @fortawesome/free-regular-svg-icons
npm i --save @fortawesome/free-brands-svg-icons
// Font Awesome React κ΅¬μ± μμ μ€μΉ
npm i --save @fortawesome/react-fontawesome@latest
-------
// κ°μ Έμ€κΈ°
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faReact } from '@fortawesome/free-brands-svg-icons'
const element = <FontAwesomeIcon icon={faReact} />
Boxicons
λ‘κ·ΈμΈμ νμ§ μκ³ μ¬μ©ν μ μλ Boxiconsλ μλ€.
// picture: img μμμ λ€μ€ μ΄λ―Έμ§ 리μμ€λ₯Ό μν 컨ν
μ΄λλ₯Ό μ μν λ μ¬μ©νλ€.
// λ§μ½ μ μν λΈλΌμ°μ μμ <source>νκ·Έ λ΄μ srcsetμ μ μν
// WebP ν¬λ§·μ μ§μνμ§ μλλ€λ©΄ ν΄λΉ <source> νκ·Έλ 무μλλ€.
<picture>
<source srcset="logo.webp" type="image/webp">
<img src="logo.png" alt="logo">
</picture>
Content Delivery Network
μΈν°λ· μ¬μ©μλ€μκ² μΉ μ½ν
μΈ λ₯Ό λΉ λ₯΄κ² μ 곡νκΈ° μν κΈ°μ μ΄λ€.
(μΉ μ¬μ΄νΈ μλμ μμ μ±μ ν₯μμν€κ³ , μ¬μ©μ κ²½νμ κ°μ νκΈ° μν΄ μ¬μ©λ¨)
CDNμ μΈκ³ κ³³κ³³μ λΆν¬ν λΆμ°λ μλ²μ μ½ν
μΈ λ₯Ό μ μ₯νκ³ μλ€.
μ μ κ° κ°κΉμ΄ κ³³μ μμΉν λ°μ΄ν° μΌν°(μλ²)μ λ°μ΄ν°λ₯Ό κ°μ Έμ€κΈ°μ
λ°μ΄ν°κ° μ λ¬λκΈ° μν΄ κ±°μ³μΌνλ μλ²μ κ°―μλ₯Ό ν¬κ² μ€μ¬ λ‘λ© μλκ° λΉ¨λΌμ§λ€.
λνμ μΈ CDN μλΉμ€λ‘λ Amazon CloudFront, Akamai, Cloudflare, Fastly λ±μ΄ μλ€.
μΊμ μ ν¨ μκ°μ μ§λ¬μ§λ§, μλ²μμ λ€μ λ°μμμΌ νλ νμΌμ΄ μΊμμ μ μ₯λμ΄ μλ νμΌκ³Ό μμ ν λμΌν κ²½μ°λΌλ©΄? κ΅³μ΄ λκ°μ νμΌμ λ€μ λ°μμ¬ νμ μμ΄, μλ²μ νμΌκ³Ό μΊμμ νμΌμ΄ λμΌνμ§ νμΈν΄μ μ¬μ¬μ©ν μ μλ HTTP ν€λμΈ μΊμ κ²μ¦ ν€λμ μ‘°κ±΄λΆ μμ² ν€λκ° μ‘΄μ¬νλ€.
μΊμμ μ μ₯λ λ°μ΄ν°μ μλ²μ λ°μ΄ν°κ°
λμΌνμ§ νμΈνκΈ° μν μ 보λ₯Ό λ΄μ μλ΅ ν€λμ΄λ€.
Last-Modified
λ°μ΄ν°κ° λ§μ§λ§μΌλ‘ μμ λ μμ μ μλ―Ένλ μλ΅ ν€λλ‘,
μ‘°κ±΄λΆ μμ² ν€λμΈ If-Modified-Since μ λ¬Άμ΄μ μ¬μ©νλ€.
Etag
λ°μ΄ν°μ λ²μ μ μλ―Ένλ μλ΅ ν€λλ‘,
μ‘°κ±΄λΆ μμ² ν€λμΈ If-None-Match μ λ¬Άμ΄μ μ¬μ©νλ€.
μΊμμ λ°μ΄ν°μ μλ²μ λ°μ΄ν°κ° λμΌνλ€λ©΄
μ¬μ¬μ©νκ² ν΄λ¬λΌλ μλ―Έμ μμ² ν€λμ΄λ€.
If-Modified-Since
μΊμλ 리μμ€μ Last-Modified κ° μ΄νμ μλ² λ¦¬μμ€κ°
μμ λμλμ§ νμΈνκ³ , μμ λμ§ μμλ€λ©΄ μΊμλ 리μμ€λ₯Ό μ¬μ©νλ€.
If-None-Match
μΊμλ 리μμ€μ ETag κ°κ³Ό νμ¬ μλ² λ¦¬μμ€μ
ETag κ°μ΄ κ°μμ§ νμΈνκ³ , κ°μΌλ©΄ μΊμλ 리μμ€λ₯Ό μ¬μ©νλ€.
import React from 'react' κ° μλλΌ
import { useState, useEffect } from 'react'λ‘ νμν κ²λ§ λ½μ μ°κΈ°
// Babelμ ꡬν λΈλΌμ°μ μμλ νΈνμ΄ κ°λ₯νλλ‘ ES5 λ¬Έλ²μΌλ‘ λ³ννλ λΌμ΄λΈλ¬λ¦¬μ.
// ES5λ¬Έλ²μ importλ₯Ό μ§μνμ§ μμμ requireλ‘ λ³κ²½μν΄.
// But, requireλ export λλ λͺ¨λ λͺ¨λμ λΆλ¬μ΄.
// μ΄λ₯Ό λ°©μ§νκΈ° μν΄ μΉν© μ€μ μ μλμ²λΌ μ€μ ν΄ μ£Όμ΄μΌ νλ€.
{
βpresetsβ: [[β@babel/preset-envβ, { "modules": false }]]
// μ΄μ importκ° requireλ‘ λ³κ²½λμ§ μλλ€.
}
μΉν©μ μ¬μ΄λ μ΄ννΈλ₯Ό μΌμΌν¬ μ μλ μ½λμ κ²½μ°,
μ¬μ©νμ§ μλ μ½λλΌλ νΈλ¦¬μμ΄νΉ λμμμ μ μΈ μν¨λ€.
μλμ²λΌ μ€μ νλ©΄ μ¬μ΄λ μ΄ννΈκ° λ°μνμ§ μμΌλ
μ½λλ₯Ό μ μΈν΄λ λλ€λ κ²μ μΉν©μκ² μλ €μ€ μ μλ€.
/* package.json */
{
"name": "tree-shaking",
"version": "1.0.0",
"sideEffects": false
}
-------λλ
// νΉμ νμΌμμλ λ°μνμ§ μμ κ²μμ μλ €μ€ μ μλ€.
{
"name": "tree-shaking",
"version": "1.0.0",
"sideEffects": ["./src/components/NoSideEffect.js"]
}
λ€μν μ§νλ₯Ό μ΄μ©ν΄ μΉνμ΄μ§μ
μ±λ₯ κ²μ¬λ₯Ό ν΄μ£Όλ©°, κ·Έμ λν κ°μ μ±
λ μ κ³΅ν΄ μ€λ€.
κ°λ°μ λꡬμμ νμΈ ν μ μμΌλ©°,
Node CLIμμλ μ€νμ΄ κ°λ₯νλ€.
Lighthouse λ
Έλλͺ¨λμ μ΄μ©ν΄ λμ μΌλ‘ νλ‘κ·Έλλ°νμ¬
νμ΄μ§ κ²μ¬ 리ν¬νΈλ₯Ό μμ±ν μλ μλ€. (μ±λ₯ ν
μ€νΈ μλν κ°λ₯)
// μ μ λͺ¨λλ‘ μ€μΉ
npm install -g lighthouse
// κ²μ¬λ₯Ό μ€ν
lighthouse <url>
// λͺ¨λ μ΅μ
μ λ³Ό μ μλ€.
lighthouse --help
Performance - μΉ μ±λ₯μ μΈ‘μ
νλ©΄μ μ½ν
μΈ κ° νμλλλ° μκ°μ΄ μΌλ§λ 걸리λμ§,
νμλ ν μ¬μ©μμ μνΈμμ©νκΈ° κΉμ§ μΌλ§λ 걸리λμ§,
νλ©΄μ λΆμμ ν μμλ μλμ§ λ±μ νμΈνλ€.
Accessibility - μΉ μ κ·Όμ±μ μ κ°μΆκ³ μλμ§ νμΈ
λ체 ν
μ€νΈλ₯Ό μ μμ±νλμ§,
λ°°κ²½μκ³Ό μ½ν
μΈ μμμ λλΉκ° μΆ©λΆνμ§,
μ μ ν WAI-ARIA μμ±μ μ¬μ©νλμ§ λ±μ νμΈνλ€.
Best Practices - μΉ νμ€ λͺ¨λ² μ¬λ‘λ₯Ό μ λ°λ₯΄κ³ μλμ§ νμΈ
HTTPS νλ‘ν μ½μ μ¬μ©νλμ§,
μ¬μ©μκ° νμΈν νλ₯ μ λμ§ μμ§λ§
μ½μ μ°½μ μ€λ₯κ° νμ λμ§λ μλμ§ λ±μ νμΈ
SEO - κ²μ μμ§ μ΅μ ν νμΈ
μ ν리μΌμ΄μ
μ robots.txtκ° μ ν¨νμ§,
meta μμλ μ μμ±λμ΄ μλμ§,
ν
μ€νΈ ν¬κΈ°κ° μ½κΈ°μ λ¬΄λ¦¬κ° μλμ§ λ±μ νμΈνλ€.
PWA (Progressive Web App) - λͺ¨λ°μΌ μ ν리μΌμ΄μ
μΌλ‘μλ μ μλνλμ§ νμΈ
μ± μμ΄μ½μ μ 곡νλμ§, μ€νλμ νλ©΄μ΄ μλμ§,
νλ©΄ ν¬κΈ°μ λ§κ² μ½ν
μΈ λ₯Ό μ μ νκ² λ°°μΉνλμ§ λ±μ
μ μκ° μλ 체ν¬λ¦¬μ€νΈλ‘ νμΈνλ€.