Jieunny์˜ ๋ธ”๋กœ๊ทธ

S4) Unit 8. [์ตœ์ ํ™”]์บ์‹œ & Tree Shaking & Lighthouse ๋ณธ๋ฌธ

CodeStates/learning contents

S4) Unit 8. [์ตœ์ ํ™”]์บ์‹œ & Tree Shaking & Lighthouse

Jieunny 2023. 3. 30. 15:18

๐Ÿ“ฃ  ์บ์‹œ ์‚ฌ์šฉํ•˜๊ธฐ

๐Ÿญ. ์บ์‹œ

โœ”๏ธ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋‚˜ ๊ฐ’์„ ๋ฏธ๋ฆฌ ๋ณต์‚ฌํ•ด ๋†“๋Š” ์ž„์‹œ ์žฅ์†Œ

โžฐ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ๋‚˜ ๊ฐ’์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉ

 

๐Ÿฎ. ์บ์‹œ๋ฅผ ์ด์šฉํ•œ ์š”์ฒญ ๊ณผ์ •

1. ์ฒซ ๋ฒˆ์งธ ์š”์ฒญ์—์„œ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

โžฐ ์„œ๋ฒ„์—์„œ ์‘๋‹ต์„ ๋ณด๋‚ด์ค„ ๋•Œ ์ด๋ฏธ์ง€ ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ํ—ค๋”์— Cache๋ฅผ ์ž‘์„ฑํ•ด์„œ ๋ณด๋‚ธ๋‹ค.

=> ํ•ด๋‹น ์ด๋ฏธ์ง€ ํŒŒ์ผ์ด 60์ดˆ๋™์•ˆ ์œ ํšจํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ

HTTP/1.1 200 OK
Content-Type: image/jpeg
Cache-Control: max-age=60
Content-Length: 34012

// ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œ์— ์ €์žฅ

 

2. ๋‘ ๋ฒˆ์งธ ์š”์ฒญ๋ถ€ํ„ฐ๋Š” ์บ์‹œ๋ฅผ ์šฐ์„  ์กฐํšŒํ•˜๊ฒŒ ๋œ๋‹ค.

โžฐ ์บ์‹œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋ฉด์„œ ์•„์ง 60์ดˆ๊ฐ€ ์ง€๋‚˜์ง€ ์•Š์•„ ์œ ํšจํ•˜๋‹ค๋ฉด ์บ์‹œ์—์„œ ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•œ๋‹ค.

โžฐ ์œ ํšจ ์‹œ๊ฐ„์ด 60์ดˆ๊ฐ€ ์ง€๋‚ฌ๋‹ค๋ฉด ์„œ๋ฒ„์—์„œ ๋‹ค์‹œ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„์˜ค๊ฒŒ ๋œ๋‹ค.

 

๐Ÿฏ. ์บ์‹œ์˜ ํšจ๊ณผ

1๏ธโƒฃ ์บ์‹œ๊ฐ€ ์œ ํšจํ•œ ์‹œ๊ฐ„ ๋™์•ˆ ๋„คํŠธ์›Œํฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์•„๋‚„ ์ˆ˜ ์žˆ๋‹ค.

2๏ธโƒฃ ํŒŒ์ผ์„ ๋‹ค์‹œ ๋ฐ›์•„์˜ฌ ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ € ๋กœ๋”ฉ์ด ๋นจ๋ผ์ง„๋‹ค.

3๏ธโƒฃ ๋กœ๋”ฉ์ด ๋นจ๋ผ์ง„ ๋งŒํผ ๋น ๋ฅธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ œ๊ณต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๐Ÿฐ. ์บ์‹œ ๊ฒ€์ฆ ํ—ค๋”์™€ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ

โœ”๏ธ ์บ์‹œ ์œ ํšจ ์‹œ๊ฐ„์€ ์ง€๋‚ฌ์ง€๋งŒ, ์„œ๋ฒ„์—์„œ ๋‹ค์‹œ ๋ฐ›์•„์™€์•ผํ•˜๋Š” ํŒŒ์ผ์ด ์บ์‹œ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ํŒŒ์ผ๊ณผ ์™„์ „ํžˆ ๋™์ผํ•œ ๊ฒฝ์šฐ 

