Decoroll
롤 블라인드를 파는 OpenCart 스토어: 가격 계산기와 결제를 고친 뒤, 데이터베이스 부하를 줄이고 호스팅의 CPU 제한을 풀어낸 성능 구조 작업.

과제
롤 블라인드 스토어는 가격 계산기와 결제를 고쳐야 했습니다. 그런데 그 뒤 호스팅에서 사이트가 차단되기 직전까지 갔습니다. 사이트와 데이터베이스가 일일 CPU 한도의 약 두 배를 쓰고 있었지만, 아무도 이유를 몰랐습니다.
해결책
- 가격 계산기: 올바른 반올림(이전에는 딱 떨어지는 금액에도 1 UAH를 더했습니다), 여러 품목일 때 장바구니 합계가 1~2 UAH씩 어긋나던 문제 해결, 느린 연결에서 잘못된 가격으로 주문되지 않도록 가격 계산 중에는 “장바구니에 담기” 버튼 잠금, http/https 혼용에서도 더 이상 실패하지 않는 계산기 요청.
- 결제: 배송 방법(택배 주소 또는 지점)에 맞춰 바뀌는 주소 입력란, 더 이상 지역 입력란을 채우지 않는 브라우저 자동 완성, 주문 양식에 관리자의 저장된 비밀번호를 넣던 Chrome 문제 해결.
- 이메일: 문의 양식 메시지를 방문자를 Reply-To에 넣어 스토어 메일함에서 발송하도록 바꿔, 호스팅이 더 이상 거부하지 않습니다.
- SEO: 오래된 리디렉션 약 550개 제거, 이미지 URL과 모든 상품 피드의 언어 접두사 수정, robots.txt에서 localhost를 가리키던 사이트맵 수정.
- CPU 사고: 서면 조사로 근본 원인을 찾았습니다. 테마의 상대 링크와 검증되지 않은 친화적 URL이 결합해 크롤러에게 끝없는 페이지 공간을 만들어 내고 있었습니다. 이제 중첩 URL은 PHP가 실행되기 전에 리디렉션으로 정리되고, 링크를 수정했으며, 데이터베이스 인덱스 8개와 URL 캐싱을 추가하고, 세션 테이블을 정리하고, 이미지 처리를 강화하고, 1 GB까지 커진 오류 로그를 멈추고, 봇 차단을 갖춘 Cloudflare 뒤로 사이트를 옮겼습니다. 모든 변경 전에는 검증된 데이터베이스 백업을 만들었습니다.
- 개발 환경: 프로젝트를 Docker 환경과 로컬 설정을 갖춘 git으로 옮겼습니다.
결과
상품 페이지 조회 1회당 읽는 행 수: 619,950 → 0. 데이터베이스의 세션: 57,040 → 6,777. 사이트맵: 1.12초 → 0.16초. 수정 후 홈페이지는 0.20초, 상품 페이지는 0.52~0.63초에 응답합니다. 호스팅은 제한을 해제했습니다.