반응형
웹 애플리케이션의 성능은 사용자 경험(UX)에 직결됩니다. 페이지 로딩 속도나 화면 전환 지연이 길어질 경우, 사용자 이탈률이 급격히 증가할 수 있습니다. 이를 방지하기 위해 필수적으로 알아야 할 기술이 바로 렌더링 최적화와 비동기 패턴 활용입니다.
이 글에서는 브라우저 렌더링 과정을 이해하고, 비동기 패턴을 통해 렌더링을 최적화하는 방법을 초보자도 실무에 바로 적용할 수 있도록 체계적으로 정리합니다.
✅ 브라우저 렌더링 과정 간단 정리
- HTML 파싱 → DOM 트리 생성
- CSS 파싱 → CSSOM 트리 생성
- DOM + CSSOM 결합 → 렌더 트리(Render Tree) 생성
- Layout(배치): 요소의 크기와 위치 계산
- Painting(그리기): 픽셀로 화면 출력
- Composite(합성): 여러 레이어를 최종 조합해 화면 표시
렌더링이 차단되거나 지연되면 화면이 늦게 표시됩니다.
✅ 비동기 패턴으로 렌더링 최적화하는 방법
1. async와 defer를 통한 스크립트 비동기 로딩
📌 차이점
- async: HTML 파싱과 병렬 다운로드, 다운로드 후 즉시 실행 (HTML 파싱 중단 가능성)
- defer: HTML 파싱 완료 후 실행 (순서 보장)
✅ 예시
<!-- async -->
<script src="app.js" async></script>
<!-- defer -->
<script src="app.js" defer></script>
- 라이브러리나 유틸리티 스크립트는 defer를 추천합니다.
2. 이미지 지연 로딩 (lazy loading)
큰 이미지가 많은 페이지는 이미지 로딩을 미루면 렌더링 속도가 빨라집니다.
✅ HTML 속성 사용
<img src="large-image.jpg" loading="lazy" alt="설명" />
- 화면에 가까워질 때만 이미지 다운로드 시작
3. 요청 최소화 및 비동기 데이터 처리
- 초기 렌더링 시 모든 데이터를 한꺼번에 요청하지 않기
- 필요한 데이터만 비동기로 요청하여 렌더링 분할
✅ 예시 (API 호출 후 부분 렌더링)
async function fetchUserData() {
const response = await fetch('/api/user');
const data = await response.json();
document.getElementById("user-name").textContent = data.name;
}
fetchUserData();
4. requestAnimationFrame으로 렌더링 타이밍 최적화
DOM 업데이트를 브라우저의 리페인트 주기(16ms)에 맞춰 예약하면 성능이 향상됩니다.
✅ 예시
function moveBox() {
const box = document.getElementById("box");
box.style.transform = `translateX(${Date.now() % 500}px)`;
}
function animate() {
moveBox();
requestAnimationFrame(animate);
}
animate();
- setTimeout 대신 requestAnimationFrame 사용으로 부드러운 애니메이션 구현
5. 비동기 컴포넌트 로딩 (코드 스플리팅)
SPA(Single Page Application)에서 초기 번들 크기를 줄이기 위해 비동기 컴포넌트 로딩이 중요합니다.
✅ 예시 (React 기준)
import { lazy, Suspense } from "react";
const UserProfile = lazy(() => import("./UserProfile"));
function App() {
return (
<Suspense fallback={<div>Loading...</div>}>
<UserProfile />
</Suspense>
);
}
✅ 고급 최적화 팁
- Critical Rendering Path 최소화: 필수 자원만 먼저 로딩
- CSS를 위에, JS를 아래에 배치
- Web Workers 사용: 복잡한 계산은 메인 스레드 분리
- Intersection Observer API 활용: 스크롤에 따라 동적 컨텐츠 로딩
✅ 결론
비동기 패턴을 적절히 활용하면 브라우저 렌더링을 효과적으로 최적화할 수 있습니다. 단순히 "빠르게 로딩하는 것"을 넘어서, 사용자가 체감하는 반응성 향상에 큰 기여를 하게 됩니다.
렌더링 최적화는 한번에 완성되는 작업이 아닙니다. 점진적으로 개선하고 측정하는 습관이 무엇보다 중요합니다.
반응형
'Programing' 카테고리의 다른 글
개발 중 자주 만나는 CORS 오류와 해결법 정리 (CORS Error in Web Development) (0) | 2025.06.10 |
---|---|
리팩토링의 원칙과 사례 (Refactoring) (0) | 2025.06.02 |
게시판 페이징 처리 (PHP예제) (1) | 2025.05.18 |
웹 성능 측정 지표 (LCP, FID 등)과 JS 최적화 방법 (0) | 2025.04.29 |
Form 입력 유효성 검사 및 실시간 피드백 구현 가이드 (0) | 2025.04.29 |
퍼센트 계산, 백분율 계산 방식 (0) | 2015.06.11 |
PHP, MySQL 및 Google 지도를 사용하여 매장 검색기 만들기 (0) | 2012.06.13 |