안녕하세요. 저는 인포그랩 프론트엔드 엔지니어로, 회사 공식 홈페이지인 ‘인사이트’ 개발 업무를 맡고 있습니다. 저는 인사이트 성능을 최적화하기 위해 평소 다양한 기술을 조사하고 적용하는데요. 최근 이미지 용량 축소, WebP 파일 포맷 사용, Subset 폰트 import, lazy loading 적용으로 인사이트 초기 로딩 속도와 렌더링 속도를 크게 줄였습니다. 이 글에서는 웹 성능 최적화(Web Performance Optimization) 기술 동향을 짚어보고, 이러한 기술을 인사이트에 적용한 과정과 성과를 소개하겠습니다.
웹 성능 최적화란?
웹 성능 최적화는 웹사이트 속도와 응답성을 개선하는 프로세스입니다. 캐나다 전자상거래 솔루션 기업 Shopify에 따르면, 페이지 로드 시간 최소화, 웹 서버 응답 시간 단축, 리소스 제공 개선, 데스크톱과 모바일의 웹사이트 기능 향상 전략이 웹 성능 최적화에 포함됩니다. 이미지 크기를 제한하고, 사이트 코드를 개선하며, 웹 서버가 비즈니스 요구 사항을 충족케 함으로써 웹사이트를 최적화할 수 있습니다. 그 결과, 사용자는 웹사이트를 더 빠르고 효율적으로 사용할 수 있습니다. 이는 검색엔진 최적화(SEO)를 개선하는 데도 도움이 됩니다.
웹 성능 최적화 중요성
웹 성능 최적화는 비즈니스에 다양한 이점을 제공하기에 중요합니다. 스페인 웹 개발, UX/UI 디자인 교육 서비스 Ironhack는 그 이점을 다음과 같이 설명합니다.
- 사용자 경험 향상: 빠르고, 반응 속도가 높은 웹사이트는 긍정적인 사용자 경험을 줍니다. 이는 사용자 만족도와 참여도를 높입니다.
- 이탈률 감소: 웹사이트가 빠르게 로드되고 원활하게 작동하면, 사용자가 웹사이트를 떠날 가능성이 낮아집니다. 이로써 이탈률이 낮아집니다.
- 전환율 개선: 웹사이트가 더 빨라지면, 방문자를 고객으로 더 효과적으로 전환할 수 있습니다. 이로써 매출이 늘어납니다.
- 비용 절감: 최적화된 웹사이트는 더 적은 서버 리소스가 필요합니다. 따라서 호스팅과 유지보수 비용을 줄일 수 있습니다.
- SEO 이점: 구글과 같은 검색 엔진은 웹사이트 속도를 순위 결정 요소로 고려합니다. 웹사이트가 더 빨라지면 검색 결과에서 더 높은 순위를 차지해 가시성이 향상됩니다.
구글 SOASTA Research에 따르면, 페이지 로드 시간이 길어질 때 이탈 확률은 아래와 같이 높아집니다.

– 페이지 로드 시간 1초 → 3초, 이탈 확률 32% 증가
– 페이지 로드 시간 1초 → 5초, 이탈 확률 90% 증가
– 페이지 로드 시간 1초 → 6초, 이탈 확률 106% 증가
– 페이지 로드 시간 1초 → 10초, 이탈 확률 123% 증가
브라우저 렌더링 과정
웹 성능 최적화의 주요 목표는 브라우저가 웹페이지를 빠르고 효율적으로 렌더링하도록 돕는 것입니다. 그러려면 브라우저의 HTML, CSS, JavaScript 처리 방식을 이해하고, 각 단계에 최적화 전략을 적용해야 합니다. 브라우저 렌더링 과정은 다음과 같습니다.
DOM, CSSOM 생성
HTML과 CSS 등 화면을 그리는 데 필요한 리소스를 다운로드합니다. 다운로드한 HTML은 브라우저가 이해할 수 있는 형태로 변환하는 파싱(parsing) 과정을 거칩니다. 이로써 요소 간의 관계를 트리(tree) 구조로 표현한 DOM(Document Object Model)을 만듭니다.
CSS도 HTML과 비슷한 과정을 거쳐 브라우저가 이해할 수 있는 형태로 변환합니다. 변환 결과, ‘CSSOM(CSS Object Model)’이라는 트리 구조가 생성됩니다. CSSOM에는 각 요소가 포함하는 스타일 정보가 있습니다.
렌더 트리
DOM과 CSSOM이 결합해 렌더 트리(Render Tree)가 생성됩니다. 렌더 트리는 화면에 표시되는 각 요소의 레이아웃을 계산하는 데 사용됩니다.
레이아웃
화면 구성 요소(노드)의 위치나 크기를 계산하고, 해당 위치에 요소를 배치합니다. 화면의 레이아웃을 잡습니다.
페인트
화면에 배치된 요소에 색을 채워 넣습니다. 배경색을 채우거나, 글자 색을 결정하거나, 테두리 색을 변경합니다. 이때 브라우저는 효율적인 페인트 과정을 위해 구성 요소를 여러 레이어(layer)로 나눠 작업합니다.
컴포지트
각 레이어를 합성합니다. 페인트 단계에서 설명했듯 브라우저는 화면을 그릴 때, 여러 레이어로 화면을 쪼개 그립니다. 그다음, 마지막에 레이어를 하나로 합성하는데 그 단계가 컴포지트입니다.
브라우저 렌더링 과정은 브라우저에서 직접 확인할 수 있습니다. 개발자 도구의 성능(performance) 패널에서 검사한 뒤, 메인 스레드의 작업을 살펴보면 아래 그림과 같이 파싱 작업이 이뤄진 걸 확인할 수 있습니다.
