๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ ์ฝ”๋“œ์Šค์ฟผ๋“œ/ํ•™์Šต์ •๋ฆฌ

์›น์‚ฌ์ดํŠธ ์ตœ์ ํ™”

by Tamii 2021. 6. 1.
๋ฐ˜์‘ํ˜•

์˜ค๋ž˜๋˜๊ณ  ๊ธฐ๋Šฅ์ด ๋งŽ์€ ์„œ๋น„์Šค๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ด์•ผ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค.

 

Network

์ž์›๋“ค์ด ๋งŽ์ด ์“ฐ์ด๋Š”์ง€

์„œ๋ฒ„์— ๊ฐ”๋‹ค์˜ค๋Š” ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋Š”์ง€

 DOM content element์˜ ๋กœ๋”ฉ ์‹œ์ ์„ ์•Œ์•„๋ƒ„

Performance -๋ณ‘๋ชฉ์ง€์  ( ์–ด๋Š ๋ถ€๋ถ„์—์„œ ์‹œ๊ฐ„์ด ๋งŽ์ด  ์†Œ์š”๋˜์—ˆ๋Š”์ง€)๋ฅผ ๋ณด๋ฉฐ ์„ฑ๋Šฅ์„ ์ธก์ •ํ–ˆ์—ˆ๋‹ค.

 

LightHouse 

๋กœ๋”ฉ ์†๋„์— ๋Œ€ํ•œ ์ง„๋‹จ 

์„ฑ๋Šฅ ๊ฐœ์„ ์˜ ์ฒ™๋„๊ฐ€ ๋œ๋‹ค

FCP : 

FMP: 

 

์›นํŽ˜์ด์ง€์˜ ์„ฑ๋Šฅ์„ ๊ฒฐ์ •ํ•˜๋Š” ์ฃผ์š” ์š”์†Œ

* ์ฒซํŽ˜์ด์ง€๊ฐ€ ๋Š๋ฆฐ ๊ฒƒ  FCP, FMP

* ๋ฐ˜์‘์ด ๋Š๋ฆฐ ๊ฒƒ

* ๋Š๊ธฐ๋Š” ๊ฒƒ (์• ๋‹ˆ๋ฉ”์ด์…˜)

 

 

์ตœ์ ํ™” ์ž‘์—… ์ง„ํ–‰ ๋ฐฉ๋ฒ•

์ง„๋‹จ  -> ๊ฐœ์„  -> ํ…Œ์ŠคํŠธ -> ์ง„๋‹จ 

 

*์ฐธ๊ณ ) ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋ฐ”๋‹๋ผ๋ณด๋‹ค ๋” ๋งŽ์€ ์ ˆ์ฐจ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋™์ž‘๋œ๋‹ค .

 

๐Ÿ˜ฎ ?์›น์ตœ์ ํ™”์— ๋Œ€ํ•ด์„œ ์•„์‹œ๋Š”๊ฑฐ ์ž‡์–ด์š”

Dom๋กœ๋”ฉ์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ JS ๋ฅผ defer์‹œ์— ์ ์šฉํ•ด์„œ

ํŒŒ์ผ์„ ์••์ถ•ํ•˜๊ณ  ๋จธ์ง€์‹œ์ผœ์„œ ๋ฐฐํฌํ•˜๋Š” ๋“ฑ์˜ ์ „๋žต์„ ํ†ตํ•ด ๋กœ๋”ฉ์†๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 


1๏ธโƒฃ  ์ฒซํŽ˜์ด์ง€๋ฅผ ๋น ๋ฅด๊ฒŒ  ํ•˜์ž

* HTML Parsing ๋ฐฉํ•ดํ•˜์ง€ ์•Š๊ธฐ

<script> body ๋์— , defer ๋‚˜ async๋ฅผ ์‚ฌ์šฉ

 

*buid๋ฅผ ํ†ตํ•œ ์ฝ”๋“œ ์ตœ์ ํ™” (ํŒŒ์ผ ์••์ถ•ํ•˜๊ณ  ๋จธ์ง€ ๋ฐฐํฌ)

code obfuscation ์˜ค๋ธŒ์Šค์ผ€์ดํŒ…(๋‚œ๋…ํ™”)  -> ๋‚ด๊ฐ€์ง  function์ด๋ฆ„์˜ ๊ธ€์ž or ๊ณต๋ฐฑ ๋“ฑ์„  ์ถ•์†Œํ•ด ๋ฌผ๋ฆฌ์ ์ธ ์‚ฌ์ดํŠธ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์ค„์ธ๋‹ค.

