캐쉬 관리 (Cache Storage Management)

초보자를 위한 마젠토의 속도를 높이는 3가지 방법

지금까지 수많은 클라이언트들을 만나고 이야기 해봤는데, 저의 경험상 마젠토 사이트를 운영하시는 분들이 가지고 있는 공통적인 문제는 바로 사이트의 페이지 로딩 속도 였습니다.
좋은 호스팅을 가지고 계신분들이 아닌이상 저렴한 호스팅에서는 속도가 항상 관건입니다.
마젠토의 장점중 하나인 확장성(Scalability)과 널려있는 3rd party 모듈들은 운영자로 하여금 여러가지를 다른 시도를 해볼수 있도록 하는데, 이것은 모듈/익스텐션 설치로 이어지고, 곧 더 많은 프로세스 요구를 의미합니다.
그리고 방문자의 증가도 속도 저하에 한몫 하게됩니다.
금전적인 여유가 있어서 호스팅을 업그레이드 할수 있으면 다행인데 그렇지 않은 분들은 속도를 높이기 위해 어떻게든 불필요한 요소를 제거해야 하거나, 복잡한 단계를 거쳐 서버 최적화를 해야 합니다.
대부분의 최적화 방법들은 개발자나 서버관련 전문가가 아닌 보통 사람들이 쉽게 다가가기 힘든 방법들이라서 이번 포스팅에는 마젠토에 대해 잘 모르는 초보자도 손쉽게 할수 있는 방법 3가지를 소개할까 합니다.
단지 필요한건 마젠토 관리자모드로 로그인만 할수 있으면 되구요, 이 3가지 방법만으로도 어느정도 효과를 볼수 있습니다.

1. 모든 CSS와 자바스크립트 합치기 (JavaScript & CSS Files Merge)

모든 CSS와 자바스크립트 합치기 (JavaScript & CSS Files Merge)

모든 CSS와 자바스크립트 합치기 (JavaScript & CSS Files Merge)

마젠토의 관리자 모드에서 System > Configuration > Advanced > Developer 로 가시면 제일 아래부분에 JavaScript Settings 와 CSS Settings 가 있습니다.
이 두가지를 “Yes”로 설정하시면 됩니다.
이것은 여러군데에 흩어져있는 JavaScript 와 CSS 파일들을 하나로 합치는 역할을 합니다.
페이지 로딩시, 해당 페이지에 필요한 파일들을 불러오느라 각각의 파일에 대한 request를 서버에 보내게 되는데, 결과적으로 JavaScript와 CSS가 여러개의 파일로 나뉘어져 있으면 파일의 갯수만큼 request를 보내게 되고 또 그만큼의 response를 받게 됩니다.
템플렛이 어떻게 만들어 졌느냐에 따라 다르지만, 이때 소요되는 시간이 상당히 길어질수 있으므로 하나로 뭉쳐진 JavaScript와 CSS 파일은 로딩속도를 높이는데 좋은 역할을 하게됩니다.

2. 컴파일 (Compilation)

컴파일 (Compilation)

컴파일 (Compilation)

마젠토의 관리자 모드에서 System > Tools > Compilation 으로 가셔서 “Run Compilation Process”를 클릭하시면 됩니다.
이것은 위의 JavaScript 와 CSS 파일들을 하나로 합치는것과 비슷한 원리인데, JS & CSS 파일을 합치는것이 페이지의 Frontend 에 해당될때, 컴파일은 마젠토 Backend 의 코어 php 파일들을 하나로 뭉치는 역할을 합니다.
마젠토의 코어는 상당히 방대하고 수많은 파일들로 이루어져 있구요, Varien과 Zend의 모델의 수도 꽤 많습니다.
이 많은 양의 php파일들을 컴파일하게 되면 페이지 로딩시 상당한 속도향상을 느낄수 있습니다.

3. 캐쉬 관리 (Cache Storage Management)

캐쉬 관리 (Cache Storage Management)

캐쉬 관리 (Cache Storage Management)

마지막으로 캐쉬관리는 아마도 마젠토를 경험해 보신 분들이라면 누구나 알고 있을거라 짐작됩니다.
마젠토의 관리자 모드에서 System > Cache Management 로 가셔서 모든 항목을 선택한후 Refresh 한후에 Enable로 돌려놓으면 됩니다.
캐쉬를 Enable로 설정해 놓은후 방문자가 페이지를 처음으로 방문했을때 해당 페이지 내용을 서버에 저장해 놓았다가 다른 방문자가 같은 페이지를 방문했을때 저장되어있는 내용을 보여줌으로써 로딩 속도향상에 도움을 주게됩니다.

위의 방법들은 개발자가 아니거나 프로그래밍에 대한 지식이 없어도 누구나 쉽게 마우스 클릭으로 설정할수 있는 부분이므로 세가지 모두 사이트에 적용하는것을 추천합니다.
만약 사이트를 변경하게 되거나 작업을 하게될 경우 위의 세가지 항목을 모두 설정 해제하셔야 변경사항이 사이트에 반영됩니다.
작업이 끝나면 다시 세가지 항목을 설정해 놓으므로써 사이트의 속도를 높일수 있습니다.