=> ๋˜‘๊ฐ™์€ ํŒŒ์ผ์„ ๋‹ค์‹œ ๋ฐ›์•„์˜ฌ ํ•„์š” ์—†์ด ์„œ๋ฒ„์˜ ํŒŒ์ผ๊ณผ ์บ์‹œ์˜ ํŒŒ์ผ์ด ๋™์ผํ•œ์ง€ ํ™•์ธํ•ด์„œ ์žฌ์‚ฌ์šฉ

=> ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” HTTP ํ—ค๋”(์บ์‹œ ๊ฒ€์ฆ ํ—ค๋”, ์กฐ๊ฑด๋ถ€ ์š”์ฒญ ํ—ค๋”)

 

1๏ธโƒฃ ์บ์‹œ ๊ฒ€์ฆ ํ—ค๋” 

โœ”๏ธ ์บ์‹œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์™€ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋™์ผํ•œ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์€ ์‘๋‹ต ํ—ค๋”

โžฐ Last-Modified : ๋ฐ์ดํ„ฐ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ˆ˜์ •๋œ ์‹œ์ ์„ ์˜๋ฏธํ•˜๋Š” ์‘๋‹ต ํ—ค๋”๋กœ, ์กฐ๊ฑด๋ถ€ ์š”์ฒญ ํ—ค๋”์ธ If-Modified-Since ์™€ ๋ฌถ์–ด์„œ ์‚ฌ์šฉ

โžฐ Etag : ๋ฐ์ดํ„ฐ์˜ ๋ฒ„์ „์„ ์˜๋ฏธํ•˜๋Š” ์‘๋‹ต ํ—ค๋”๋กœ, ์กฐ๊ฑด๋ถ€ ์š”์ฒญ ํ—ค๋”์ธ If-None-Match ์™€ ๋ฌถ์–ด์„œ ์‚ฌ์šฉ

 

2๏ธโƒฃ ์กฐ๊ฑด๋ถ€ ์š”์ฒญ ํ—ค๋”

โœ”๏ธ ์บ์‹œ์˜ ๋ฐ์ดํ„ฐ์™€ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋™์ผํ•˜๋‹ค๋ฉด ์žฌ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ด๋‹ฌ๋ผ๋Š” ์˜๋ฏธ์˜ ์š”์ฒญ ํ—ค๋”

โžฐ  If-Modified-Since : ์บ์‹œ๋œ ๋ฆฌ์†Œ์Šค์˜ Last-Modified ๊ฐ’ ์ดํ›„์— ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๊ฐ€ ์ˆ˜์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์ˆ˜์ •๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์บ์‹œ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

โžฐ  If-None-Match : ์บ์‹œ๋œ ๋ฆฌ์†Œ์Šค์˜ ETag ๊ฐ’๊ณผ ํ˜„์žฌ ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค์˜ ETag ๊ฐ’์ด ๊ฐ™์€์ง€ ํ™•์ธํ•˜๊ณ , ๊ฐ™์œผ๋ฉด ์บ์‹œ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.


๐Ÿ“ฃ  ํŠธ๋ฆฌ์‰์ดํ‚น

๐Ÿญ. ํŠธ๋ฆฌ์‰์ดํ‚น์ด๋ž€?

โœ”๏ธ ๋‚˜๋ฌด๋ฅผ ํ”๋“ค์–ด ์ž”๊ฐ€์ง€๋ฅผ ํ„ธ์–ด๋‚ด๋“ฏ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ

โžฐ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ๋“ค์„ ์ฐพ์•„๋‚ด์–ด ์ œ๊ฑฐํ•˜๋ฉด ์›น ์‚ฌ์ดํŠธ ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ํฐ ๋„์›€์ด ๋œ๋‹ค.

 

1๏ธโƒฃ JavaScript ํŒŒ์ผ์˜ ํฌ๊ธฐ