์—ฌ๋Ÿฌ๊ฐœ ํŒŒ์ผ๋“ค์„ ํ•ฉ์ณ์„œ ๋ฐฐํฌ 

 

*SSR

SPA ์‹ฑ๊ธ€ํŽ˜์ด์ง€  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜ ๋™์ž‘ ๊ณผ์ •

์‚ฌ์šฉ์ž ์š”์ฒญ ->index.html ๊ป๋ฐ๊ธฐ ๋จผ์ € ์คŒ ->  JS์š”์ฒญ -> JS๋ฐ›์•„์™”์Œ -> API ์š”์ฒญ์ด์ž‡์Œ -> API ๋ฐ›์•„์˜ด -> ๋ Œ๋”๋ง ํ•จ -> ํ™”๋ฉด ๋ณด์ž„ ( ์‚ฌ์‹ค ๋Š๋ฆผ)

 

SSR ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง

index.html ์š”์ฒญ -> ์–ด? ์•„๊นŒ ์š”์ฒญํ–ˆ์ž๋‚˜? cache์— ๋„ฃ๊ธฐ -> ๊ธฐ๋‹ค๋ฆฌ๋‹ค๊ฐ€ ์š”์ฒญํ•˜๋ฉด -> ๋นจ๋ฆฌ response

๋ฏธ๋ฆฌ ์˜๋ฏธ์žˆ๋Š” ์ฒซํŽ˜์ด์ง€๋ฅผ ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•ด  ์ „๋‹ฌํ•˜์ž!

ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฆฌ์•กํŠธ๋กœ ๋ Œ๋”๋งํ•˜๋ฉด, ์„œ๋ฒ„์—์„œ๋„ ๋ฆฌ์—‘ํŠธ๋กœ ๋ Œ๋”๋ง์„ ํ•ด์•ผํ•จ -> 

โค๏ธ ์ฒซํŽ˜์ด์ง€๋ฅผ ๋น ๋ฅด๊ฒŒ ๋œจ๊ฒŒ ํ•จ

โค๏ธ SEO์— ์ข‹์Œ

 

ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง CSR

CSR๋กœ ๋ Œ๋”๋ง -> Node.js๋กœ ์—ฐ๊ฒฐํ•ด์„œ ์ „๋‹ฌํ•จ (ํ”„๋ก ํŠธ์„œ๋ฒ„)

pre-rendering : build๋‹จ๊ณ„์—์„œ API์š”์ฒญ์„ ๋‹ค ํ•ด ์™„์„ฑ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ „๋‹ฌ 

 

*Lazy Loading

์ด๋ฏธ์ง€๋กœ๋”ฉ์€ ๋ Œ๋”๋ง ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์—,  ์Šคํฌ๋กค ์ด๋ฒคํŠธ๋ฅผ ๋ฐฉํ•ดํ•  ์ˆ˜ ์žˆ์Œ

lascChild๋กœ append๋ฅผ ์‹œ์ผœ์„œ 

ex) 100๊ฐœ์˜ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด , 10๊ฐœ๋งŒ ๋จผ์ € ๊ฐ€์ ธ์˜ค๊ณ   -> ์‚ฌ์šฉ์ž์˜ ์Šคํฌ๋กค ->  ๊ทธ ๋‹ค์Œ์— 10๊ฐœ ๊ฐ€์ ธ์˜ค๊ณ  

๋™์ ์œผ๋กœ scriptํŒŒ์ผ์„ ํ™”๋ฉด์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ 

JS lazy Loading: <script ๋ฅผ ๋™์ ์œผ๋กœ ํ™”๋ฉด์— ๋„ฃ์œผ๋ฉด  -> DOM์— ์ถ”๊ฐ€๋จ -> ๋ฐ”๋กœ server์— ์š”์ฒญ (request) -> ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฐ”๋กœ ์‹คํ–‰

Image lazy Loading: <img ๋ฅผ ๋™์ ์œผ๋กœ DOM์— ์ถ”๊ฐ€ํ•˜๊ธฐ ->  ''

React? -> lazy component Loading ๊ฐ€๋Šฅ!

 

Dynamic import 

๋™์ ์œผ๋กœ JS ์ค‘๊ฐ„์— ์ฝ”๋“œ๋ฅผ import ํ•ด์„œ tk์‚ฌ์šฉ 

 

IntersectionObserver

 

 

