newstoday-logo
newstoday-logo
25
August, 2024
NEWS TODAY
엘리멘터

엘리멘터 사이트 속도를 높이는 최적화 방법

태그
엘리멘터최적화
조회
댓글
guest
0 Comments
Inline Feedbacks
View all comments

이야기에 앞서

본래 워드프레스 자체 성능은 매우 우수합니다. 플러그인이 설치되지 않은 순수 워드프레스는 따로 최적화 혹은 캐싱을 하지 않아도 최초 서버응답 대기(TTFB)가 대략 0.1초 이내입니다. 여기에 엘리멘터(Elementor) 페이지 빌더를 활성화하고 기존 게시물을 ‘엘리멘터로 편집’ 가능한 상태로 업데이트 하면 대략 0.2초 안팎의 로딩 지연시간이 추가됩니다.

전자상거래, 결제 등 무거운 모듈과 함께 작동하는 엘리멘터 사이트의 로딩 속도는 캐싱 없이(페이지 캐싱, 브라우저 캐싱 포함) 대략 0.5초 안팎이라는 점에 대해서는 엘리멘터 개발사와 사용자들이 보편적으로 동의하는 평균입니다. 이 속도는 보는 관점에 따라 틀리지만 엘리멘터의 다양한 기능을 생각한다면 준수한 속도입니다.

사이트 상태에 따른 응답 속도 및 테스트 표본 보기

아래는 브라우저 캐싱을 끄고 3개의 사이트에서 30일 이상 테스트를 진행하면서 얻은 대략의 페이지 로딩 시간에 대한 표본입니다. 자신의 웹사이트 규모와 비슷한 테스트 결과값을 참고하면서 현재 내 사이트의 속도와 비교해 보세요.

페이지 상태로딩 시간
엘리멘터 비활성화0.1초 안팎
‘엘리멘터로 편집’ 활성화0.2초 안팎
다양한 엘리멘터 기본 위젯 사용0.3초 안팎
써드파티 엘리멘터 위젯 도입0.4초 안팎
전자상거래 도입0.4초 안팎
엘리멘터 이외의 써드파티 스크립트 대량 사용0.5초 안팎

엘리멘터가 활성화 된 일반적 규모의 사이트는 비캐싱(페이지 캐싱과 브라우저 캐싱 모두 비활성화 된 상태)에서 0.5초(500ms) 전후의 로딩 속도가 나옵니다. 이 가이드에서는 잘못된 설정으로 더 많은 지연시간을 발생시키지 않도록 주의해야 할 점과, 캐싱 플러그인을 사용하지 않은 상태로 0.5초 안팎의 로딩시간을 유지하기 위한 방법에 대해 소개합니다.

그리고 무엇보다, 이 글에서 서술하는 모든 것은 ‘엘리멘터’를 사용한다는 전제를 기반으로 합니다. 엘리멘터를 사용한다면 사이트 최적화를  위해 사람들이 흔히 사용하는 여러 알려진 기술들을 더 조심해서 써야합니다.

방문자 속도 재현은 관리자 로그아웃 후에 혹은 다른 프로필로 로그인

워드프레스의 프론트엔드는 관리자, 로그인 사용자, 비로그인 사용자 각 역할에 따라 소모하는 자원이 틀리다. 관리자는 가장 많은 자원을 사용하며 브라우저 캐시를 막아  일반 방문자보다 페이지 로딩이 느리다. 워드프레스는 수동으로 직접 로그아웃을 하지 않으면 관리자 세션이 종료되지 않은 상태로 쿠키가 만료될 때까지 유지된다. 따라서 브라우저를 완전히 종료하고 새로 시작하든, 새 탭을 열든 관리자는 항상 ‘더 느린 페이지’를 보게된다.

사이트 관리를 위해 관리자 접속을 유지하면서 방문자와 동일한 환경을 재현하려면 워드프레스 관리자 페이지에서 로그아웃, 웹 브라우저에서 다른 프로필(계정)으로 새로운 창 사용, 혹은 완전히 다른 웹 브라우저를 이용해야 한다.

관리자 세션이 느린 이유
  • 관리자 세션은 컨텐츠 편집에 대한 결과를 즉각 반영하도록 브라우저 캐싱을 막아 서버 응답속도와 정적 자원의 로딩이 느리다.
  • 엘리멘터는 관리자 세션에서 막강한 라이브 편집기능을 위해 덩치가 큰 추가 자원을 많이 로드한다.
관리자 로그인 시 로드되는 다양한 스크립트들
관리자 로그인 상태에서는 React-Dom, Underscore 등 각종 무거운 라이브러리들까지 로드된다.
‘최적화를 위한’ 방법이 아닌 ‘최적의 상태를 유지하기 위한’ 방법

글 제목에 ‘최적화’라고 하였지만 사실 앞서 말한바와 같이 워드프레스와 엘리멘터는 이미 충분히 최적화 되어있다. 설치 이후 사이트 오너의 선택에 의해 증가한 리소스와 서버 요청에 따른 추가 지연을 얼마나 막느냐가 중요하다.
프로그램 성능과 관련해 “가장 빠른 코드는 실행하지 않는 코드다.”라는 말이 있듯이 플러그인 남용으로 이미 폭증한 HTTP 요청을 또다시 플러그인으로 처리하려는 것은 바람직하지 않다.
따라서 이 글에서는 무언가 설치하거나 설정하는 것 보다는 ‘하지 말아야 할 것’에 더 비중을 둔다.

사이트 성능을 가장 확실히 보장하는 ‘페이지 캐싱’에 대해

미리 말해두지만, 한 페이지에 너무나 많은 미디어 요소와 스크립트로 서버 요청이 300개 가까이 되는 사이트의 반응속도를 0.1초 안팎으로 유지하는 가장 확실한 방법은 ‘페이지 캐싱’이다. 사이트에서 ‘캐싱’을 사용할거라면(그것이 플러그인이 됐든 CDN이 됐든) 이 글에서 언급할 여러 방법들이 무색하게 속도면에서는 확실한 성능을 보장한다.

엘리멘터 관련하여 SEO와 최적화 분야에 꽤 영향력 있는 Tom Dupuis의 2023년도 블로그에서 소개하는 24단계의 방대한 최적화 방법을 참고할 것도 없이 단순히 캐시 플러그인 하나 설치하면 거의 모든 문제가 확실히 해결된다.
하지만 캐싱은 정보가 변경될 때마다 실시간으로 반영하지 못하므로 별도의 관리가 필요하다. 캐싱의 영향을 받으면 안되는 컨텐츠를 분리하고, 자주 변경되는 컨텐츠는 업데이트마다 Purge를 시켜야한다. 확실한 성능만큼 요구되는 관리 비용이 만만치 않다.
캐싱을 사용하더라도 비캐싱 상태에서도 잘 작동하는 건강한 사이트를 만들어 두는것이 바람직하지 않을까.

온라인 성능 테스트 도구의 올바른 사용