โœ”๏ธ ์›น ์‚ฌ์ดํŠธ์— ์ธํ„ฐ๋ž™์…˜์ด ๋งŽ์•„์ง„ ๋งŒํผ JS์˜ ๋น„์ค‘์ด ๋†’์•„์กŒ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ

โžฐ ํฌ๊ธฐ๊ฐ€ ํ›จ์”ฌ ์ปค์ง„ JavaScript ํŒŒ์ผ์ด ๋Š˜์–ด๋‚œ ์š”์ฒญ ํšŸ์ˆ˜๋งŒํผ ๋” ์˜ค๊ฐ€๋Š” ๊ฒƒ์ด๋‹ˆ, ๋„คํŠธ์›Œํฌ ๋ฆฌ์†Œ์Šค ์†Œ๋ชจ๋„ ๊ทธ๋งŒํผ ์ปค์ง„๋‹ค.

โžฐ ํŒŒ์ผ์ด ์˜ค๊ณ  ๊ฐ€๋Š” ๋™์•ˆ ํ™”๋ฉด ํ‘œ์‹œ๊ฐ€ ๋Šฆ์–ด์ง„๋‹ค๋Š” ๊ฒƒ์„ ๋œปํ•˜๊ณ , ๋„คํŠธ์›Œํฌ ์†๋„๊ฐ€ ๋Š๋ฆฐ ํ™˜๊ฒฝ์—์„œ๋Š” ๋” ๋Š๋ ค์ง„๋‹ค.

=> ํŠธ๋ฆฌ์‰์ดํ‚น์„ ํ†ตํ•ด ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ๊ฐ€๋Šฅํ•œ ์ค„์ด๋Š” ๊ฒƒ์ด ์ตœ์ ํ™”์— ๋„์›€์ด ๋œ๋‹ค.

 

2๏ธโƒฃ JavaScript ํŒŒ์ผ์˜ ์‹คํ–‰ ์‹œ๊ฐ„

โœ”๏ธ ์ฝ”๋“œ ์‹คํ–‰๊นŒ์ง€ ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ๊ณผ์ •์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— JavaScript๋Š” ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค์— ๋น„ํ•ด์„œ ์‹คํ–‰๊นŒ์ง€ ์ƒ๋Œ€์ ์œผ๋กœ ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋ชจํ•œ๋‹ค.

โžฐ JavaScript ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง„ ๋งŒํผ, ํŒŒ์ผ์˜ ์‹คํ–‰ ์‹œ๊ฐ„ ๋˜ํ•œ ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ช‡ ๋ฐฐ์˜ ์‹œ๊ฐ„์„ ํŒŒ์ผ ์‹คํ–‰์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

=> ๊ทธ๋งŒํผ ์ดํƒˆ๋ฅ ์€ ๊ทธ๋งŒํผ ์ปค์ง€๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋ฆฌ์‰์ดํ‚น์„ ํ†ตํ•œ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

๐Ÿฎ. JavaScript ํŠธ๋ฆฌ์‰์ดํ‚น์ด๋ž€?

1๏ธโƒฃ ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋งŒ import ํ•˜๊ธฐ

โœ”๏ธ import ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ์‚ฌ์šฉํ•  ๋•Œ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ „์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋งŒ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ๋ฒˆ๋“ค๋ง ๊ณผ์ •์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋งŒ ํฌํ•จ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋ฆฌ์‰์ดํ‚น์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

import { useState, useEffect } from 'react'
// import React from 'react' ๋ณด๋‹ค ์œ„์ฒ˜๋Ÿผ ํ•˜์ž.

 

2๏ธโƒฃ Babelrc ํŒŒ์ผ ์„ค์ •ํ•˜๊ธฐ

โœ”๏ธ Barbelrc ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ES5๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

โžฐ Babel : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์ด ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ํ˜ธํ™˜์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ES5 ๋ฌธ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

โžฐ ES5๋ฌธ๋ฒ•์€ import๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— commonJS ๋ฌธ๋ฒ•์˜ require๋กœ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š”๋ฐ, ์ด ๊ณผ์ •์€ ํŠธ๋ฆฌ์‰์ดํ‚น์— ํฐ ๊ฑธ๋ฆผ๋Œ์ด ๋œ๋‹ค.

