피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Sticky Session과 Table Blacklist로 쿼리 70% 감소 및 분산 환경 안정화
PrestaShop Behind a Load Balancer: What Breaks and How to Fix It
AI 요약
Context
단일 서버용으로 설계된 PrestaShop의 아키텍처를 GCP Auto-scaling 환경으로 확장하며 발생하는 Cache Desync 및 배포 일관성 문제 분석. 페이지당 최대 2,000개에 달하는 과도한 SQL 쿼리로 인한 성능 저하와 분산 노드 간 데이터 불일치 해결이 핵심 과제임.
Technical Solution
- Cloudflare Sticky Session 도입을 통한 사용자-노드 고정으로 노드 간 Cache Desync 현상 원천 차단
- 네트워크 홉으로 인한 Latency 방지를 위해 Distributed Cache 대신 각 노드별 Local Redis 배치 및 10분 TTL 적용
- 데이터 무결성 확보를 위해 잦은 변경이 발생하는 Cart, Order, Stock 관련 테이블을 정의한 Table Blacklist 구축 및 DB 직접 쿼리 강제
- PHP 실행 속도 최적화를 위해 애플리케이션 코드는 Local Disk에 배치하고 이미지 및 로그 등 정적 자산만 NFS로 공유하는 하이브리드 스토리지 설계
- 모듈 설치 시 발생하는 사이드 이펙트 방지를 위해 Override 코드를 제거하고 수동 Merge 후 배포하는 Module Surgery 프로세스 정립
- 전용 Deploy Machine에서 rsync를 활용해 모든 노드에 코드를 동기화하고 캐시를 일괄 삭제하는 원자적 배포 파이프라인 구축
실천 포인트
1. 분산 캐시 도입 전 네트워크 Latency가 실제 DB 쿼리 속도보다 느려지는 지점(Critical Path)인지 검토
2. 공유 스토리지(NFS) 사용 시 실행 파일(PHP, JS)과 정적 자산을 분리하여 I/O 병목 제거
3. 자동화되지 않은 서드파티 모듈 설치 시 DB 스키마 변경점과 코드 Override 내역을 수동 검증하는 프로세스 도입