WPML

지난 몇 달 동안 저희는 자체 사이트인 wpml.org가 느려지고 있다고 느꼈습니다. 먼저 서버를 업그레이드하는 과감한 접근 방식을 취했습니다. 이것이 도움이 되지 않자, 저희는 마음을 다잡고 문제를 제대로 분석했습니다. 그 결과가 오늘 릴리스이며, CPU 로드와 응답 시간을 70% 줄였습니다.

성능 분석에 대해 배운 점


성능은 저희에게도 매우 중요했습니다. 저희는 수년 동안 WPML의 메모리, 쿼리 및 CPU 시간을 테스트하고 매 릴리스마다 이를 개선해 왔습니다. 이번 개발 과정에서 배운 점은 정적 테스트가 항상 실제 문제를 드러내지는 않는다는 것입니다.

지금까지 성능을 테스트하기 위해 사용한 방법은 다음과 같습니다.

  • 수많은 글, postmeta, 카테고리 및 사용자가 있는 대규모 데이터베이스 생성
  • “무거운” 페이지 목록 작성
  • 페이지를 여러 번 로드하고, 로드에 걸리는 시간을 측정하며, 프로파일링 수행

이를 통해 디버깅하고 최적화해야 할 프런트엔드 및 관리 화면 페이지를 파악했습니다. 저희는 쿼리 수를 줄이고, 긴 쿼리를 피하며, 효율적인 PHP 코드를 작성하도록 했습니다.

그렇다면 무엇이 누락되었을까요?

WordPress와 WPML은 “페이지를 요청하고 로드될 때까지 기다리는 것”보다 조금 더 복잡합니다. 모든 작업은 공유 리소스인 데이터베이스를 통해 이루어집니다. 방문자 A가 데이터베이스에서 수행하는 작업이 방문자 B가 경험하는 환경에 영향을 미칠 수 있습니다.

이러한 병목 현상을 파악하기 위해 운영 사이트에 Appoptics라는 도구를 설치했습니다. 이를 통해 어떤 함수와 쿼리가 시간을 차지하는지 측정하여 그 이유를 분석할 수 있었습니다.

실제 성능 개선 효과


저희는 문자열 번역의 겉보기에 무해한 작업 하나가 다른 플러그인에서 options 테이블로 보내는 빈번한 쿼리와 심각한 리소스 충돌을 일으킨다는 것을 발견했습니다. 해당 호출을 100만 번만 실행한다면 아무런 문제도 느끼지 못할 것입니다. 하지만 다른 페이지에서 options 테이블에 액세스해야 할 때, 문자열이 액세스를 마칠 때까지 기다려야 합니다. 대기 중인 요청 목록이 늘어나고, 데이터베이스 용량을 초과하며, 엄청난 혼란이 발생합니다.
wpml.org의 성능 개선

그래프를 보면 서버 리소스의 대부분이 데이터베이스(계속해서 잠기고 풀리던 테이블)에 집중되었음을 알 수 있습니다. 아마도 저희가 언제 수정 사항을 적용했는지 짐작하실 수 있을 것입니다.

하지만 다른 성능 문제가 있는데, 수정해 주실 수 있나요?


저희가 발견한 사항은 wpml.org뿐만 아니라 WPML을 실행하는 트래픽이 많은 다른 여러 사이트에도 확실히 도움이 될 것입니다. 부하가 매우 적은 사이트라면 이 개선 사항을 거의 느끼지 못할 것입니다. 이는 동시 접속이 많고 사람들이 여러 가지 작업을 수행하는 사이트에만 영향을 미칩니다.

다른 사이트에서는 다른 성능 최적화 방법을 사용할 수도 있습니다. 이제 저희는 이 작업을 수행하는 가장 좋은 방법이 성능 저하를 겪고 있는 실제 운영 사이트에 프로파일링을 설치하는 것임을 알게 되었습니다. 데이터베이스 사본을 받더라도 트래픽을 시뮬레이션할 수는 없습니다. 이것이 이전의 모든 과정에서 이 특정 문제를 포착하지 못한 이유입니다.

참고로, 이번 성능 개선 과정에서 WPML의 병목 현상만 발견된 것은 아닙니다. WPML에서 발견한 문제는 수정했지만, 다른 곳에서도 심각한 문제를 확인했습니다. 일부는 저희가 직접 패치했고, 일부는 데이터베이스를 통해 최적화했습니다.

관심이 있으시다면 알려주세요. 운영 사이트에 성능 분석 도구를 설치하도록 도와드리겠습니다. 그런 다음 결과를 분석하는 데 기꺼이 도움을 드리겠습니다. WPML에서 문제가 발견되면 수정하겠습니다. 성능 문제가 있는 사이트의 경우 예상치 못한 곳에서 여러 문제가 발생하고 있을 가능성이 높습니다.

WPML 4.2.6의 기타 새로운 기능

WPML 코어 4.2.6

  • WPML의 글 편집 메타 박스 우선순위를 변경하는 wpml_post_edit_meta_box_priority 필터 추가
  • 하위 폴더 설치 시 플러그인 업그레이드 문제 수정 – 항상 사이트 URL 사용
  • wp_options 테이블에 대한 추가 쓰기를 줄이기 위해 필요할 때만 알림 저장
  • 언어 전환기 링크의 보안 문제 수정

WPML 문자열 번역 2.10.4

  • wp_option 테이블이 불필요하게 업데이트되지 않도록 ST mo 파일 가져오기 문제 수정

WPML 번역 관리 2.8.5

  • 번역 작업 페이지의 페이지네이션 컨트롤 스타일 개선
  • 관리 화면 언어가 영어와 다를 때 번역 작업 페이지에서 번역가 할당 문제 수정
  • 관리 화면 언어가 영어와 다를 때 “Translated by” 열의 부적절한 콘텐츠 수정

WPML Media Translation 2.5.2

  • wp_options 테이블에 대한 추가 쓰기를 줄이기 위해 필요할 때만 알림 저장

WPML CMS Nav 1.5.1

  • 해당하는 경우에만 캐시를 지워 성능 개선

다운로드 및 업데이트


항상 그렇듯이 등록된 모든 사이트에 대해 이 업데이트를 자동으로 받게 됩니다. 언제든지 WPML 계정에 로그인하여 수동으로 다운로드하고 설치할 수 있습니다.

사이트에서 항목을 업데이트하기 전에 백업을 수행하는 것이 좋습니다.

피드백, 질문 또는 제안 사항이 있으신가요?


저희 사이트는 이제 훨씬 빠르게 실행되고 있지만, 여러분의 사이트에 대해서도 듣고 싶습니다. 의견을 남겨 주시면 답변해 드리겠습니다.

이 글이 유용했나요? 이 글을 공유하세요: