2025년을 위한 프런트엔드 성능 최적화 핵심 노하우
이미지를 압축하고 최적화하기
웹페이지가 느린 가장 큰 이유는 크기가 큰 이미지입니다. 웹P, AVIF와 같은 최신 포맷을 활용하고, 업로드 전에 TinyPNG나 Squoosh로 이미지 압축하세요. 아래처럼 이미지를 lazy load하면 더욱 효율적입니다.
<img src=hero.webp loading=lazy width=800 height=600 alt=Hero Image />불필요한 CSS 없애기
CSS 프레임워크 사용 시 안 쓰는 코드가 쌓이면 렌더링이 느려져요. PurgeCSS나 Tailwind의 purge 기능, CSS 트리 셰이킹을 활용해 사용하지 않는 스타일을 지워줍니다. 페이지별로 CSS 분리하면 더 효과적입니다.
// tailwind.config.js
purge: [./src//*.html, ./src//*.js],코드 분할과 지연 로딩 적용하기
모든 자바스크립트 파일을 한 번에 로딩하면 비효율적입니다. 페이지나 컴포넌트 단위로 코드를 분할해 필요할 때만 불러오세요. React에서는 아래와 같이 동적으로 컴포넌트를 불러올 수 있습니다.
const Chart = React.lazy(() => import(./ChartComponent));CSS/JS/HTML 소스 최소화하기
코드에 있는 공백이나 주석은 실제 배포 시 아무 효과가 없습니다. Terser, cssnano, HTMLMinifier 등으로 코드 크기를 줄이면 로딩 속도가 빨라집니다.
optimization: {
minimize: true,
minimizer: [new TerserPlugin()],
}정적 자산 CDN으로 제공하기
자산을 서버에서 직접 제공하는 대신 Cloudflare, AWS CloudFront 같은 CDN을 이용하면 훨씬 빠르게 전달됩니다. 추가로 보안과 캐싱 기능도 챙길 수 있죠.
<script src=https://cdn.example.com/app.min.js></script>외부 스크립트 슬림하게 관리하기
분석, 채팅, SNS 등 외부 서비스 스크립트가 늘어나면 사이트가 느려집니다. 정말 필요한 것만, 그리고 async로 불러오세요. 무거운 서비스는 가볍게 대체할 방법이 있는지 점검해보세요.
<script async src=https://www.googletagmanager.com/gtag/js?id=UA-XXXXXXX>;</script>레이아웃 변경에 의한 성능 저하 줄이기
DOM을 자주 바꾸거나, 반복문·스크롤 등에서 스타일을 계속 변경하면 퍼포먼스가 떨어집니다. 타이머나 requestAnimationFrame 같은 최적화 기법을 활용해 효율적으로 처리하세요.
let timeout;
window.addEventListener(resize, () => {
clearTimeout(timeout);
timeout = setTimeout(() => {
element.style.width = window.innerWidth + px;
}, 200);
});캐시 헤더 활용하기
매번 새로 받아오는 것보다, 브라우저가 자원을 캐시해서 재활용하면 훨씬 빠르고 효율적입니다. JS, CSS, 이미지의 캐시 기간을 길게 설정하세요. HTML만 짧게, 버전별 자산에는 오래 저장되게 하세요.
<filesMatch .(js|css|png|jpg|jpeg|gif|webp)$>
Header set Cache-Control max-age=31536000, public
</filesMatch>아이콘과 로고는 SVG로!
간단한 UI 요소를 PNG나 JPEG로 처리하면 용량 낭비예요. SVG는 가벼우면서도 자유롭게 크기를 조절할 수 있습니다. 인라인 SVG로 바로 사용하면 더욱 빠릅니다.
모든 자원에 지연 로딩(Lazy Loading) 적용하기
페이지가 열릴 때 꼭 필요한 것부터 먼저 보여주고, 아래쪽 콘텐츠나 이미지, 컴포넌트는 스크롤이 닿을 때 불러오면 대기 시간을 줄일 수 있습니다.
<img src=feature.webp loading=lazy />제대로 된 반응형 디자인 구현하기
데스크톱 이미지를 모바일에서 쓰면 데이터만 낭비됩니다. srcset, media query, container query로 디바이스에 맞는 자원을 전달하세요.
<img
src=small.jpg
srcset=medium.jpg 768w, large.jpg 1200w
sizes=(max-width: 768px) 100vw, 50vw
/>실사용자 성능 지표로 실제 측정하기
성능 개선은 측정에서 시작됩니다. Lighthouse, Web Vitals, SpeedCurve 같은 툴로 실제 사용자 데이터를 확인하세요. 주요 지표(FCP, LCP, CLS, TTI)를 꾸준히 체크하면 문제를 놓치지 않습니다.
import {getCLS, getFID, getLCP} from web-vitals;
getCLS(console.log);
getFID(console.log);
getLCP(console.log);화면 렌더링을 막는 리소스 최소화하기
CSS, JS가 로딩을 막으면 사용자가 콘텐츠를 늦게 보게 됩니다. 중요한 CSS는 인라인, JS는 defer 또는 async 속성으로 비동기 처리하세요.
<link rel=preload href=main.css as=style onload=this.onload=null;this.rel=stylesheet>
<noscript><link rel=stylesheet href=main.css></noscript>성능 개선, 한 번만 하는 일이 아니다
웹 성능은 계속 관리해야 하는 영역입니다. 여기 소개된 전략 중 절반만 적용해도 사이트가 훨씬 빨라지고 사용자 만족도와 검색엔진 순위까지 크게 올라갑니다. 꾸준히 최적화에 신경 써주세요.
키워드만 입력하면 나만의 학습 노트가 완성돼요.
책이나 강의 없이, AI로 위키 노트를 바로 만들어서 읽으세요.
콘텐츠를 만들 때도 사용해 보세요. AI가 리서치, 정리, 이미지까지 초안을 바로 만들어 드려요.