λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

μ›ν‹°λ“œ ν”„λ¦¬μ˜¨λ³΄λ”©

[μ›ν‹°λ“œ ν”„λ¦¬μ˜¨λ³΄λ”©] 포트폴리였 μž‘μ„±μ„ μœ„ν•œ λ¦¬μ•‘νŠΈ ν”„λ‘œμ νŠΈ 고도화 - 4회차

728x90

였늘의 AgendaλŠ”

μ„±λŠ₯κ³Ό μ΅œμ ν™”λ₯Ό ν•˜λŠ” ꡬ체적인 방법

이미지 μ΅œμ ν™”,
μ½”λ“œ μŠ€ν”Œλ¦¬νŒ…, 

μ§€λ‚œ κ°•μ˜λ•Œ, μ„±λŠ₯을 μ–΄λ–»κ²Œ μΈ‘μ •ν•˜λŠ”μ§€ λ°°μ› λ‹€λ©΄,

이번 κ°•μ˜μ—λŠ” μ„±λŠ₯을 μ–΄λ–»κ²Œ κ°œμ„ ν•  수 μžˆμ„μ§€λ₯Ό λ°°μ› μŠ΅λ‹ˆλ‹€!

 

 

이미지 μ΅œμ ν™”,

이미지 μš©λŸ‰μ΄ λ„ˆλ¬΄ 크닀면, λ‘œλ”©λ„ 였래 걸리고 λΈŒλΌμš°μ €μ— κ³ΌλΆ€ν•˜κ°€ 걸리기도 ν•©λ‹ˆλ‹€.

κ·Έλž˜μ„œ μŠ€ν† λ¦¬μ§€μ— 화면에 ν•„μš”ν•œ μ‚¬μ΄μ¦ˆλ³„λ‘œ 이미지λ₯Ό μ €μž₯ν•˜κ³ ,

ν•΄λ‹Ή μ˜μ—­μ— 크기의 λ§žλŠ” URLλ₯Ό λ„˜κ²¨μ£ΌλŠ” 것이 μ’‹λ‹€κ³  ν•©λ‹ˆλ‹€.

 

이미지 νŒŒμΌν™•μž₯μžλŠ” [svg, png, webp] κ°€ μžˆμŠ΅λ‹ˆλ‹€.

저희 ν”„λ‘œμ νŠΈμ—μ„  svg νŒŒμΌμ€ λ”°λ‘œ ν”„λ‘ νŠΈμ—”λ“œ ν”„λ‘œμ νŠΈμ— μ½”λ“œλ‘œ μ €μž₯(local)ν•˜μ—¬ μ‚¬μš©ν•˜κ³ ,

λŒ€λ‹€μˆ˜μ˜ 이미지 νŒŒμΌμ€ μ„œλ²„μ—μ„œ 받은 png νŒŒμΌμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

 

그리고 ν•΄λ‹Ή μˆ˜μ—…μ΄ν›„ 이미지 νŒŒμΌλ“€μ„ webp둜 μˆ˜μ •ν–ˆλŠ”λ°μš”!

κ·Έ μ΄μœ λŠ” λ‹€λ₯Έ 이미지 νŒŒμΌλ³΄λ‹€ ν™•μ‹€νžˆ 적응 μš©λŸ‰μœΌλ‘œ 빨리 λ‘œλ“œλ˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€!

 

κ°€μž₯ 큰 μš”μ†ŒμΈ, 상단 λ°°λ„ˆ 이미지λ₯Ό

[ webp둜 λ³€ν™˜, λ Œλ”λ§ μ‚¬μ΄μ¦ˆ X 2 ] 둜 μˆ˜μ •ν–ˆλ”λ‹ˆ,

점수λ₯Ό 4점 ν–₯μƒμ‹œν‚¬ 수 μžˆμ—ˆκ³ , 이미지 파일 크기 λ˜ν•œ ν™•μ‹€νžˆ μ€„μ–΄λ“€μ—ˆμŠ΅λ‹ˆλ‹€!

 

 

μ½”λ“œ μŠ€ν”Œλ¦¬νŒ… (μ½”λ“œ λΆ„ν• )

→ μ²˜μŒμ— 뢈러올 μ½”λ“œκ°€ κ°μ†Œν•΄, μ‚¬μš©μžκ°€ 빈 화면을 λ³΄λŠ” μ‹œκ°„μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

이λ₯Ό κ΅¬ν˜„ν•˜λŠ” 방법은 [ μ§€μ—° λ‘œλ”©, μΊμ‹± ] μΈλ°μš”.

 

- μ§€μ—° λ‘œλ”©(Lazy Loading)

: μ‚¬μš©μžμ— μ˜ν•΄ ν•„μš”ν• λ•Œ, loadν•˜μ—¬ κ·Έ μ•‘μ…˜μ΄ λ°œμƒν•˜κΈ° μ „κΉŒμ§€λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό λ‘œλ“œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

β–· μ΄λŠ” index.js μ‚¬μ΄μ¦ˆκ°€ κ°μ†Œν•˜λ©°, FCP, LCP도 κ°μ†Œν•œλ‹€κ³  ν•˜λŠ”λ°μš”!

import React, { lazy, Suspense } from 'react';
import { Route, Routes } from 'react-router-dom

const Home = lazy(() => import('./pages/Home'));
const LoginPage = lazy(() => import('./pages/auth/LoginPage'));
const RegisterPage = lazy(() => import('./pages/auth/RegisterPage'));
...

const App = () => {
  return (
    <div className="App">
      <Suspense fallback={<div>Loading...</div>}>
        <Routes>
          <Route path="/login" element={<LogInSelect />} />
          <Route path="/login/personal" element={<LoginPage />} />
          <Route path="/register/personal" element={<RegisterPage />} />
          ...
          <Route path="/" element={<Home />} />
        </Routes>
      </Suspense>
    </div>
  );
};

export default App;

React.lazyλ₯Ό μ‚¬μš©ν•΄μ„œ 각 νŽ˜μ΄μ§€λ₯Ό λΆˆλŸ¬μ™€μ£Όμ—ˆμŠ΅λ‹ˆλ‹€!

 

κ·Έ κ²°κ³Ό..!

μ μˆ˜κ°€ 더 떨어짐..γ…Ž

FCP μ„±λŠ₯이 λˆˆμ— λ„κ²Œ κ°œμ„ λ˜μ—ˆμ§€λ§Œ,

SI, TBT, CLS 등이 μ €ν•˜λ˜μ—ˆλ„€μš”..

이 뢀뢄을 κ³ λ €ν•˜μ—¬, μ•žμœΌλ‘œ μ½”λ“œλ₯Ό μˆ˜μ •ν•΄μ•Όκ² μŠ΅λ‹ˆλ‹€.

- 캐싱

: μ»΄ν¬λ„ŒνŠΈλ₯Ό μž‘μ€ λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄, μ „체λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•˜μ§€ μ•Šκ³ λ„ λ³€κ²½μ΄ ν•„μš”ν•œ λΆ€λΆ„λ§Œ μ—…λ°μ΄νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.


회고

자, μ΄λ ‡κ²Œ 4회차 λ™μ•ˆ μ›ν‹°λ“œ ν”„λ¦¬μ˜¨λ³΄λ”© ν”„λ‘ νŠΈμ—”λ“œ μˆ˜μ—…μ„ μˆ˜κ°•ν–ˆμŠ΅λ‹ˆλ‹€! πŸŽ‰
항상 300-400λͺ…μ˜ μˆ˜κ°•μƒλ“€κ³Ό ν•¨κ»˜ μˆ˜μ—…μ„ λ“£λŠ”λ°,
λ§Žμ€ λΆ„λ“€κ³Ό ν•¨κ»˜ μ·¨μ—…μ΄λ‚˜ 개발 이야기λ₯Ό λ‚˜λˆŒ 수 μžˆλŠ” μ†Œμ€‘ν•œ μ‹œκ°„μ΄μ—ˆμ–΄μš”.
κ°•μ‚¬λ‹˜μ΄ μˆ˜κ°•μƒλ“€μ˜ 적극적인 μ°Έμ—¬λ₯Ό μ΄λŒμ–΄λ‚΄μ…”μ„œ λ‹€μ–‘ν•œ μ˜κ²¬μ„ λ“£κ²Œ λ˜μ—ˆκ³ ,
ν™œλ°œν•œ 정보 곡유둜 λ§Žμ€ μƒˆλ‘œμš΄ 지식을 얻을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
특히, μ§ˆμ˜μ‘λ‹΅ μ‹œκ°„μ—λŠ” κ°•μ‚¬λ‹˜μ΄ λ‹€μ–‘ν•œ μ§ˆλ¬Έμ— 친절히 λ‹΅ν•΄μ£Όμ…”μ„œ
개발과 취업에 κ΄€ν•œ λ‹€μ–‘ν•˜κ³  μœ μ΅ν•œ 닡변듀을 듀을 수 μžˆμ—ˆμ–΄μš”πŸ˜Š
728x90