๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์›ํ‹ฐ๋“œ ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ

[์›ํ‹ฐ๋“œ ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ] ํฌํŠธํด๋ฆฌ์˜ค ์ž‘์„ฑ์„ ์œ„ํ•œ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ๊ณ ๋„ํ™” - 3ํšŒ์ฐจ

728x90

์˜ค๋Š˜์˜ Agenda๋Š”

์„ฑ๋Šฅ๊ณผ ์ตœ์ ํ™”!

 

Lighthouse

: ์›น ์„ฑ๋Šฅ์„ ๋ถ„์„ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค

์„ฑ๋Šฅ ๋ถ„์„, ์ ‘๊ทผ์„ฑ ๊ฒ€์‚ฌ, SEO ํ‰๊ฐ€, PWQ ๊ธฐ์ค€ ํ‰๊ฐ€๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Lighthouse๋Š” ๊ฐœ๋ฐœ์ž ๋„๊ตฌ(F12)์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

Ligthhouse ํŽ˜์ด์ง€ ๋กœ๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด,

[ ์ค‘๋ณต ๋ชจ๋“ˆ ์ œ๊ฑฐ → ๋นŒ๋“œ → ์‹œํฌ๋ฆฟ ๋ชจ๋“œ ์‹คํ–‰ → Lighthouse ์‹คํ–‰ ] ์ˆœ์„œ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

$ npm dedupe
: npm ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์—์„œ ์ค‘๋ณต๋œ ์˜์กด์„ฑ์„ ์ค„์ด๋Š” ๋ช…๋ น์–ด
node_modules ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ค‘๋ณต๋œ ๋ชจ๋“ˆ์„ ์ œ๊ฑฐํ•ด ํ”„๋กœ์ ํŠธ ํฌ๊ธฐ๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.
( yarn์„ ์‚ฌ์šฉํ•˜์‹œ๋ฉด, ์ž์ฒด์ ์œผ๋กœ ์˜์กด์„ฑ ํ•ด๊ฒฐ ๋ฐ ํŠธ๋ฆฌ๊ตฌ์กฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด ์ค‘๋ณต๋œ ๋ชจ๋“ˆ์„ ์ตœ์†Œํ™”ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค) 

 

$ yarn build
production build์‹œ [ Minification, Tree shaking ] ๋“ฑ ์ตœ์ ํ™”๊ฐ€ ์ง„ํ–‰๋˜์–ด web vital์ด ์ƒ๋‹น ๋ถ€๋ถ„์ด ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค.
Minification : ๋นˆ์นธ, ์ค„๋ฐ”๊ฟˆ ๋“ฑ์„ ์ œ๊ฑฐ / Tree shaking : ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ์ค‘ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”(unused) ์ฝ”๋“œ ์ œ๊ฑฐ
→ ๋ฒˆ๋“ค์„ ์ค„์ž„ => ์†Œ์Šค ์ฝ”๋“œ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ , ์ „์†ก ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋Œ€์—ญํญ ์ ˆ์•ฝ ๋ฐ, ๋ธŒ๋ผ์šฐ์ € ํŒŒ์‹ฑ ์†๋„ ํ–ฅ์ƒ

 

$ yarn global add serve
production build๋กœ ๋นŒ๋“œ๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ํ™•์ธํ•˜๋ ค๋ฉด, serve์™€ ๊ฐ™์€ '์ •์  ํŒŒ์ผ ์„œ๋ฒ„'๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ serve๋ฅผ ์ „์—ญ์œผ๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

 

$ serve -s build
์œ„ ๋ช…๋ น์–ด๋กœ ๋นŒ๋“œ๋œ ์ •์  ํŒŒ์ผ์„ ์„œ๋น™
โ€ป ์ธ์‹๋˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, $ yarn global bin  ์œผ๋กœ ๊ฒฝ๋กœ๋ฅผ ํ™•์ธํ•˜๊ณ , ํ•ด๋‹น ๊ฒฝ๋กœ๋ฅผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ 'PATH'์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
์ €๋Š” ๊ทธ๋ƒฅ.. $ <global-bin-path>/serve -s build๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค..ใ…Ž

ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ localhost:3000 ์ ‘์†!

 