{
  “presets”: [ 
    [
      “@babel/preset-env”,
      {
	    "modules": false
      }
    ]
 ]
}

 

3๏ธโƒฃ SideEffects ์„ค์ •ํ•˜๊ธฐ

โœ”๏ธ ์›นํŒฉ์€ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋ผ๋„ ํŠธ๋ฆฌ์‰์ดํ‚น ๋Œ€์ƒ์—์„œ ์ œ์™ธ์‹œํ‚จ๋‹ค.

โžฐ package.json ํŒŒ์ผ์—์„œ sideEffects๋ฅผ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š์„ ๊ฒƒ์ด๋ฏ€๋กœ ์ฝ”๋“œ๋ฅผ ์ œ์™ธ์‹œ์ผœ๋„ ๋จ์„ ์›นํŒฉ์—๊ฒŒ ์•Œ๋ ค์ค€๋‹ค.

{
  "name": "tree-shaking",
  "version": "1.0.0",
  "sideEffects": false
}

// ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์„ ์•Œ๋ ค์คŒ.

{
  "name": "tree-shaking",
  "version": "1.0.0",
  "sideEffects": ["./src/components/NoSideEffect.js"]
}

// ํŠน์ • ํŒŒ์ผ์—์„œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์„ ์•Œ๋ ค์คŒ.

 

4๏ธโƒฃ ES6 ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ ์‚ฌ์šฉํ•˜๊ธฐ

โœ”๏ธ ES5 ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์„ ํ†ต์งธ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ์ƒ๊ด€์—†์ง€๋งŒ, ์ผ๋ถ€๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ํ•ด๋‹น ๋ชจ๋“ˆ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์œผ๋ฉด์„œ ES6๋ฅผ ์ง€์›ํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํŠธ๋ฆฌ์‰์ดํ‚น์— ์œ ๋ฆฌํ•˜๋‹ค.

โžฐ ES6 ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ๋ชจ๋“ˆ์—์„œ๋„ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ import ํ•ด์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ๋Š” ๋นŒ๋“œํ•  ๋•Œ ์ œ์™ธ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


๐Ÿ“ฃ  Lighthouse

๐Ÿญ. Lighthouse๋ž€?

โœ”๏ธ ์‚ฌ์ดํŠธ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์„ฑ๋Šฅ ์ธก์ •์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ

โžฐ ๊ตฌ๊ธ€์—์„œ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ์†Œ์Šค๋กœ์„œ ์›น ํŽ˜์ด์ง€์˜ ํ’ˆ์งˆ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋™ํ™” ํˆด

โžฐ ์„ฑ๋Šฅ, ์ ‘๊ทผ์„ฑ, PWA, SEO ๋“ฑ์„ ๊ฒ€์‚ฌํ•˜๋ฉฐ ์ด๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž๋Š” ์–ด๋–ค ์›นํŽ˜์ด์ง€๋“  ํ’ˆ์งˆ ๊ฒ€์‚ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿฎ. Lighthouse ์‹œ์ž‘ํ•˜๊ธฐ

1๏ธโƒฃ Chrome ๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ ์‹คํ–‰ํ•˜๊ธฐ

1. ํฌ๋กฌ์—์„œ ๊ฒ€์‚ฌํ•˜๊ณ  ์‹ถ์€ ํŽ˜์ด์ง€์˜ url์„ ํด๋ฆญํ•œ๋‹ค.

2. ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์—ฐ๋‹ค.

3. lighthouse ํƒญ์„ ํด๋ฆญํ•œ๋‹ค.

    ใ„ด (1) Generate report๋ฅผ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ Categories์—์„œ ํŠน์ •ํ•œ ์ง€ํ‘œ๋งŒ ์„ ํƒํ•˜์—ฌ ๊ฒ€์‚ฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

    ใ„ด (2) ๋Œ€๋žต 30-60์ดˆ๊ฐ„ ๊ฒ€์‚ฌ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ๋ฆฌํฌํŠธ๊ฐ€ ํ•ด๋‹น ํŽ˜์ด์ง€์˜ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋‚ด์— ์ƒ์„ฑ๋œ๋‹ค.

 

