무료로 자체 호스팅 가능한 중고 물품 목록 CMS인 ShopClass 유지보수 및 성능 벤치마크 결과
요약
PHP 기반의 중고 물품 목록 CMS인 ShopClass의 최신 버전(6.4.0) 출시와 성능 벤치마크 결과를 공유합니다. 이 프로젝트는 GPLv3 라이선스로 무료이며, Docker 또는 일반 PHP 호스팅에서 운영 가능합니다. 테스트 결과, 캐시 미적용 시 초당 541 요청을 기록하며 높은 성능을 보였습니다.
핵심 포인트
- ShopClass는 GPLv3 기반의 무료 중고 물품 CMS입니다.
- 캐시가 없을 때 홈페이지에서 초당 541 req/s를 기록했습니다.
- N+1 쿼리 최적화로 홈페이지 요청 처리 속도를 약 24% 향상시켰습니다.
- 위치 데이터는 Wikidata 기반으로 자체 구축하여 공개했습니다.
안녕하세요 r/selfhosted 커뮤니티 여러분, 저는 ShopClass를 유지보수하는 Navjot입니다. ShopClass는 사용자의 서버에서 실행할 수 있는 PHP 애플리케이션으로, 중고 물품 목록 사이트(classifieds), 구인 게시판, 부동산 또는 차량 목록, 소규모 지역 마켓플레이스 등을 운영할 수 있습니다. 이 프로젝트는 원래 Osclass 5.x로 시작했으며, 저희 (Mindstellar)가 원 개발팀이 지원을 중단한 후 계속 유지보수해 왔습니다. 올해는 솔직히 이름이 너무 많이 바뀌었기 때문에 ShopClass로 이름을 변경했습니다. 어제 6.4.0 버전이 출시되어 이곳에 글을 올리기에 좋은 시점이라고 생각했습니다.
ShopClass란 무엇인가요:
- GPLv3 라이선스이며, 유료 에디션이나 숨겨진 '프로' 버전이 없습니다.
- 일반 PHP 호스팅 또는 Docker에서 실행됩니다. 설치를 위한 단일 명령어 install.sh가 있으며 HTTPS 설정까지 자동으로 해줍니다.
- 플러그인과 테마는 관리자 페이지에서 설치할 수 있으며 이들 역시 무료입니다. 현재 Stripe, nginx 및 Cloudflare 캐시 플러그인, 디지털 다운로드, 목록 가져오기(listing import) 등 몇 가지 더 있습니다.
- 관리자 페이지에는 2FA, 로그인 제한(login throttling), Turnstile, 백업 기능과 대부분의 작업을 위한 CLI (oc-cli.php)가 포함되어 있습니다.
벤치마크 결과:
제가 실제로 빠른지 아니면 그렇게 생각만 하는 것인지 알아보고 싶어서 ShopClass 6.4, Osclass 8.4 (OsclassPoint 버전), 그리고 HivePress를 동일한 서버 환경(같은 PHP 8.4 / nginx / MariaDB)에 배치하고, 같은 50개의 목록을 사용하여 각각의 앱을 한 번씩 실행하는 방식으로 테스트했습니다.
간단히 요약하자면, 캐시가 전혀 없을 때 ShopClass는 홈페이지에서 초당 541 요청(req/s)을 기록했고, Osclass는 327, HivePress는 41이었습니다. nginx 페이지 캐시를 앞에 두었을 때는 코어 2개로 약 7,500 req/s까지 올라갔습니다. 물론 일부 영역에서는 뒤처지기도 합니다. 예를 들어, 플러그인 카탈로그가 작거나 핵심 기능에 REST API가 없는 경우입니다. 전체 테이블과 방법론은 댓글에 남겼습니다.
솔직히 말씀드리자면 제가 벤치마크를 작성했고 앱 중 하나를 유지보수하고 있기 때문에 이 결과는 어느 정도 비판적으로 받아들여 주시기 바랍니다. 그저 docker compose + hey + lighthouse로 진행한 것이라 특별할 것은 없습니다. 그리고 네, 코딩에 도움을 받기 위해 AI 도구를 사용합니다만, 모든 변경 사항은 제가 검토하고 테스트합니다. 재미있는 점은 이 작업을 하는 동안 저희 자체 홈페이지에서 N+1 쿼리를 발견했다는 것입니다. 각 목록 카드마다 데이터베이스에 배지 정보를 하나씩 요청하고 있었던 것이죠. 이를 6.4 버전에서 수정하여 홈페이지의 req/s를 약 24% 더 높일 수 있었습니다.
덧붙여 말씀드리자면, 위치 데이터(국가, 주, 도시)의 경우 충분히 좋은 오픈 소스를 찾을 수 없었기 때문에 Wikidata를 기반으로 자체적으로 구축하여 CC0 라이선스로 공개했습니다 (placedb, 댓글에 링크). 무료 JSON이며 API 키가 필요 없고, 원하시는 용도로 자유롭게 사용하실 수 있습니다. 직접 사용해 보세요: • 데모(demo), 매시간 초기화됨, 관리자(/admin) / 관리자(/admin): https://demo.mindstellar.com • GitHub: https://github.com/mindstellar/shopclass • 문서(docs): https://mindstellar.com/docs/ 만약 여전히 구형 Osclass를 사용하고 계시다면, 문서에 업그레이드 가이드가 있으니 진행 상황을 알려주시면 좋겠습니다. 피드백은 언제나 환영하며, 특히 혹독한 비판도 좋습니다 :) 제출자 /u/IamTheForth [링크] [댓글]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/SelfHosted (AI filter)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기