블로그 서비스는 블로그 글 목록 페이지와 상세 페이지로 구성되어 있으며, 사용자 경험과 성능 향상을 위해 다양한 최적화가 필요합니다. 이번 아티클에서는 로딩 성능 및 렌더링 성능 최적화 관점에서 적용 가능한 기술들을 구체적으로 설명합니다.
React 기반 SPA에서는 초기 진입 시 모든 코드가 하나의 JS 번들로 묶여 불필요한 코드까지 로드됩니다.
// 예시: React.lazy() + Suspense 사용
const PostDetail = React.lazy(() => import('./PostDetail'));
<Suspense fallback={<div>Loading...</div>}>
<PostDetail />
</Suspense>
HTML, CSS, JS 등의 텍스트 기반 리소스는 서버에서 미리 압축하여 전송하면 용량 감소 → 빠른 다운로드 및 렌더링 가능
서버 응답 헤더 예시:
Content-Encoding: gzip
브라우저 렌더링을 지연시키는 무거운 연산이나 리렌더링이 자주 발생하는 병목 코드는 서비스 속도 저하의 원인입니다.
React DevTools의 렌더링 확인useMemo, React.memo)Chrome DevTools
webpack-bundle-analyzer

사용자가 화면에서 첫 번째 DOM 요소를 볼 수 있게 되는 시점
페이지에서 시각적 콘텐츠가 얼마나 빠르게 로드되는가
화면에 보이는 가장 큰 이미지 또는 텍스트 요소가 렌더링 완료된 시점
사용자가 페이지와 상호작용할 수 있을 때까지 걸리는 시간
페이지가 이벤트 처리 불가능한 시간의 총합
로딩 중 예기치 않게 레이아웃이 이동한 비율의 총합
CDN(Content Delivery Network)은 콘텐츠를 사용자와 가까운 서버에서 제공하여 로딩 속도를 높이는 기술입니다.



→
width=240,height=240으로 사이즈 축소
→fit=crop으로 비율 유지
→q=80으로 품질 조절
(1) 적용 전
<img
src={
props.image +
getParametersForUnsplash({
width: 1200,
height: 1200,
quality: 80,
format: "jpg",
})
}
alt="thumbnail"
/>
(2) 적용 후
<img
src={
props.image +
getParametersForUnsplash({
width: 240,
height: 240,
quality: 80,
format: "jpg",
})
}
alt="thumbnail"
/>

요소 검사 도구에서 Intrinsic size가 240x240으로 변경된 것을 확인
Lighthouse 성능 점수
"Properly size images" 항목 사라짐| 최적화 기법 | 목적 | 기대 효과 |
|---|---|---|
| 이미지 사이즈 최적화 | 네트워크 로딩 단축 | 트래픽 감소, 로딩 속도 개선 |
| 코드 분할 | 초기 번들 사이즈 감소 | 렌더링 속도 개선 |
| 텍스트 압축 | 전송 용량 감소 | 페이지 로딩 속도 개선 |
| 병목 코드 제거 | 렌더링 효율 향상 | 인터랙티브성 향상 |
블로그 서비스의 성능 최적화는 단순히 빠르게 보이게 하는 것이 아닌, 사용자의 체감 성능과 전체 경험을 향상시키는 핵심 전략입니다.