2๏ธโƒฃ Node CLI์—์„œ ์‹คํ–‰ํ•˜๊ธฐ

1. -g ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Lighthouse๋ฅผ ์ „์—ญ ๋ชจ๋“ˆ๋กœ ์„ค์น˜ํ•œ๋‹ค.

npm install -g lighthouse

2. ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

lighthouse <url>

3. Lighthouse์˜ ๋ชจ๋“  ์˜ต์…˜์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

lighthouse --help

 

๐Ÿฏ. Lighthouse ๋ถ„์„ ๊ฒฐ๊ณผ ํ•ญ๋ชฉ

1๏ธโƒฃ Performance

โœ”๏ธ ์›น ์„ฑ๋Šฅ์„ ์ธก์ •ํ•œ๋‹ค.

โžฐ ํ™”๋ฉด์— ์ฝ˜ํ…์ธ ๊ฐ€ ํ‘œ์‹œ๋˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฌ๋Š”์ง€, ํ‘œ์‹œ๋œ ํ›„ ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ๊นŒ์ง„ ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฌ๋Š”์ง€, ํ™”๋ฉด์— ๋ถˆ์•ˆ์ •ํ•œ ์š”์†Œ๋Š” ์—†๋Š”์ง€ ๋“ฑ์„ ํ™•์ธํ•œ๋‹ค.

 

2๏ธโƒฃ Accessibility

โœ”๏ธ ์›น ํŽ˜์ด์ง€๊ฐ€ ์›น ์ ‘๊ทผ์„ฑ์„ ์ž˜ ๊ฐ–์ถ”๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

โžฐ ๋Œ€์ฒด ํ…์ŠคํŠธ๋ฅผ ์ž˜ ์ž‘์„ฑํ–ˆ๋Š”์ง€, ๋ฐฐ๊ฒฝ์ƒ‰๊ณผ ์ฝ˜ํ…์ธ  ์ƒ‰์ƒ์˜ ๋Œ€๋น„๊ฐ€ ์ถฉ๋ถ„ํ•œ์ง€, ์ ์ ˆํ•œ WAI-ARIA ์†์„ฑ์„ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ๋“ฑ์„ ํ™•์ธํ•œ๋‹ค.

 

3๏ธโƒฃ Best Practices

โœ”๏ธ ์›น ํŽ˜์ด์ง€๊ฐ€ ์›น ํ‘œ์ค€ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ž˜ ๋”ฐ๋ฅด๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

โžฐ HTTPS ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜๋Š”์ง€, ์‚ฌ์šฉ์ž๊ฐ€ ํ™•์ธํ•  ํ™•๋ฅ ์€ ๋†’์ง€ ์•Š์ง€๋งŒ ์ฝ˜์†” ์ฐฝ์— ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ ๋˜์ง€๋Š” ์•Š๋Š”์ง€ ๋“ฑ์„ ํ™•์ธํ•œ๋‹ค.

 

4๏ธโƒฃ SEO

โœ”๏ธ ์›น ํŽ˜์ด์ง€๊ฐ€ ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”๊ฐ€ ์ž˜ ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

โžฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ robots.txt๊ฐ€ ์œ ํšจํ•œ์ง€, <meta> ์š”์†Œ๋Š” ์ž˜ ์ž‘์„ฑ๋˜์–ด ์žˆ๋Š”์ง€, ํ…์ŠคํŠธ ํฌ๊ธฐ๊ฐ€ ์ฝ๊ธฐ์— ๋ฌด๋ฆฌ๊ฐ€ ์—†๋Š”์ง€ ๋“ฑ์„ ํ™•์ธํ•œ๋‹ค.

 

5๏ธโƒฃ PWA(Progressive Web App)

โœ”๏ธ ์›น ์‚ฌ์ดํŠธ๊ฐ€ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ์„œ๋„ ์ž˜ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.