6 replies
    • Brian Lee
      Brian Lee says:

      안녕하세요,
      좋은 지적 감사합니다.
      fishpig에서 올린 내용에 대해서는 사실 저도 모르고 있다가 작년부터 인지하고 있는 사항입니다.
      이론상으로는 fishpig의 내용이 맞는말이고, fishpig에서 팔고있는 모듈은 사용해 보지는 않아서 검증해 보지는 않았지만 내용상으로만 봤을때 더 효율적인 캐싱방법이라고 생각합니다.
      그리고 JS/CSS Merge 기능을 절대 사용하지 말라는 사람들이 있다는것도 알고 있습니다.
      의견이 분분한건 사실이고 마젠토 자체내에서도 어느정도 문제를 인지하고 있구요, Magento 2 부터는 기능이 개선되어 나온다고 합니다.
      분명한건 경험상 지금까지 만든 대부분의 마젠토 사이트에서 JS Merge 기능을 사용할때 속도가 더 빨랐기 때문에 저는 여전히 이 기능을 사용하고 있습니다. (제가 같이 일하는 frontend developer들의 특성상 CSS Merge는 거의 사용하지 않습니다.)
      그리고 클라이언트들에게도 이부분에 대한 문제점을 이야기 해주고 언제든 그 기능을 껐다 켰다 할수 있다는걸 알려줍니다.

      반대로 생각해 봤을때, 마젠토가 여러번의 버전 업그레이드를 통해 지속적으로 문제점들을 수정하고 있는데 만약 이 Merge기능이 사이트의 performance에 오히려 심각한 해를 끼치는 기능이라면 마젠토가 버전 업그레이드 할때 아예 없애버리거나 진작에 개선하지 않았을까요?
      제 개인적인 의견은 이 문제가 항상 있는것도 아니고, 그렇다고 그리 심각한 수준도 아니며, 사이트 performance에 해를 입히는 경우도 드물기 때문에 마젠토에서 그냥 내버려 두고 있는것이라 생각됩니다.
      이 기능은 현재 제가 작업하고 있는 Enterprise 1.13.1.0 버전에도 버젓이 존재하고 있습니다. 1.14는 아직 확인해 보지 못했습니다.
      단지 더 효율적인 방법이 존재하므로 내년초에 나오는 Magento 2에 개선되어 나온다는 얘기를 들었습니다.

      Reply
      • John G.
        John G. says:

        자세한 답변 감사합니다. Magento 2 가 여러모로 기대가 되네요.

        이번에 심각하게 front-end 에 문제가 생겨서 해결법을 계속 찾다가, 결국 Merge JV 가 문제였다는걸 알고, 해당글을 찾게 되었네요. 문득 이 블로그 글이 생각이 나서 질문을 드렸습니다. 다른 마젠토 퍼포먼스 관련 대부분의 글에서도 Merge를 하라고하고 있는데, 저는 설정만 해두고 잊고 있었네요 store owner 들에게는 먼가 문제가 생겼을시 해당 부분을 설정을 한번 체크해보는것을 잊지 않는게 중요할것 같습니다.

        말씀하신대로 크게 문제가 없다면 Merge를 사용하는게 맞는거 같습니다.
        항상 좋은 부분 배우고 갑니다!

        Reply
  1. 김형우
    김형우 says:

    안녕하세요.. ㅡMagento 2 로 업그레이드하여 사용하고 있는데 이 기능을 써도 될런지요?
    참고로 저희 이벤트시 트레픽이 많은데 로딩이 엄청나게 느려져서 질문 드려봅니다.

    Reply
    • Brian Lee
      Brian Lee says:

      네, Magento 2 또한 캐시 기능이 Magento 1과 동일하며,
      새로운 기능으로 Stores > Configuration > Advanced > Full Page Caching 에서 FPS 설정또한 할수 있습니다.

      FPC에는 Built-in Application과 Varnish가 있는데 두가지 다 Caching하는 기법의 일종이며
      Built-in Application이 속도면에서는 Varnish보다 조금더 우월합니다.

      Reply
    • Rechard P.
      Rechard P. says:

      merge 기능 해봐야 이론적으로 빨라진다는 느낌이지 실전에선 아무런 효과없습니다.
      에러만 잔뜩납니다. 쓰지 마세요..에러 찾기도 힘들고 찾다가 시간 다 갑니다.
      전부 하나로 합쳐져서..
      컴파일도 그냥 느낌일뿐지지 쓸모없는 기능이예요.
      마젠토캐시 켜놓는거(이건 뭐 기본적으로 하지 않으면 말도 안되게 느리니까) 말곤, 할수 있는거 없습니다.
      나머진 관리하기만 무지하게 복잡해집니다.
      마젠토는 뭐하나 파일이나 상품정보 1개 수정하면,
      컴파일 새로고침해야 되고,
      마젠토 캐시 새로고침해야 되고,
      인덱스 새로고쳐야 하고,
      css/javascript 병합된거 또 새로고쳐야 하고,
      거기다가 또 페이지캐시까지 해놓으면, 그것도 새로고쳐야 하고..
      redis 로 캐시쓰면, 그것도 새로고쳐야 하고,
      게다가 varnish같은 캐싱서버까지 쓴다면, 그것도 또 새로고쳐야 하고,
      캐시도 하도 많아서, 알게 모르게 백엔드2차캐시까지 자동적으로 db나 file에 저장되니,
      중복된 캐시도 많아서 메모리도 쓸데없이 다 잡아먹으니, 메모리가 많이 필요하게되고..
      이게 귀찮아서 또 모두 자동적으로 하게 해놓았다고 하면, 업데이트 1개 하는데 엄청 오래걸리고..
      이러니 사이트에서 하나 에러나면, 원인을 찾기도 불가능합니다.
      결국 근본적으로 마젠토는 느릴수밖에 없는 구조라…..
      느린 근본적인 이유는, xml로 된 환경설정파일들입니다.
      수많은 xml설정파일들을 매번 읽고 파싱해서 merge하고나서야, 거기서 정보를 읽어서 처리하니 cpu소모적이고, 2번째는 재귀적으로 계속 반복해서 호출하는 수많은 블럭 렌더링구조입니다.
      쉽게말해 블럭갯수만큼 include하는 거니까요..게다가 db까지 속도면서 최악인 EAV구조라…

      Reply

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *