처음에 Lighthouse를 돌리면서 모든 페이지의 점수를 확인하다보니, 네트워크 탭에서 현재 여는 페이지와는 상관없는 jsx파일들이 로드되고 있는 걸 발견했다.

딱 보니까 route설정을 잘못해놨었던 것 같길래 찾아보니
import Home from '../pages/Home';
import Login from '../pages/Login';
import Search from '../pages/search/Search';
import PetRegisterPage from '../pages/pet/PetRegisterPage';
...
AppRouter.js가 모든 페이지를 한번에 import하고 있어서 그런거랬다.
그래서 해결방법은
lazy() + Suspense로 코드 스플리팅하면 된다고 한다.
💡 코드 스플리팅(Code Splitting)이란?
코드 스플리팅(Code Splitting)은 웹 애플리케이션의 JavaScript 번들을 여러 개의 작은 파일로 나누어 필요한 시점에만 로드하는 최적화 기법
✅ 목표:
- 초기 로딩 속도 개선 (필요한 코드만 로드)
- 사용자가 필요할 때만 해당 코드 불러오기 (Lazy Loading)
- 브라우저 성능 최적화 (메모리 사용량 감소
✅ 개선 효과:
- 사용자가 페이지에 방문하기 전까지 해당 파일을 로드하지 않음.
- Suspense의 fallback을 활용해 로드 중인 화면을 표시할 수 있음.
📌 코드 스플리팅 적용한 React Router 예제
import { lazy, Suspense } from "react";
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
// ✅ 코드 스플리팅 적용
const Home = lazy(() => import("../pages/Home"));
const Login = lazy(() => import("../pages/Login"));
const Search = lazy(() => import("../pages/search/Search"));
const AppRouter = () => {
return (
<Router>
<Suspense fallback={<div>Loading...</div>}>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/login" element={<Login />} />
<Route path="/search" element={<Search />} />
</Routes>
</Suspense>
</Router>
);
};
export default AppRouter;
코드를 적용 후 배포서버에 올려봤더니 점수가 다 올랐다..!
(로컬에서 돌리는 거랑 배포하는 거랑도 점수 차이가 좀 난다.. 아마 배포하면 vercel에서 압축해서 올려주는 것 때문인듯 싶다)








이제 앞으로 한 페이지씩 점수를 올리기 위해 리팩토링 작업을 진행할텐데, 리팩토링과정을 적으면서 각 페이지 구현에 대한 회고도 한번 해보면 좋을 것 같다 ㅎㅎ
'프로젝트 > 댕댕어디가' 카테고리의 다른 글
| 댕댕어디가 리팩토링 - #5 즐겨찾기 페이지 (0) | 2025.02.07 |
|---|---|
| 댕댕어디가 리팩토링 - #4 땅따먹기 페이지 (0) | 2025.02.07 |
| 댕댕어디가 리팩토링 - #3 장소 상세 페이지 (0) | 2025.02.07 |
| 댕댕어디가 리팩토링 - #2 검색 페이지 (0) | 2025.02.06 |
| 댕댕어디가 리팩토링 - #0 웹 성능 개선하기 (0) | 2025.02.03 |