최적화를 진행할 떄는 PageSpeed InsightsGTMatrix 같은 온라인 성능 테스트 도구의 점수를 최적화 결과의 최종적 지표로 삼지 않아야 한다. 이 도구들은 본래의 용도를 벗어나 마케팅 수단으로 변질되어 사용됨에 따라 유효성 문제가 확인되었다.

로딩이 0.1초도 안걸리는 웹 사이트에 부가 된 점수. (https://beautifulcss.com).
  • 온라인 테스트 도구는 실제 사용자 환경(Real-World)이 아닌 저수준(3G) 네트워크의 자동화된 실험용 환경에서 작동한다.
  • 결과에 일관성이 없다. 같은 사이트를 열 번 분석하면 50점 이하부터 90점까지 그 차이가 매우 크다.
  • 비교적 용량이 큰 써드파티 스크립트나 미디어 요소(이미지, 비디오)에 매우 적대적이다. 이 도구는 네트워크 환경이 매우 나쁜 환경까지 포함하는 불특정 다수를 위한 최종 디버깅 도구이므로 일반적인 환경에서는 매우 빠르게 처리되는 스크립트나 대용량 미디어 요소를 저수준으로 파싱하여 결과에 반영한다.

온라인 테스트 도구는 ‘잠재적인 위험 요소’를 확인하는 선에서 만족하면 된다. 도구에서 문제점으로 지적하는 많은 요소들은 실제 환경에서는 문제가 되지 않고 있는 ‘잠재적’인 요소일 뿐이므로, 무언가 문제가 발생했을 때만 이런 요소들에 대해 살펴보면 된다. 굳이 사이트에 대한 점수가 궁금하다면 차라리 구글 크롬 웹 브라우저의 내장 Lighthouse 기능을 사용하는 것이 그나마 조금 더 현실적인 결과를 보여준다.

구글 크롬의 개발자 도구에서 내장 Lighthouse를 사용할 수 있다

온라인 성능 테스트 도구가 왜 사실적인 결과를 반영하지 못하는지 Why Google PageSpeed Insights don’t reflect reality 글에서 잘 설명하고 있다.

페이지 캐싱 이외의 방법으로 엘리멘터를 관리하기

페이지 캐싱은 상업적이고 회원제 시스템을 가지는 대형 사이트로 갈수록 위험부담이 커진다.
페이지 캐싱 사용을 지양해야 한다는 것이 아니라, 이를 문제없이 사용하려면 확실한 관련 기술 노하우를 가지고 있어야 하기에 특별한 주의를 요한다. 개인 사이트야 문제가 생기면 주먹구구식으로 대응할 수 있지만 외주 제작을 할 경우에 캐싱으로 인한 클라이언트 클레임이 들어오면 대체로 높은 수준의 처리능력을 요하게 된다.
먼저 캐싱을 사용하지 않으면서 엘리멘터의 내/외부적인 요소로 나누어 성능과 속도를 보존하는 방법을 이야기해보자.

써드파티 플러그인 관리 – 엘리멘터 외적 요소

최적화 관련 정보를 무작정 따라하지 않기

앞서 소개한 Tom Dupuis의 24단계에 걸친 최적화 방법처럼 양질의 정보도 실제 엘리멘터 사이트를 운영해 보면 결과의 간극이 매우 크다. 쉽게말해, 내 사이트만의 특수성으로 그 결과가 크게 와닿지 않거나 오히려 부작용이 나타나는 경우도 있다.
설정이 많으면 노동 비용도 올라가고 일일이 다 기억할 수 없어 다른 사이트에서 재사용하기도 힘들어 지는 것은 덤이다.

그리고 해당 글에서 사용을 언급하는 것들 중에 무료 버전이 없어 구매 이전에는 사용자 스스로 테스트가 불가능한 유료 플러그인과 호스팅 서비스들도 있다. 그래도 일단 이 글을 읽기 전에 해당 블로거의 글을 브라우저 자동번역을 통해서라도 한번 쯤 읽어 보기를 바란다. 그러면 엘리멘터를 운영하는 사이트의 특수성을 어떻게 고려해야 할 지 더 뚜렷한 기준을 세울 수 있다.

써드파티 올-인-원 플러그인은 최대한 적게

엘리멘터 써드파티 플러그인은 수많은 위젯으로 사용자를 유혹한다. 위젯의 소스는 오픈되어 있기에 Unlimited Elements, Essential Addons, Element Pack Pro, Ultimate Addons 등 이들 올-인-원 플러그인은 모두 수 백개의 비슷한 위젯을 제공한다. 많은 위젯과 기능에 혹해 여러 플러그인을 설치하면 거의 확실히 사이트가 느려지게 되는데, 가장 대표적인 케이스는

  • 최악의 경우, 위젯을 페이지에 삽입하지도 않았는데 플러그인을 활성화 하는 것 만으로도 사이트가 느려진다. 실제로 필자가 Dynamic.ooo 플러그인을 활성화 한 것만으로 사이트 지연시간이 5초 이상 발생한 경우도 있다. 양산형 플러그인의 기술적인 문제다.
  • 엘리멘터를 업데이트 한 후 높은 확률로 사이트가 느려진다. Crocoblock의 JetPlugins처럼 공신력 있는 플러그인도 엘리멘터 업데이트 후 해당 플러그인도 함께 업데이트 시켜주지 않으면 사이트가 느려진다. 엘리멘터에서는 이미 사라지거나 변경된 API를 구버전 플러그인에서 요청하는 경우가 많다.

엘리멘터와 써드파티 플러그인을 업데이트 할 때는 반드시 엘리멘터, 그리고 엘리멘터에 의존성이 있는 모든 써드파티 플러그인을 함께 업데이트하거나 아니면 그냥 모두 업데이트 하지 않는 편이 좋다. 둘 중 하나만 업데이트하면 상당히 높은 확률로 사이트 로딩이 느려진다. 그리고 가능하다면 비용이 들더라도 Elementor Pro 버전을 구매하고, 올-인-원 플러그인은 상황에 따라 유/무료 막론하고 1개 이상은 사용하지 않는 것을 권한다. 웹 사이트를 제작하다 보면 실제로 우리가 서비스에 사용하는 위젯은 몇 개 되지 않는다.

별도의 최적화 관련 플러그인 설치를 보류하거나 기능 끄기

누차 반복하지만 엘리멘터는 대체로 성능이 좋다. 여기서 조금 더 지연시간을 줄이고자 하는 노력은 다른 플러그인보다 엘리멘터 개발자들이 가장 많이 하는 부분이고 계속해서 퍼포먼스 관련 기능들이 스테이징되고 있다. 별도의 최적화 플러그인이 제공하는 기능 중에는 엘리멘터의 성능을 개선시키기 보다는 오히려 부작용을 일으키는 경우가 많다.

최적화 플러그인의 부정적인 영향에 대한 예시

예를들어 엘리멘터에는 이미지에 대한 Layz Loading 기능이 있다. 그리고 다른 써드파티 최적화 플러그인에도 대체로 이 기능들이 제공된다. 만일 이 기능들이 모두 활성화 되어 있다면 각 플러그인이 자체적인 실행 시간을 갖게된다.

플러그인의 실행 시간(Excution Time)은 실제로 사이트의 지연시간에 큰 영향을 주는 요인 중 하나다. 그리고 이런 중복될 수 있는 기능을 플러그인마다 너도나도 집어 넣어 중복 가능성이 높아졌다.
기본적으로 엘리멘터에서 제공하는 기능과 중복된 것을 플러그인마다 일일이 찾아 끄는 것 보다는 애초부터 설치를 보류하거나 모두 비활성화 시킨 후 꼭 필요한 경우만 활성화 화는 편이 좋겠다.

최적화 플러그인의 기능 중 유효한 것만 활용하기

앞서 이야기한 최적화 플러그인의 설치를 보류하거나 기능을 꺼야하는 이유에 대한 후속 설명이다. 대표적인 워드프레스 최적화 플러그인으로 Perfmatters가 있다. 워드프레스 사이트를 최적화 할 때 각종 캐싱 플러그인과 혼용해서 사용을 권하는 대표적인 플러그인인데, 워드프레스 코어에서 호출하는 잡다한 기능들을 비활성화 시킬 수 있는 것으로 유명세를 탔다.

워드프레스가 호출하는 다양(?)하면서도 쓸모없는 기능들을 간단히 비활성화할 수 있다.

필자는 이 플러그인을 유료로 구매하여 1년간 사용했고, 현재는 Perfmatters를 포함해서 어떠한 최적화 플러그인도 사용하지 않고 있다. 이유는 간단한데, 워드프레스와 엘리멘터는 충분히 최적화가 잘 되어있다는 대전제 때문이다. 어떠한 이유에서든지 사이트가 느려졌다면 그 원인을 찾는데는 플러그인이 도움이 될 순 있지만 해결해 주지는 못한다.
대부분의 경우 최적화 플러그인 설치는 불필요한 스크립트 실행 시간만 추가할 뿐이다.

사용하지 않는 기능에 대한 비활성화 토글 기능의 실체

최적화 플러그인에서 제공하는 다양한 비활성화 토글을 모두 사용해도 실제 줄어드는 요청은 2-3개 뿐이고 사이트의 TTFB를 비롯한 어떠한 성능적인 혜택도 없다. 애초부터 이 요청들은 사이트 퍼포먼스에 부하를 주는 요소들이 아니다. 플러그인 제작사는 이러한 요소들이 온라인 테스트 도구의 퍼포먼스 점수를 향상시킨다고 말하지만 실제로 체감되는 향상이 아니라 단순히 테스트 로직을 통과하기 위한 Tricky한 마케팅 수단인 경우가 많다.

자바스크립트 관련 최적화 기술과 엘리멘터

최적화 플러그인이나 캐싱 플러그인에는 자바스크립트와 관련 된 기능이 항상 포함되어 있는데, 보통 이런 기술들은 높은 퍼포먼스 스코어 획득과 관련이 있으며 엘리멘터가 작동하는 사이트에서는 득보다 실이 많다. 실제로 Perfmatters 매뉴얼에는 엘리멘터나 Divi와 같은 블록 에디터에서의 사용에 주의해야 할 부분을 여러군데에서 강조하고 있으며 예외 옵션도 두고 있다.

Perfmatters 매뉴얼에는 블록 에디터에서의 사용에 유의해야 할 부분을 자주 언급하고 예외 옵션을 두고있다.
Defer

외부 리소스로 등록 된 자바스크립트를 일괄적으로 body 태그의 가장 아래로 이동시켜 실행을 지연시키는 기술이다. 하지만 모든 스크립트가 항상 문서가 모두 로드 된 후에 실행되어야 하는 것은 아니다. 예를들어, 사이트에 다크모드를 추가한다면, Flicker 현상(화면이 깜빡이면서 렌더링 블록에 걸리는 현상)을 방지하기 위해 문서가 처음 로드되자 마자 실행되어 빠르게 Local Storage로부터 값을 받아와야 한다.

엘리멘터를 사용하는 사이트는 더욱 그러하다. 엘리멘터는 수많은 의존성 스크립트를 내장하고 있고, 관련 플러그인도 마찬가지다. 스크립트의 실행순서를 사용자가 임의로 변경하는 것은 개발된 의도와 다르게 작동할 수 있다. 실제로 엘리멘터가 작동중인 사이트에서 Defer 기능을 사용하면 웹 브라우저의 콘솔창에 다양한 에러가 발생하는 것을 볼 수 있다.
스크립트 에러는 검색 엔진의 노출 우선순위를 할당하는 지표(SERP)에도 크게 불리하다.

Delay

외부 리소스로 등록 된 자바스크립트가 사용자의 인터렉션(마우스를 움직인다거나 스크롤바를 조작하는 일련의 이벤트 행위)을 감지한 이후 실행되도록 하는 기능이다. Defer와 마찬가지로 스크립트의 실행 순서를 임의로 변경하므로 다양한 에러가 발생할 수 있다.
단순히 테스트 도구에서 높은 스코어를 획득하기 위해 Defer와 Delay를 사용하면 반드시 더 큰 부작용이 나타난다.

Javascript Minify & Combining

자바스크립트 압축은 외부 리로스로 등록 된 자바스크립트의 사본을 보존하고 별도의 min.js 형태의 압축본을 대신 로드한다. 보통 엘리멘터 내장 스크립트나 관련 플러그인, 그리고 무거운 라이브러리는 모두 압축된 형태로 제공되므로 실제 이 기능을 통해 압축되는 것은 사용자가 별도로 작성한 스크립트로 제한된다.
엘리멘터의 HTML 위젯에 작성한 스크립트는 문서에 인라인으로 포함되므로 압축 대상이 되지 않는다.

개인이 추가로 작성하는 스크립트는 양도 많지 않고 압축을 하게 되면 스크립트를 쉽게 수정하기 어려워지므로 사실상 이점이 없다. 실제로 이 기능을 활성화 해보면 사이트 성능에 어떠한 변화도 없음을 실감할 수 있다.

스크립트 병합(Script Combining)의 경우는 외부 리소스로 등록 된 자바스크립트 파일을 하나의 파일로 병합시켜 서버 요청을 줄이는 기능인데, 스크립트의 실행 순서가 보장되지 않고, 줄어든 요청으로 인한 성능 향상도 없다시피하여 최근 최적화 플러그인에서도 점차 사라지고 있는 대표적인 기능이다. 이런 기능들은 오히려 플러그인의 불필요한 실행 시간만 발생시킬 수 있다.

CSS 관련 최적화 기술과 엘리멘터

CSS 관련 최적화 기술은 보통 FCP(First Contentful Paint)에 영향을 주는 것으로 알려져 있다. 쉽게말해 최초 서버 요청에 대한 응답 대기시간(TTFB) 이후, 최초로 화면에 시각적인 요소를 렌더링하기 까지의 시간이다. 워드프레스 + 엘리멘터는 컨텐츠를 렌더링하는 속도가 매우 훌륭하기에 보통 CSS 관련 최적화 기술들은 고려 할 가치가 떨어진다.

Unused CSS

등록된 외부 CSS 리소스의 사본을 저장하고 현재 페이지에서 사용중인 스타일만 따로 병합해 데이터베이스에 저장하고 로드하는 기능이다. 이로써 서버 요청을 줄이고 퍼포먼스를 향상시킨다는 것인데, 결론만 말하자면 앞서 소개한 자바스크립트 관련 기능과 마찬가지로 일반적인 사이트에서 실제 방문자는 어떠한 퍼포먼스 향상도 체감할 수 없다.

보통 엘리멘터, 그리고 정상적인 써드파티 플러그인 제작자라면 자사 모듈이 해당 페이지에 활성화 중인 경우에만 JS/CSS가 동적으로 로드되도록 설계한다. Unused CSS는 이런 기본적인 설계를 따르지 않고 전역적으로 등록한 리소스에 대한 대책인데, 근본적으로 그런 플러그인들의 사용을 자제하거나 어쩔수 없이 써야하는 경우에는 그냥 그대로 방치해도 문제없다, 정 꺼림직하다면 Asset CleanUp 같은 스크립트 매니징 플러그인을 통해 수동으로 처리하는 편이 낫다.

엘리멘터는 페이지에 사용된 위젯과 사용자가 추가한 Custom CSS에 의해 평균 3-5개의 CSS 파일이 생성되고 이 스타일은 무조건 ‘사용중인’ 스타일이므로 Unused CSS에 의해 캐싱 되어서는 안된다. 엘리멘터의 위젯 스타일을 조정하였는데도 결과 화면에 반영되지 않는다면 최적화 플러그인의 Unused CSS 기능을 비활성화 하면 해결된다.
참고로 엘리멘터는 현재 Unused CSS 기술을 활성/비활성 토글 없이 자사 솔루션에 자연스럽게 녹아 든 형태로 꾸준히 개선을 진행중이다. 엘리멘터 사용자는 외부 플러그인의 Unused CSS 기능을 사용할 필요가 없다.

Unused CSS 테스트 결과

필자는 이 기능을 테스트하기 위해 Jetcraft 웹 사이트에서 일체의 캐싱 없이 아래와 같은 표본을 사용하였다.

  • Hello Elementor 테마를 사용하면 로드되는 대표적인 전역 CSS(style.min.js, thheme.min.js 따위) 모두 활성화
  • 실제 페이지에서 사용되고 있지도 않으면서 로드되어 있는 기타 써드파티 플러그인들의 전역 CSS를 그대로 유지
  • 비캐싱 상태에서 평균 서버 응답시간은 최소 970ms 부터 최대 1.3초
  • HTTP/1.1 프로토콜 서버 / 약 120개의 서버 요청 수

그리고 테스트 결과는,

  1. Unused CSS 사용 : 서버 요청 수는 로딩 방식(Inline, Files)에 따라 0 -2개 축소, 서버 응답시간은 변화 없음, FCP 역시 변화 없음.
  2. Perfmatters의 Script Manager를 통해 불필요한 JS/CSS 파일 수동 삭제 : 서버 요청 수 23개 감소, 서버 응답시간은 변화 없음, FCP 역시 변화 없음.

Unused CSS를 사용한 것과 Script Manager를 통한 표적 삭제 모두 어떠한 퍼포먼스 향상도 없었다. 오히려 Unused CSS는 브라우저의 새 탭을 열고 웹 사이트에 처음 접속하는 시점에서 0.5초의 추가 지연시간(플러그인 실행 시간)이 발생했다.

HTTP/1.1 프로토콜을 사용하는 서버라 하더라도 웹 브라우저는 HTTP/2 처럼 요청을 한꺼번에 병렬 처리하는 별도의 멀티플렉싱 기능(동시 연결, 도메인 샤딩 따위)을 갖추고 있으므로 수 백개의 외부 리소스를 로드하는데는 큰 부하가 걸리지 않는다. 오히려 Unused CSS 기능을 사용하면,

  • HTML 문서에 스타일이 Inline으로 삽입되는 경우 문서 크기가 커지고 검색 크롤러(특히 Microsoft Edge)의 문서용량 소프트캡에 걸려 검색 노출 우선순위에 불리해질 수 있다.
  • 스타일 위치 변경으로 상속에 문제가 생겨 의도치 않은 결과를 보여줄 수 있다.
  • 파일 형태로 삽입되면 때때로 브라우저 캐싱에 물려 내용을 수정해도 반영되지 않아 일일이 Clear Used CSS 버튼을 눌러 Purge 시켜야 하는 경우도 있다.
CSS Minify

외부 리소스로 등록 된 CSS 파일의 사본을 저장하고 min.css로 압축 된 파일을 로드한다. 이 기능 역시 TTFB, FCP와 관련된 퍼포먼스에는 아무런 이점이 없었다. 엘리멘터는 페이지에서 위젯 콘트롤러를 통한 설정은 모두 자동으로 압축하고, 해당 위젯의 Custom CSS 필드에 사용된 스타일은 압축하지 않은 상태로 처리하여 외부 리소스로 등록한다. 따라서 페이지에 사용된 스타일의 반 이상은 이미 압축이 되어 별도의 경량화 처리가 필요없는 상태다.

보라색 영역의 스타일은 압축되어지고 노란 색 영역의 스타일은 압축하지 않는다
엘리멘터에서 CSS 경량화를 하면 발생하는 문제

엘리멘터의 HTML Widget을 사용해 작성한 코드나 스타일은 문서에 Inline 형태로 직접 삽입된다. 결론적으로, 엘리멘터는 사용자가 직접 작성한 코드는 압축하지 않는다. 경량화의 결과는 압축 알고리즘에 따라 다르게 나타나는데, 레딧이나 사용자 커뮤니티에서 CSS 경량화를 거친 후 시각적인 훼손이 나타났다는 글을 쉽게 찾아볼 수 있다. 압축 과정에서 사라지는 공백과 재정렬이 스타일의 구문과 상속에 영향을 준 것이다.

실제로 필자가 클래스는 사용하지 않고 오로지 형제/자식/자손 관계만으로 구성한 민감한 CSS 파일을 다섯 개의 온라인 경량화 서비스에 적용했을 때 단 한 군데(Toptal CSS Minifier)를 제외하고는 모두 시각적 훼손이 나타났다.
각종 최적화 플러그인이 내장하고 있는 CSS 경량화 알고리즘도 모두 다르다. 어떤 플러그인은 문제없이 표현하지만 어떤 경우는 스타일이 망가진다.
필자의 경우, WP-Optimze에서는 스타일이 훼손됐고 Perfmatters는 문제가 없었다.

주기적으로 플러그인의 실행 시간을 확인하기

엘리멘터는 내/외부적으로 애플리케이션 의존성이 매우 높으므로 업데이트마다 모든 의존성 플러그인에 문제가 생기진 않았을까 긴장하게 된다. 각종 플러그인의 실행 시간에 문제가 생기면 이는 곧 사이트 지연으로 이어진다. 그래서 주기적으로, 특히 새로운 플러그인을 설치했을 때와 엘리멘터 업데이트 후에는 Code Profiler 같은 퍼포먼스 테스터를 사용해 테마와 플러그인에 대한 테스트를 진행해 주는 것이 좋다.

Code Profiler를 사용한 실제 문제해결 시나리오 보기
의존성 플러그인이 Elementor Pro 보다 높은 실행시간을 보이는 상태

일반적으로는 엘리멘터와 엘리멘터 프로가 가장 높은 실행 시간을 보인다. 이보다 높은 실행 시간을 갖는 플러그인은 문제가 있다. 위 표본에서는 JetElementsJetEngine이 엘리멘터 프로보다 높은 실행 시간을 가지므로 문제가 생긴 플러그인이다. 이런 경우 엘리멘터 자체의 실행 시간과 함께 다른 의존성 플러그인의 실행 시간마저 덩달아 증가한다. 엘리멘터의 평균 실행시간이 0.2 – 0.4초인 것을 감안하면 표본의 3.6초는 얼마나 심각한 상태인지 보여준다.
실제로 이 당시 Newstoday 웹 사이트의 로딩시간은 4초를 훌쩍 넘었다.

권한 문제와 페이지 없음 에러를 가진 두 개의 의존성 플러그인

표본에서 JetElements는 사용하지 않는 API 요청에 의한 Not Found 에러, JetSearch는 검색어 자동제안에 대한 권한 없음 에러가 발생해 플러그인 실행 시간이 지연됐다. JetSearch의 경우, 해당 플러그인 자체 실행 시간은 미미하지만 엘리멘터에 의존적이므로 엘리멘터 자체 실행시간을 대폭 증가시켰다.
특히 JetElements에서 발생한 지연은 다른 플러그인의 실행시간마저 지연시키는 치명적인 블로킹 에러였다.

이 에러들은 모두 엘리멘터 업데이트 이후 발생했으므로 JetElements, JetSearch, JetEngine도 함께 업데이트하여 해결하였다. 그 결과 웹 사이트의 로딩 속도 역시 비캐싱 상태에서 1초 이내로 돌아왔다.

정상적인 실행시간을 갖는 표본

엘리멘터 관리 – 엘리멘터 내적 요소

엘리멘터의 퍼포먼스 관련 기능 살펴보기

엘리멘터는 몇 가지 퍼포먼스 관련 기능을 제공하는데, 이 기능들이 기존의 사이트 퍼포먼스를 유의미하게 향상시키지는 않지만 앞으로도 덩치가 점점 커져가는 엘리멘터의 최소한의 성능을 보장할 도구이므로 짚고 넘어간다.
엘리멘터는 퍼포먼스와 관련한 기능에 대한 사용유무를 사용자의 선택에 맡기고 있는데,

  1. 아직 테스트 중인 베타 스테이징인 경우
  2. 결과가 이용자의 선택에 따라 상대적으로 크게 달라질 수 있거나 사이드 이펙트가 발생할 여지가 있는 경우
엘리멘터의 Performance와 Features 탭의 주요 퍼포먼스 관련 기능
엘리멘터에서 제공하는 기능을 기본으로 사용하기

엘리멘터와 다른 퍼포먼스 관련 플러그인을 함께 사용한다면 항상 엘리멘터 내장 기능을 기본으로 사용한다. 예를들어 배경 이미지 지연 로딩 기능을 사용하고 싶다면 엘리멘터에서만 활성화하고 다른 플러그인에서는 모두 비활성화 한다.
엘리멘터가 제공하는 기능은 당연히 엘리멘터에서 가장 잘 작동하므로 굳이 다른 플러그인의 기능을 사용할 이유가 없다.

Optimized Control Loading

비쥬얼 편집기답게 콘트롤 패널에서 모든 사용자의 결정을 처리하고 프론트엔드에 반영하므로 엘리멘터에서 작업 부하가 가장 많이 걸리는 곳이 Contorl이다. 사용하는 콘트롤만 선별해서 로딩하는 옵션인데, 테스트 상으로는 프론트엔드와 백엔드 편집화면에서 서버 응답 속도에 대한 유의미한 향상은 없었다. 최초 응답속도 보다는 워드프레스 코어에 내장된 객체 캐싱처럼 엘리멘터에서 사용되는 각종 위젯의 로직 전반에 걸친 렌더링 성능을 개선하는 것으로 보인다.
아직 베타 스테이징이고 앞으로 성능이 개선 될 여지가 충분하므로 활성화 하는 편이 좋다.

Element Caching

엘리멘터 버전 3.22에 추가 된 캐싱 기능이다. 페이지에 사용된 위젯의 HTML 출력을 서버측에 사본을 두어 로딩 속도를 개선하는 방식인데, 페이지 전체 캐싱이 아니라 요소별 캐싱이다.
회원 이름, 업데이트 날짜 등, Dynamic Tag(동적 태그)를 이용해 컨텐츠를 동적으로 받아오는 경우에는 캐시에서 제외되며, 위젯의 콘트롤러에서 선택적으로 토글할 수도 있다.

엘리멘터에서 캐싱 플러그인을 사용하지 않고도 페이지 로딩 속도를 유의미하게 향상시킬 수 있는 중요한 업데이트로 보인다. 현재는 베타 스테이징이고 실제로 적용하면 약 0.5초(500ms)에 해당하는 속도 향상을 확인했다(관리자 로그인이 되어있지 않은 브라우저에서 개발자 도구의 Network 탭에 위치한 Disable Cache를 해제한 후 테스트).
전체 페이지 캐싱에는 훨씬 못미치지만 대부분의 경우에 캐시를 지우기 위한 별도의 Purge 행위가 필요없고, 캐시 솔루션을 사용하지 않는 사용자에게 기본으로 제공하기에는 충분히 좋다.

테스트 결과 엘리멘트 캐싱을 활성화해도 동적 태그에 의한 큰 문제는 보이지 않았다. Features 탭에서 Activate로 설정한 후, 혹시라도 문제가 발생하는 위젯이 있다면 해당 위젯의 Advanced 탭에서 별도로 Inactive로 비활성하면 된다.
Speed up page loading with Element Caching 기사를 통해 자세한 정보를 확인할 수 있다.

Optimized Image Loading

로딩 후 바로 보여져야 하는 이미지에 대해서는 fetchpriority="high" 어트리뷰트를 추가하고 그 외 뷰포트에 보이지 않는 요소에 대해서는 loading="lazy"decoding="async"를 추가한다. 이 기능은 스크롤이 매우 긴 문서에 여러 이미지가 있는 경우에는 요청을 줄일 수 있다. 하지만 생각보다 뷰포트 임계값이 높아 뷰포트에 보이지 않는 이미지 모두가 이 혜택을 받진 않는다.

예를들어, 2560x1440의 웹 브라우저의 뷰포트 높이는 1440px이지만 웹 브라우저는 2500px 거리에 해당하는 이미지는 모두 최초 로딩에 포함시켰다. 따라서 뷰포트 바로 아래 바둑판식 격자에 40개의 이미지 겔러리가 있다면 이 이미지들은 lazy loading의 효과를 받지 못한다는 의미다.
브라우저마다 임계값이 다를 수 있지만 보통 스크롤이 매우 길고 이미지가 많은 블로그 게시물 같은 형태에서 더 효율이 좋다.

Lazy Load Background Images

페이지의 첫 요소를 제외한 나머지 배경 이미지에 대해 지연 로딩하는 기능인데, 필자는 이 기능이 작동하도록 엘리멘터에서 여러 상황을 구현해 봤지만 지연 로딩에 모두 실패했다.

  • 컨테이너 위젯의 콘트롤러를 통해 삽입 : 실패
  • 컨테이너 위젯의 Custom CSS를 통해 삽입 : 실패
  • HTML Widget에서 DOM 요소를 만들고 CSS를 작성 : 실패
  • 엘리멘터의 CSS 첨부 형식을 문서 내부 작성으로 변경 : 실패

이는 다른 최적화 플러그인에서도 마찬가지인데, CSS에 포함된 이미지를 지연 로딩하는 방법 자체가 DOM을 다루는 다소 트릭성 스크립트를 사용한다. 엘리멘터 버전 3.9 이전에는 뷰포트에 보이지 않는 배경 이미지의 가장 작은 썸네일 이미지를 원본 대신 로드한 후, 스크롤을 통해 뷰포트에 노출되면 원본 이미지를 다시 로드하는 형태였다고 한다.
이후, 엘리멘터 버전 3.9 베타 3부터는 뷰포트에 보이지 않는 배경 이미지는 아예 로드를 하지 않고 뷰포트에 노출될 경우에만 로드한다고 공식 개발자 문서에서 언급하고있지만 실제로는 그렇지 않았다.

UPDATE 28/11/2022: In elementor-3.9-beta-3 we were able to further enhance background-image lazy loading! Instead of loading thumbnail size images on page load, Elementor uses the image dominant colors as background colors. This little change removes entirely background images from the initial page load.

이 기능을 활성화 한 후 브라우저의 개발자 도구에서 확실한 지연 로딩이 확인된다면 활성화하고 그렇지 않다면 끄는 것을 권한다.

쿼리(Query)를 사용하는 위젯을 주시한다

워드프레스에서 글 목록을 가져오는 것은 자연스러운 일이다. 블로그 글을 가져오거나 우커머스의 상점 아이템을 가져오는 일련의 행위는 서버에 쿼리를 보내 필터링 된 결과를 화면에 출력한다. 이 쿼리는 엘리멘터의 특정 위젯에서도 보낼 수 있는데, 대표적으로 엘리멘터 프로의 기본 기능 중 하나인 Loop Grid 위젯이다.
그리고 쿼리를 사용하는 위젯은 엘리멘터를 사용하는 사이트의 페이지 로딩을 지연시키는 가장 큰 요소다.

앞서 소개했던 많은 최적화 기능들을 모두 활성화해도 일반적인 사이트에서 사용자가 체감할 수 있는 성능 향상은 없다시피하지만, 쿼리를 사용하는 위젯은 바로 체감이 된다. 또한 써드파티 플러그인의 루프 위젯을 사용하면 지연 시간이 0.1초에서 0.5초까지도 상승한다. 한마디로 JS나 CSS, 이미지등의 정적인 요소의 최적화 보다는 쿼리와 같이 동적으로 컨텐츠를 요청하는 경우를 잘 관리해야 한다.

사용 테마 및 위젯로딩 시간
Hello Elementor 테마만 사용311 ms
Hello Elementor 테마 + Loop Grid 위젯466 ms
Astra Default 테마만 사용465 ms
Astra Default 테마 + Loop Grid 위젯548 ms
Hello Elementor 테마 + JetEngine Listing Grid 위젯980 ms

테마의 php 파일에서 query_posts 메서드를 사용하는 것이 가장 속도가 빠르지만 엘리멘터를 사용하는 이상 위젯 사용이 강제되는 만큼 쿼리를 사용하는 위젯을 잘 선택해야 한다. 엘리멘터의 Loop Grid 위젯을 1순위로 두는 것이 좋다. JetEngine의 Listing Grid는 초기 응답이 가장 느리지만 별도의 Lazy Loading 기능을 제공하므로 이 기능을 사용한다면 응답시간이 0이 된다. 다만, 눈으로 확인이 가능한 실제 컨텐츠는 약 2초의 로딩 후 화면에 출력된다.

가능하다면 Hello Elementor 테마를 사용한다

엘리멘터는 그 자체로 하나의 거대한 테마라고 할 수 있다. 엘리멘터에서 제공하는 Theme Builder는 헤더, 푸터, 검색 결과처럼 워드프레스의 모든 파트를 템플릿화하므로 별도의 유/무료 테마가 필요하지 않다. 기성 테마처럼 완전히 디자인 된 페이지가 필요하다면 템플릿에 엘리멘터의 내장 Library Kit나 Jetcraft의 템플릿을 그대로 복사해서 넣으면 된다.
기성 테마는 페이지 로딩 성능을 떨어뜨리는 요소가 존재할 수 있고 엘리멘터 호환 위젯들에 대한 스타일 상속을 방해할 수 있다. 하지만 기본 Hello Elementor 테마는 빈 캔버스처럼 시작 테마이므로 사이트 성능에 대한 완전한 제어권을 보장받고 시작할 수 있다.

엘리멘터를 사용하면 별도의 테마를 사용할 필요가 없다

Hello Elementor 테마가 로드하는 styles.csstheme.css는 각각 HTML 요소의 스타일 초기화(normalize.css나 reset.css 역할)과 테마가 사용하는 기본 헤더, 푸터 따위의 스타일을 정의하고 있다. 관리자 메뉴의 Appearance → Theme Settings에서 토글할 수 있으며 사이트 성능에는 큰 영향이 없다.

컨테이너 위젯은 항상 ‘Full Width’를 기본으로 사용한다

엘리멘터에서 흔하게 사용하는 Container Widget은 엘리멘터 버전 3.24 전 까지는 첫 생성 시 Content Width의 기본 값을 Boxed로 설정했다. Boxed는 실제 라이브 페이지에서 max-width 설정이 포함 된 추가 DOM 요소(div)를 생성한다. 따라서 Boxed는 페이지의 최상위 컨테이너 이외에는 사용할 필요가 없다. 기존에 생성한 컨테이너를 Full Width로 변경해 불필요한 추가 DOM 요소를 생성시키지 않도록 한다.

추가로 생성되는 DOM 요소가 실제 웹 사이트의 렌더링 성능에 큰 영향을 끼치진 않더라도 편집 화면에서는 매우 중요한 부분이다. 엘리멘터의 편집 화면은 대단히 많은 양의 DOM 요소를 사용하는데, 여기서 boxed로 설정된 컨테이너는 콘트롤을 위해 라이브 페이지보다 더 많은 양의 추가 DOM 요소를 생성하고, 이는 편집 화면의 리로딩 속도에 큰 영향을 미친다.
실제로 엘리멘터 편집 화면의 좌측 상단에 위치한 햄버거 메뉴에서 Site Settings 메뉴에 진입했다가 나오면 이러한 편집 화면의 DOM 요소가 렌더링에 어느정도의 영향을 끼치는지 실감할 수 있다.

텍스트 편집기 위젯의 사용 빈도를 줄인다

TextEditor Widget은 위지윅을 지원하는 편리한 위젯이다. 이 위젯은 Classic Editor, Advanced Classic Editor 등의 추가 플러그인을 사용하면 기능을 더욱 확장할 수 있다. 하지만 그런만큼 자원을 많이 소모하는 위젯이기도 하다. 편집기 위젯이 페이지 내에 많이 사용되면 편집 화면을 로딩하는데 많은 시간이 걸린다. 방문자의 경험만큼이나 관리자가 페이지를 편집하는데 거부감이 들지 않도록 하는 것도 중요하다.

편집기 위젯은 간단한 단락이나 문구를 넣을 때 사용하기에 부적합하다. 블로그 게시물처럼 끊김없이 하나의 긴 컨텐츠를 채울 때 사용하는 것이 좋다. 그러기 위해서는 이미지나 비디오, 리스트 양식, 테이블, 코드하이라이터, h1 - h6에 해당하는 헤딩과 같은 각종 컨텐츠 요소들이 위젯 내부에서 최대한 조화롭게 스타일링 되도록 준비하는 것이 가장 좋다.
그렇지 않으면 편집기 위젯을 사용하다가 도중에 멈추고 이미지 위젯, 비디오 위젯과 같은 별도의 위젯을 사용한 후 또 다시 새로운 편집기 위젯을 사용하게 된다.

필자는 TextEditor 위젯 내부에서 이런 다양한 요소들을 처리할 수 있도록 템플릿을 제작해 배포하고 있다. (Jetcraft-block-content-01 템플릿)

동일한 결과를 내는 더 적합한 위젯을 사용한다

페이지에서 가장 많이 사용하는 컨텐츠 레이아웃은 타이틀과 이미지, 그리고 글 단락으로 이루어진 구성이다. 이러한 구성을 위해 헤딩 위젯, 이미지 위젯, 텍스트 편집기 위젯을 조합하는 것 보다 Image Box Widget 혹은 Call To Action 위젯 하나를 사용하는 편이 라이브 서비스와 편집 환경 모두에서 DOM 요소를 훨씬 적게 생성한다.

여러 위젯을 조합하기 보다는 하나의 위젯에서

위젯은 그 자체로도 하나의 DOM 요소를 사용하면서 추가로 elementor-widget-container라는 래퍼용 요소도 출력한다. 페이지 내에 사용하는 위젯의 수가 증가하면 이런 추가적인 DOM 요소가 기하급수적으로 증가한다. 단순히 제목과 글 단락으로 이루어진 구성이 필요하다면 엘리멘터 위젯 카테고리 중 Wordpress 항목에 위치한 Text Widget도 좋은 선택이다.

캐싱을 사용하여 엘리멘터 관리하기

어떤 이유에서든 페이지 로딩에 1초 이상의 시간이 소요된다면 캐싱 도입을 생각해 볼 수 있다. 제아무리 사이트 성능을 관리해줘도 점차 늘어나는 위젯 사용이나 사용자 트래픽 증가로 인한 불가항력적인 부분들이, 많은 자원과 메모리를 사용하는 엘리멘터의 특성과 맞물려 성능은 점차 저하될 수 있다. 엘리멘터 공식 블로그에서도 관리가 가능하다면 캐시 솔루션의 사용을 강하게 권장하고 있고, 엘리멘터에서 제공하는 자체 호스팅 서비스 역시 서버 수준의 캐싱 솔루션이 도입되어 있다.

이 글에서는 캐싱 플러그인/호스팅의 비교 분석이나 캐싱 기술에 대한 설명과 같은 자세한 내용을 다루지 않는다. 캐싱 솔루션을 구현할 때 알아두면 좋은 점과 광고로 포장된 잘못된 정보에 현혹되지 않도록 유의해야 할 점 등에 촛점을 둔다.

잘 알려진 여러 캐싱 플러그인의 성능은 대동소이하다

Tom Dupuis의 The Best WordPress Cache Plugins 2023 블로그를 읽어보면 워드프레스 사용자들이 많이 사용하는 캐싱 플러그인에 대해 분석하고 있다. 필자는 이 블로그에서 다루는 각 플러그인의 장, 단점보다는 그냥 이런 플러그인들이 주로 사용되고 있구나라는 선에서 읽기를 권한다.
이 블로거의 글은 여러 테스트를 사용자 대신 진행해 준다는 점에서 매우 고맙지만, 캐싱 플러그인의 순위를 책정하는데에 순수 캐싱 기능 이외의 최적화 기능(Defer, Minify, Unused CSS 따위) 탑재 여부까지 고려하는 점은 다소 아쉽다.

동시 접속자 수 백명, 전자상거래 솔루션이 작동하는 온라인 쇼핑몰 정도의 일반적인 사이트라면 어떤 캐싱 플러그인을 쓰든 최종 성능은 서버 응답속도 100 ms안팎으로 비슷하다.

트래픽이나 서버 스트레스에 따라 캐싱 성능 효율이 떨어지는 소프트캡은 분명 플러그인마다 다를 수 있다. 페이지 캐싱 외에 스크립트 캐싱, 오브젝트 캐싱, 데이터베이스 캐싱까지 고려해야 할 상황인 사이트는 이 글에서 논외의 대상이다. 전문 백엔드 엔지니어가 아니라면 그냥 마음에 드는 UI와 심플한 기본 설정만 다루는 플러그인을 선택하길 권한다.

서버 수준에서 캐싱을 지원하는 호스팅에서는 플러그인을 사용할 필요가 없다

Nginx의 FastCGI 처럼 웹 서버의 구성파일을 통해 서버측 캐싱(Sever Side Caching)을 지원하든 아니면 WP Engine처럼 자체 플러그인을 통해 애플리케이션 수준에서 지원을 하든 사이트를 호스팅하는 업체에서 이미 캐싱 솔루션을 지원하고 있다면 추가적인 캐싱 플러그인 구성은 필요없다. 보통 국내의 워드프레스 호스팅은 별도의 캐싱 솔루션을 제공하지 않으므로 직접 플러그인을 통해 구성해야 한다.
물론 LiteSpeed 웹 서버나 Clouflare의 APO를 사용하기 위해 자사에서 직접 제공하는 허브용 캐시 플러그인은 사용해야 한다.

다양한 기능이나 설정보다는 사용성이 좋은 플러그인을 선택하자

흔히 웹 서버에서 제공하는 캐싱 구성 파일을 설정해서 사용하는 서버측 캐싱이 성능에 가장 좋다고들 한다. 그렇다고해서 직접 웹 서버를 설치해 인터넷에 널린 보기에 좋거나 들리는 소문에 의존한 구성방법을 따라해가며 캐싱 솔루션을 구현할 필요는 없다.

엘리멘터는 충분한 개발지식이 없어도, 디자인 기술이 없어도, 백앤드 노하우가 없어도 워드프레스라는 너무 유연해서 오히려 혼란스럽기까지 한 진입장벽을 낮추면서 빠르고 높은 생산성을 보고 사용하는 솔루션이다. 디테일한 설정에서 일희일비하지 말고 엘리멘터 사용자로서의 특혜에 집중하는 것이 좋겠다.

캐싱이 중복되지 않도록 주의한다

캐싱 플러그인을 사용하고 있다면 엘리멘터의 퍼포먼스 탭에서 제공하는 Element Caching과 같이 중복되는 기능을 비활성화 하는 것이 좋다. 아울러,  앞서 언급했던 최적화 기능들을 사용하고 있다면, 이미 Preload 단계에서 처리되어 최종 결과물이 사본으로 저장되므로 모두 비활성해도 성능에는 영향이 없다.

무작정 CDN을 사용하는 것은 바람직하지 않다

CDN은 원본 호스팅 서버의 사본을 세계 각지의 캐시 서버에 두고 방문자의 요청이 있을 경우 가장 가까운 위치의 캐시 서버에서 제공하는 서비스다. 따라서 별도의 원본 웹 서버나 플러그인 수준의 캐싱이 필요없다. 단순히 생각하면 안 쓸 이유가 없어보이지만 실제로는 일반적인 웹 사이트에서 쓸 이유가 거의 없다.

  • 워드프레스처럼 원본 서버에서 플러그인으로 쉽게 캐싱을 구현할 수 있는 환경에서 굳이 별도의 CDN 서비스에 가입하고 추가 비용을 발생시킬 필요가 없다.
  • Cloudflare의 APO 서비스처럼 해외 CDN의 경우 더욱 주의해야 한다. 대한민국의 망 사용료는 전 세계 최고로 비싸다. 고가의 CDN 플랜을 사용하지 않는다면 대부분의 방문자는 국내에 위치한  POP 서버가 아닌 일본이나 기타 아시아 국가의 캐시 서버에 접속하게 된다. 같은 한국에서 접속한 사용자가 엉뚱한 나라까지 가서 리소스를 받아오는 셈이 되는 것.

따라서 사이트의 방문자나 고객이 자국민 대상이라면 CDN 사용이 비용과 성능 모든 측면에서 캐싱 플러그인보다 좋을 것이 없다. 사이트의 주 고객층이 해외인 경우에나 가비아 CDN, NHN CDN 등을 고려해 볼 수 있다. 굳이 Cloudflare와 같은 해외 CDN을 써보고 싶다면 아예 엘리멘터에서 서비스하는 호스팅을 사용하는 편이 낫다.
엘리멘터 호스팅을 사용하면 월 2만원 상당의 Business 플랜으로 엘리멘터 프로와 모든 기능을 사용할 수 있고, Cloudflare의 엔터프라이즈 플랜이 포함되어 있으니 모든 방문자는 서울(ICN) 리전의 POP 서버를 통해 캐싱된 페이지에 접근하게 된다.

마치며

이 글을 쓰면서 Defer, Minify, Unused CSS와 같은 사이트 성능을 올려주는 여러 기술의 유효성에 대해 비관적인 시각을 견지한 점은 필자도 쉽지 않은 일이었다. 하지만 이 글의 테스트 범위는 처음부터 변함없이 ‘엘리멘터가 활성화 된 사이트’며, 그 범위 내에서의 결과를 가감없이 반영하였다.

그럼에도 불구하고 글의 여러 부분에서 모든 시청자의 동의를 받기 어려운 부분도 많이 있다고 생각한다. 이런 부분들은 F.A.Q를 추가해 조금 더 추가적인 내용들과 함께 다루어 보겠다.

캐싱 플러그인은 워드프레스의 코어 메서드인 wp_cache를 통해 캐싱에 대한 제어권을 넘겨받아 사용하므로 모두 비슷한 성능을 제공하지만, 캐싱에 대한 전문 지식이 충분히 있다면 세분화된 설정과 다양한 서버측 캐시 솔루션을 사용할 수 있는 W3 Total Cache가 있습니다.

하지만 각종 캐싱 솔루션에 대한 config 경험없이 기능을 토글하는 것 만으로는 WP-Optimize에서 ‘끼워넣기’ 형식으로 제공하는 캐싱과 성능면에서 어떠한 차이도 느끼지 못할 수도 있습니다.
많은 블로그에서 항상 Top 10에 포함되는 플러그인들이 반드시 좋은 것은 아닙니다. 데이터베이스 정리와 함께 단순하고 직관적인 캐싱 기능이 탑재된 전통의 WP-Optimize도 좋은 선택입니다.

NitroPack이 해외 블로거나 웹 에이전시의 블로그에서 구글의 PageSpeed Insights의 점수에만 포커스를 맞춘 치트성 플러그인으로 평가받은 바 있습니다. 높은 가격과 실제 사용자 환경에서는 쓸모없는 퍼포먼스 점수를 주요 마케팅 수단으로 삼았다는 것이 원인입니다. 필자는 이 플러그인을 테스트 해보지 않았고 실제로 어떤 상태인지 알 수 없으니 여러 정보를 취합하여 스스로 잘 선택해야 합니다.

CDN을 통한 캐싱 서비스를 제공하는 가비아, NHN 등을 제외하면 순수 워드프레스 웹 호스팅으로 서버 수준 캐싱을 지원하는 곳은 사이트빌더 외에는 찾아보기 힘듭니다. 사이트빌더는 필자가 사용해 보지 않았고, 호스팅 서버 사양에 대한 자세한 자료를 제공하지 않으며, 해외 호스팅사의 서울 POP 서버를 위탁받아 사용하는 영세 호스팅 서비스이므로 잘 알아보고 결정해야 합니다.

기준은 모두 다르겠지만 엘리멘터 페이지의 뷰포트에 모든 컨텐츠가 온전히 로딩되기까지의 시간이 1초를 초과한다면 캐싱 솔루션 도입을 생각해보기 좋은 지점이라 봅니다. 1초 정도면 쇼핑몰이 아닌이상 방문자가 ‘느려서’ 이탈할 정도의 속도는 아니므로 사이트의 내용이 매우 빈번히 추가되고 갱신된다면 매끄러운 운영을 위해 캐싱 도입을 조금 늦춰도 상관없습니다.

반대로, 페이지의 갱신 주기가 길거나 사용자의 요청에 의해 동적으로 변경되는 컨텐츠가 별로 없다면 굳이 캐싱 도입을 늦출 이유도 없습니다.

목록으로 돌아가려면 화면 하단 X 버튼 클릭