마젠토로 사이트 구축하는 모든 사람들의 가장 큰 근심은 역시 마젠토의 느린 속도일 것입니다.
이 부분만 아니면 마젠토가 소규모 사업자들에게도 선택될 수 있을텐데 말입니다..
사이트의 속도(퍼포먼스)는 여러가지 요소들이 복합적으로 관련이 되기 때문에, 사실 간단한 것은 아니지만 기본 적인 사항 몇가지를 적어봅니다.
(아래 내용으로 설정해서 발생하는 문제는 책임지지 않으니 테스트 서버에서 테스트해보시고 적용하세요..)
(아래 내용으로 설정해서 발생하는 문제는 책임지지 않으니 테스트 서버에서 테스트해보시고 적용하세요..)
1. 서버 관련
– 웹서버와 DB서버의 분리: 고사양 서버 한대로 처리하는 경우와, VPS 두대로 웹과 DB를 분리했을때 퍼포먼스 차이가 크게 납니다. 비용측면에서 큰 부담이 없는 부분이며, 보안측면에서 훨씬 좋기 때문에(당연한 이야기지만) 권장합니다.
– CDN사용: 다수의 서비스 회사가 있는데 마젠토와 연동 익스텐션이 안정적인 아마존 클라우드프론트를 추천합니다.
– MYSQL 셋팅
innodb_thread_concurrency = 2 * [numberofCPUs] + 2
innodb_flush_log_at_trx_commit = 2
thread_concurrency = [number of CPUs] * 3
thread_cache_size = 32
table_cache = 1024
query_cache_size = 64M
query_cache_limit = 2M
join_buffer_size = 8M
tmp_table_size = 256M
key_buffer = 32M
innodb_autoextend_increment=512
max_allowed_packet = 16M
max_heap_table_size = 256M
read_buffer_size = 2M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_max_extra_sort_file_size = 10G
myisam_repair_threads = 1
innodb_thread_concurrency = 2 * [numberofCPUs] + 2
innodb_flush_log_at_trx_commit = 2
thread_concurrency = [number of CPUs] * 3
thread_cache_size = 32
table_cache = 1024
query_cache_size = 64M
query_cache_limit = 2M
join_buffer_size = 8M
tmp_table_size = 256M
key_buffer = 32M
innodb_autoextend_increment=512
max_allowed_packet = 16M
max_heap_table_size = 256M
read_buffer_size = 2M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_max_extra_sort_file_size = 10G
myisam_repair_threads = 1
– NGINX사용
2. 마젠토 어드민 / 익스텐션 관련
– JS, CSS Merge: CSS는 큰 이슈가 없지만, 자바스크립트 파일을 미리? 최적화를 하신 경우, 일부 익스텐션이 동작하지 않는 문제가 생깁니다. 마젠토의 기본기능인 이 통합 자체가 최소화 처리를 하므로 원본 파일 그대로 두고 사용해야 합니다.
– Cache on: 개발중 꺼두었던 캐싱 기능을 켭니다.
– 최소한의 익스텐션 사용하기: 익스텐션=자바스크립트 수 증가 로 이어지며, 코딩을 잘 못한 익스텐션 설치시 사이트 퍼포먼스에 많은 영향을 줍니다.
– ioncube 인코딩된 익스텐션의 사용 지양: 가능하면 암호화 되지 않은 익스텐션을 구입합니다. 어쩔수 없는 경우에는 할수 없지만요..
– 리다이렉트 최소화: www 기본사용으로 설정하기. 에러 페이지 제거
– store code url 사용안하기
– System -> Configuration -> Catalog -> Catalog -> Frontend 에서 플랫카테고리, 플랫프로덕트 사용으로 설정
– layered naviation사용 최소화
3. 템플릿 설정
3. 템플릿 설정
– 이미지를 CSS Sprite로 변경: 구글링 하시면 툴이 있으니 국기아이콘, 버튼등을 통합합니다.
– 모든 이미지에 대해 폭과 높이 값 지정
– 모든 이미지에 대해 최적화 작업
4. htacess 설정
GZIP 압축 설정코드 역시 구글링하면 많이 나오니, 본인에게 필요한 부분을 사용하시면 되겠습니다.
아래는 최근 저희팀에서 구축한 웹사이트의 최종 라이브 결과입니다.
1) tools.pingdom.com
위에 적은 대부분의 내용을 작업했고, 서버는 AWS를 사용했습니다. 미국서버고, 미국지역 테스트이기 때문에 미국외 아시아지역에서 접속시 약 1.5초 정도는 더 추가가 될 것으로 생각됩니다.

2) webpagespeedtest.org
PageSpeed 1.12 Score: 95/100*
(자바스크립트 defer 처리만 감점이 되었는데 이부분은 마젠토에서 많은 이슈가 있어서 저는 프로젝트에 적용하고 있지는 않습니다.)
맺음말
맺음말
속도가 빠르다고 매출이 나는가? 아니라고 생각합니다.
그보다는, 속도가 빠르면 방문자들의 이탈율을 감소시켜주니 매출이 나오는 사이트 입장에서 더 전환율이 높아질 수 있다는 의미로 받아들이시는 것이 좋겠습니다. 얼마전 포스팅한 스타일난다 사이트의 경우, 그러한 속도로 해외에서 매출이 나온다는 것은 영미권에서는 있을 수 없는 케이스 입니다. (솔루션을 이미 변경했겠죠..)
마젠토로 사이트를 만드는 것은 너무나 쉽지만, 잘 만드는 것은 정말 어렵습니다.
대규모 프로젝트를 많이 해봤지만, 마젠토가 어려운 것은… 마젠토 자체가 특정 비즈니스에 최적화 된 것이 아니라, 광범위한 일반적인 케이스를 고려해서 만들어 졌기 때문에, 대부분의 경우 불필요한 기능, 코드가 너무 많고, 정작 필요한 기능은 없기 때문에 다수의 커뮤니티 익스텐션을 추가하게 되는데 이로인한 다수의 문제점을 해결해야 되기 때문입니다.
사실 이러한 써드파티 익스텐션간의 호환성, 안정성 및 트러블슈팅에 대한 맵이 있다면 수만불의 가치가 있을 것으로 생각될 만큼 이부분이 가장 어렵다고 할 수 있겠습니다.