๊ทธ๋ฆฌ๊ณ  [ ์‹œํฌ๋ฆฟ ๋ชจ๋“œ, ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ๋„๊ธฐ ] 

๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜จ ์„ฑ๋Šฅ์€~!~!~!~!

์—..? ์‹คํ™”์ธ๊ฐ€์š”..?๐Ÿ˜‚

๋ฌผ๋ก , ์•„์ง ๊ฐœ๋ฐœ์ด ๋งˆ๋ฌด๋ฆฌ๋˜์ง€ ์•Š๊ธฐ๋„ ํ–ˆ์ง€๋งŒ ์ด ์ •๋„.. ์ผ ์ค„์€... ๐Ÿ˜…

์˜คํžˆ๋ ค ์ž˜๋ฌ์Šต๋‹ˆ๋‹ค.๐Ÿ˜‹

์ฒ˜์Œ๋ถ€ํ„ฐ ์„ฑ๋Šฅ์ด ์ข‹์•˜๋”๋ผ๋ฉด, ๊ฐœ์„ ํ•  ๊ธฐํšŒ๋„ ์—†์—ˆ๊ฒ ์ฃ !

์ด์ œ๋ถ€ํ„ฐ ์„ฑ๋Šฅ์„ ๋†’์ด๋Š” ์ผ๋งŒ ๋‚จ์•˜์Šต๋‹ˆ๋‹ค!!๐Ÿคฉ

 

FCP(First Contentful Paint)
: ํŽ˜์ด์ง€์— ์ฒซ๋ฒˆ์งธ ์ฝ˜ํ…์ธ ๊ฐ€ ํ‘œ์‹œ๋˜๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ์‹œ์ ์„ ์ธก์ •
์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€์˜ ์–ด๋–ค ๋ถ€๋ถ„์ด ๋กœ๋“œ๋˜๊ณ  ์žˆ๋Š”์ง€ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„

๊ฐœ์„  ๋ฐฉ๋ฒ•
์ด๋ฏธ์ง€ ์ตœ์ ํ™” , Lazy Loading, CSS & Javascript ์ตœ์ ํ™”
SI(Speed Index)
: ํŽ˜์ด์ง€๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ๋กœ๋“œ๋˜๋” ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๋Š”์ง€ ์ธก์ •

๊ฐœ์„  ๋ฐฉ๋ฒ•
์ด๋ฏธ์ง€ ์ตœ์ ํ™”, ์บ์‹ฑ ํ™œ์šฉ, CDN ํ™œ์šฉ

CDN ํ™œ์šฉ : ์ฝ˜ํ…์ธ ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ์ „์†กํ•˜๊ธฐ ์œ„ํ•ด Content Delivery Network๋ฅผ ์‚ฌ์šฉ
TBT(Total Blocking Time)
: ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์ค‘์— ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ์ฐจ๋‹จ๋˜๋Š” ์ด ์‹œ๊ฐ„์„ ์ธก์ •

๊ฐœ์„  ๋ฐฉ๋ฒ•
๋น„๋™๊ธฐ ์Šคํฌ๋ฆฝํŠธ ๋กœ๋“œ, CSS ์ตœ์ ํ™”, ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค ์ตœ์ ํ™”
LCP(Largest Contentful Paint) 
: ํŽ˜์ด์ง€์˜ ๊ฐ€์žฅ ํฐ ์ฝ˜ํ…์ธ ๊ฐ€ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๊ธฐ ์‹œ์ž‘ํ•˜๋Š” ์‹œ๊ฐ„์„ ์ธก์ •

๊ฐœ์„  ๋ฐฉ๋ฒ•
์ด๋ฏธ์ง€ ์ตœ์ ํ™”, Lazy Loading , ์บ์‹ฑ ํ™œ์šฉ, CDN ํ™œ์šฉ

 

์œ„์˜ ๋ฐฐ์šด๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ..!

๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์—ฌ, ์ข‹์€ ์„ฑ๋Šฅ์„ ๊ฐ€์ง„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

 

 

๋ฉ”๋ชจ

Profile - Commit Time, Render Painting ์กฐ์‚ฌํ•˜๊ธฐ

"react-router-dom routerConfig์— lazy loading" ์ ์šฉํ•ด๋ณด๊ธฐ

728x90