โžฐ ์•ฑ ์•„์ด์ฝ˜์„ ์ œ๊ณตํ•˜๋Š”์ง€, ์Šคํ”Œ๋ž˜์‹œ ํ™”๋ฉด์ด ์žˆ๋Š”์ง€, ํ™”๋ฉด ํฌ๊ธฐ์— ๋งž๊ฒŒ ์ฝ˜ํ…์ธ ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๋ฐฐ์น˜ํ–ˆ๋Š”์ง€ ๋“ฑ์„ ์ ์ˆ˜๊ฐ€ ์•„๋‹Œ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋กœ ํ™•์ธํ•œ๋‹ค.

 

๐Ÿฐ. Lighthouse ์˜ Performance ์ธก์ • ๋ฉ”ํŠธ๋ฆญ

1๏ธโƒฃ First Contentful Paint(FCP)

โœ”๏ธ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฉ”ํŠธ๋ฆญ

โžฐ ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€์— ์ ‘์†ํ–ˆ์„ ๋•Œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ DOM ์ปจํ…์ธ ์˜ ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์„ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ธก์ •ํ•œ๋‹ค.

โžฐ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ์ง€ํ•˜๋Š” ํŽ˜์ด์ง€์˜ ๋กœ๋”ฉ์†๋„๋ฅผ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์šฐ์ˆ˜ํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋ ค๋ฉด FCP๊ฐ€ 1.8์ดˆ ์ดํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

โžฐ ์ฒซ ๋ฒˆ์งธ ๋ Œ๋”๋ง ์‹œ์ ์„ ์ธก์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ฃผ์š” ์ฝ˜ํ…์ธ  ๋กœ๋”ฉ์ด ์™„๋ฃŒ๋œ ์‹œ์ ์„ ์ธก์ •ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค๋ฉด LCP ์ง€ํ‘œ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2๏ธโƒฃ Largest Contentful Paint(LCP)

โœ”๏ธ ๋ทฐํฌํŠธ๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์ฝ˜ํ…์ธ (์ด๋ฏธ์ง€ ๋˜๋Š” ํ…์ŠคํŠธ ๋ธ”๋ก)์˜ ๋ Œ๋” ์‹œ๊ฐ„์„ ์ธก์ •ํ•œ๋‹ค.

โžฐ ์ฃผ์š” ์ฝ˜ํ…์ธ ๊ฐ€ ์œ ์ €์—๊ฒŒ ๋ณด์ด๋Š” ์‹œ๊ฐ„๊นŒ์ง€๋ฅผ ๊ฐ€๋Š ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3๏ธโƒฃ Speed Index

โœ”๏ธ ์„ฑ๋Šฅ ์ง€ํ‘œ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฉ”ํŠธ๋ฆญ

โžฐ ํŽ˜์ด์ง€๋ฅผ ๋กœ๋“œํ•˜๋Š” ๋™์•ˆ ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ์ปจํ…์ธ ๊ฐ€ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” ์ง€๋ฅผ ์ธก์ •ํ•œ๋‹ค.

โžฐ ๋ผ์šฐ์ €์˜ ํŽ˜์ด์ง€ ๋กœ๋”ฉ๊ณผ์ •์„ ๊ฐ ํ”„๋ ˆ์ž„๋งˆ๋‹ค ์บก์ณํ•˜๊ณ , ํ”„๋ ˆ์ž„ ๊ฐ„ ํ™”๋ฉด์— ๋ณด์ด๋Š” ์š”์†Œ๋“ค์„ ๊ณ„์‚ฐํ•œ๋‹ค.

โžฐ ๊ทธ ํ›„ Speedline Node.js module์„ ์ด์šฉํ•ด์„œ Speed Index ์ ์ˆ˜๋ฅผ ๊ทธ๋ž˜ํ”„์˜ ํ˜•ํƒœ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

4๏ธโƒฃ Time to interactive(TTI)

โœ”๏ธ ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋˜๋Š” ์‹œ์ ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•œ ์‹œ์ ๊นŒ์ง€์˜ ์‹œ๊ฐ„์„ ์ธก์ •ํ•œ๋‹ค.