2๏ธโƒฃ  ๋Š๋ฆฐ ์• ๋‹ˆ๋ฉ”์ด์…˜์˜  ์ง€์—ฐ์„  ํ•ด๊ฒฐํ•˜์ž

*๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ blocking ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•œ ๋‚ด๋ถ€์กฐ์น˜๋“ค (Fiber architecture)

- ๋ฉ”์ธ์Šค๋ ˆ๋“œ๊ฐ€ ๋นˆ ์‹œ๊ฐ„์— ํ‹ˆํ‹ˆ์ด ๋“ค์–ด์™€ ์ผ์„ ์ฒ˜๋ฆฌํ•จ 

- Fiber architecture: ๋ฉ”์ธ์Šค๋ ˆ๋“œ์— ๋ฐฉํ•ด๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ์ด๋ฏธ๋ Œ๋”๋ง ๋œ๊ฒƒ๊ณผ ๋ Œ๋”๋ง ๋ ๊ฒƒ์„ ๋น„๊ตํ•˜์—ฌ ์ƒˆ๋กœ ๋“ค์–ด์˜ฌ๊ฒƒ๋งŒ ๋ฆฌ๋ Œ๋”๋ง ํ•œ๋‹ค.

- React ๋‚ด๋ถ€์— ์žˆ๋Š” ์†Œ์Šค์ฝ”๋“œ

 

* Re-rendering ์ตœ์†Œํ™” (๊ฐ€์ƒ DOM์„ ํ†ตํ•œ ๋ฒ ๋ชจ๋ฆฌ ๋‹จ๊ณ„์—์„œ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋น„๊ต)

 

*์ค‘๋ณต๊ณ„์‚ฐ ์ค„์ด๊ธฐ

React = ๋ฆฌ๋ Œ๋”๋ง์ด ๋งŽ์ด ๋˜๋Š” ๊ตฌ์กฐ  => ๊ทธ ์•ˆ์˜ ๋ณต์žกํ•œ ์—ฐ์‚ฐ์„ ์ตœ์†Œํ™” ํ•ด์•ผ ํ•จ

Data fetching :

์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค๊ฑธ ๋ˆŒ๋ฅด๋ฉด ์„œ๋ฒ„์— ์š”์ฒญํ•ด์„œ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒŒ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ด์ง€๋งŒ ,

์‚ฌ์šฉ์ž๊ฐ€ ์ผ์ • ์‹œ๊ฐ„๋‚ด์— ์ค‘๋ณต๋œ data๋ฅผ ์ค‘๋ณตํ•ด์„œ ์š”์ฒญํ•  ๊ฒฝ์šฐ์—๋Š” ์บ์‹œ์— ์ €์žฅํ•ด๋‘์—ˆ๋‹ค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Œ (์œ ํšจ์บ์‹œ์‹œ๊ฐ„๋™์•ˆ)

chache then network

์œ ํšจ์บ์‹œ์‹œ๊ฐ„์ด ๋๋‚˜๊ฐˆ์ฏค์— ์บ์‹œ์š”์ฒญ๊ณผ ๋”๋ถˆ์–ด ์„œ๋ฒ„์—๋„ ๋™์‹œ์— ์š”์ฒญํ•˜์—ฌ cache update๋ฅผ ์‹ค์‹œํ•œ๋‹ค.

 

*๋„คํŠธ์›Œํฌ ์š”์ฒญ ์บ์‹œํ•˜๊ธฐ (Service Worker<PWA>, Cache header์ „๋žต)

service Worker ์ผ์ข…์˜ cache ๊ฐ€๋กœ์ฑ„๊ธฐ  - ๋ธŒ๋ผ์šฐ์ €(ํด๋ผ์ด์–ธํŠธ ๋‹จ)์—์„œ ๋™์ž‘ํ•จ

์„œ๋น„์Šค์— ๋”ฐ๋ผ cache์ •์ฑ…์„ ์„ธ์›Œ์„œ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค . (์ฃผ์‹๊ฐ™์€๊ฒฝ์šฐ๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์—)

 

*๋ณต์žกํ•œ ์—ฐ์‚ฐ ์œ„์ž„ (Web Worker ํ™œ์šฉ)

JS๋Š” ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ์ง€๋งŒ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ์ฒ˜๋Ÿผ ๋™์ž‘ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ฆ

๋น„์šฉ์ด ๋น„์‹ธ๊ณ  ๋ณ‘๋ชฉํ˜„์ƒ์ด ๋šœ๋ ทํ•  ๊ฒฝ์šฐ์— ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ

 

 

 

 

 

๋Œ“๊ธ€