본문 바로가기
IT

프론트엔드 최적화 기법

by momopo 2023. 5. 29.

프론트엔드 최적화는 웹 애플리케이션의 성능과 사용자 경험을 향상시키기 위해 프론트엔드 코드와 리소스를 최적화하는 과정입니다. 이를 통해 페이지 로딩 속도를 개선하고 사용자가 웹 사이트를 더 빠르고 부드럽게 이용할 수 있게 됩니다. 더 나아가, 검색 엔진 최적화를 위해서도 프론트엔드 최적화는 필수적입니다. 검색 엔진은 웹 페이지의 성능을 고려하여 순위를 결정하는데, 빠른 로딩 속도와 최적화된 웹 페이지는 검색 결과에서 더 높은 순위를 얻을 수 있습니다.

리소스 압축과 최소화 (Resource Minification and Compression)

이 기법은 웹 애플리케이션에서 사용되는 HTML, CSS, JavaScript 파일 등의 리소스 크기를 줄여서 전송 시간을 최소화하고 페이지 로딩 속도를 향상시킵니다. 압축은 리소스 파일의 크기를 줄이는 과정으로, 주로 공백, 주석, 들여쓰기 등을 제거하여 파일 크기를 최소화합니다. 이를 통해 전송되는 데이터 양을 줄여 네트워크 대역폭을 절약하고, 클라이언트 측에서 파일을 더 빠르게 다운로드할 수 있습니다. 일반적으로 압축 기법으로는 Gzip, Brotli와 같은 알고리즘이 사용되며, 웹 서버나 CDN에서 압축 설정을 활성화하여 사용할 수 있습니다. 최소화는 리소스 파일에서 불필요한 데이터를 제거하여 파일 크기를 최소화하는 과정입니다. 예를 들어, CSS 파일에서 사용되지 않는 스타일 규칙이나 JavaScript 파일에서 사용되지 않는 코드를 제거합니다. 이를 통해 파일의 용량을 줄이고 불필요한 코드의 실행을 방지하여 웹 페이지의 로딩 속도를 개선합니다. 주로 자동화 도구나 최적화 플러그인을 사용하여 최소화 작업을 수행할 수 있습니다.

이미지 최적화 (Image Optimization)

이미지는 웹 페이지의 주요 컨텐츠를 구성하는데, 그 크기가 크면 페이지 로딩 속도가 느려지고 대역폭 소모량이 증가하여 사용자 웹 사용 만족도를 저하시킬 수 있습니다. 따라서 이미지 최적화는 이미지의 크기를 줄여서 로딩 속도를 개선하고 대역폭을 절약하는 작업입니다. 이미지 최적화를 위한 여러 기법들이 있습니다. 첫째로, 이미지 파일의 압축을 통해 파일 크기를 줄일 수 있습니다. 압축은 이미지 파일의 해상도나 품질을 유지하면서 파일 크기를 최소화하는 방법입니다. 주로 사용되는 이미지 압축 형식으로는 JPEG, PNG, WebP 등이 있습니다. 둘째로, 이미지 크기를 조정하는 것도 중요한 최적화 기법입니다. 웹 페이지에서 이미지가 표시되는 크기에 비해 실제 이미지의 크기가 크다면, 사용자는 큰 이미지를 다운로드해야 하므로 로딩 시간이 길어집니다. 따라서 이미지를 웹 페이지에 표시되는 크기로 최적화하여 필요 이상의 데이터를 전송하지 않도록 해야 합니다. 셋째로, 이미지 포맷을 올바르게 선택하는 것이 중요합니다. 각 이미지 포맷은 특정한 상황에 적합하며, 파일 크기와 품질의 균형을 고려해야 합니다. 예를 들어, 사진과 같은 복잡한 이미지는 JPEG 포맷이 압축 효율이 높고 품질을 유지할 수 있는 선택입니다. 반면에 아이콘과 같은 단색 또는 투명 배경 이미지는 PNG 포맷이 적합합니다. 마지막으로, 이미지 레이지 로딩(Lazy Loading)을 적용하는 것도 효과적인 이미지 최적화 기법입니다. 레이지 로딩은 페이지 스크롤에 따라 이미지를 동적으로 로딩하는 방식으로, 초기 페이지 로딩 시 모든 이미지를 다운로드하는 것이 아니라 필요한 이미지만 로딩하여 초기 로딩 속도를 개선합니다.

코드 스플리팅 (Code Splitting)

웹 애플리케이션의 자바스크립트 코드를 여러 개의 작은 번들로 분할하는 것을 의미합니다. 일반적으로 웹 애플리케이션은 모든 자바스크립트 코드를 단일 파일로 번들링하여 로딩되지만, 이는 초기 로딩 시간과 실행 성능에 영향을 줄 수 있습니다. 코드 스플리팅은 페이지나 컴포넌트 별로 필요한 자바스크립트 코드를 동적으로 로딩하게 함으로써 초기 로딩 속도를 개선합니다. 이는 사용자가 해당 페이지나 컴포넌트를 요청할 때까지 해당 코드를 로딩하지 않고, 필요한 순간에 동적으로 로딩함으로써 필요한 자원을 최소화하는 것입니다. 코드 스플리팅은 여러 가지 방식으로 구현될 수 있습니다. 일반적인 방법은 동적 import() 함수를 사용하여 필요한 모듈을 로딩하는 것입니다. 이를 통해 페이지나 컴포넌트 간의 의존성을 분리하고 필요한 코드만 로딩하여 초기 번들 크기를 줄일 수 있습니다. 또한, 코드 스플리팅은 라우팅을 기반으로 할 수도 있습니다. 각 라우트에 해당하는 자바스크립트 코드를 별도의 번들로 분할하여 필요한 라우트로 이동할 때 동적으로 로딩할 수 있습니다. 이를 통해 초기 페이지 로딩 시간을 최소화하고 필요한 라우트로의 전환을 빠르게 할 수 있습니다.