โžฐ ํŽ˜์ด์ง€๊ฐ€ ์™„์ „ํžˆ ์ƒํ˜ธ ์ž‘์šฉ ๊ฐ€๋Šฅํ•˜๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„์„ ์ธก์ •ํ•œ๋‹ค.

โžฐ ์ƒํ˜ธ ์ž‘์šฉ ๊ฐ€๋Šฅ์˜ ๊ธฐ์ค€

    ใ„ด ํŽ˜์ด์ง€์— FCP๋กœ ์ธก์ •๋œ ์ปจํ…์ธ ๊ฐ€ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•œ๋‹ค.

    ใ„ด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๊ฐ€์žฅ ์ž˜ ๋ณด์ด๋Š” ํŽ˜์ด์ง€์˜ ์—˜๋ฆฌ๋จผํŠธ์— ๋“ฑ๋ก๋œ๋‹ค.

    ใ„ด ํŽ˜์ด์ง€๊ฐ€ 0.05์ดˆ์•ˆ์— ์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ์— ์‘๋‹ตํ•œ๋‹ค.

โžฐ TTI ์ ์ˆ˜๋Š” ์•„์นด์ด๋ธŒ๋œ HTTP ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐฑ๋ถ„์œ„ ๋‹จ์œ„๋กœ ์ ์ˆ˜๋ฅผ ์ธก์ •ํ•œ๋‹ค.

 

5๏ธโƒฃ Total Blocking Time(TBT)

โœ”๏ธ ํŽ˜์ด์ง€๊ฐ€ ์œ ์ €์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ๊นŒ์ง€์˜ ๋ง‰ํ˜€์žˆ๋Š” ์‹œ๊ฐ„์„ ์ธก์ •ํ•œ๋‹ค(0.05์ดˆ๊ฐ€ ๋„˜๋Š” ์ž‘์—…)

โžฐ FCP์™€ TTI ์‚ฌ์ด์— ๊ธด ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…๋“ค์„ ๋ชจ๋‘ ๊ธฐ๋กํ•˜์—ฌ TBT๋ฅผ ์ธก์ •ํ•œ๋‹ค.

 

6๏ธโƒฃ Cumulative Layout Shift(CLS)

โœ”๏ธ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ปจํ…์ธ ๊ฐ€ ํ™”๋ฉด์—์„œ ์–ผ๋งˆ๋‚˜ ๋งŽ์ด ์›€์ง์ด๋Š”์ง€(๋ถˆ์•ˆ์ •ํ•œ ์ง€)๋ฅผ ์ˆ˜์น˜ํ™”ํ•œ ์ง€ํ‘œ

โžฐ ํ™”๋ฉด์—์„œ ์ด๋ฆฌ์ €๋ฆฌ ์›€์ง์ด๋Š” ์š”์†Œ(๋ถˆ์•ˆ์ •ํ•œ ์š”์†Œ)๊ฐ€ ์žˆ๋Š” ์ง€๋ฅผ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿฑ. ๊ฐœ์„  ๋ฐฉํ–ฅ ์žก๊ธฐ

โœ”๏ธ Opportunities ํ•ญ๋ชฉ์„ ํ™•์ธํ•˜๋ฉด ๊ฐ ๋ฉ”ํŠธ๋ฆญ๋ณ„ ๋ฌธ์ œ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

โžฐ ๊ฐ ํ•ญ๋ชฉ์„ ์—ด์–ด๋ณด๋ฉด ํ•ด๋‹น ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ƒ์„ธ ์„ค๋ช…๊ณผ ํ•จ๊ป˜ ์–ด๋–ค ์ฝ”๋“œ, ์–ด๋–ค ํ™”๋ฉด์—์„œ ๋ฌธ์ œ ์ƒํ™ฉ์„ ๋ฐœ๊ฒฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ ํ™”์˜ ๋ฐฉํ–ฅ์„ ์žก๊ธฐ ์ข‹๋‹ค.