Lowe's 사이트 속도팀은 자동화된 성능 테스트 및 모니터링 시스템을 구축하여 성능 예산에 대해 풀 요청을 테스트하고 성능 회귀가 프로덕션으로 넘어가지 않도록 방지합니다.
Lowe's는 약 2,200개의 매장을 운영하고 30만 명이 넘는 직원을 고용하고 있는 약 900억 달러 규모의 홈 인테리어 소매업체입니다. 성능 회귀가 프로덕션에 배포되지 않도록 하는 자동 테스트 및 모니터링 시스템을 구축하여 Lowe's 사이트 속도팀은 웹사이트 성능을 개선하고 주요 소매업체 사이트 중에서 순위를 올릴 수 있었습니다.
문제
사이트 속도팀의 목표는 Lowe's 사이트를 페이지 로드 속도 측면에서 가장 빠른 전자상거래 사이트 중 하나로 만드는 것입니다. 자동화 테스트 및 모니터링 시스템을 구축하기 전에는 Lowe의 웹사이트 개발자가 사전 프로덕션 환경에서 성능을 자동으로 측정할 수 없었습니다. 기존 도구는 프로덕션 환경에서만 테스트를 실행했습니다. 그 결과 열악한 빌드가 프로덕션으로 넘어가 사용자 환경이 저하되었습니다. 이러한 열등한 빌드는 사이트 속도팀에서 감지하고 작성자가 되돌릴 때까지 프로덕션 환경에 남아 있었습니다.
솔루션
사이트 속도팀은 오픈소스 도구를 사용하여 사전 프로덕션 환경을 위한 자동화된 성능 테스트 및 모니터링 시스템을 구축했습니다. 시스템은 모든 풀 리퀘스트 (PR)의 성능을 측정하고 사이트 속도팀의 실적 예산 및 측정항목 기준을 충족하지 않는 경우 PR을 출시에서 프로덕션으로 전환하지 않습니다. 또한 SEO 및 ADA 규정 준수도 측정합니다.
영향
16주 동안 102개의 빌드를 배포한 팀 샘플에서 자동화된 성능 테스트 및 모니터링 시스템을 통해 성능이 저조한 빌드 32개가 프로덕션으로 배포되지 않았습니다.
이전에는 사이트 속도팀에서 개발자에게 성능 회귀가 프로덕션으로 출시되었다고 알리는 데 3~5일이 걸렸지만 이제는 시스템이 사전 프로덕션 환경에서 풀 리퀘스트를 제출한 후 5분 후에 개발자에게 성능 문제를 자동으로 알립니다.
성능 회귀로 신고되는 풀 리퀘스트가 줄어들고 있다는 점을 보면 코드 품질이 시간이 지남에 따라 개선되고 있습니다. 사이트 속도팀은 사이트 품질을 지속적으로 개선하기 위해 거버넌스 예산을 점진적으로 강화하고 있습니다.
일반적으로 문제가 있는 코드의 소유권을 명확하게 정의하면 엔지니어링 문화가 바뀝니다. 누가 실제로 문제를 도입했는지 명확하지 않아 불만스러운 사후 수정을 하는 대신 팀은 문제가 있는 코드의 소유권을 객관적으로 부여하여 사전 최적화를 할 수 있습니다.
구현
사이트 속도 거버넌스 (SSG) 앱의 핵심은 Lighthouse CI입니다. SSG 앱은 Lighthouse를 사용하여 모든 풀 리퀘스트의 페이지 성능을 검증하고 감사합니다.

SSG 앱은 사이트 속도팀에서 정의한 성능 예산 및 측정항목 타겟에 도달하지 못하면 빌드가 실패합니다. 로드 성능뿐만 아니라 SEO, PWA, 접근성도 시행합니다. 작성자, 검토자, SRE팀에 즉시 상태를 보고할 수 있습니다. 예외가 필요한 경우 검사를 우회하도록 구성할 수도 있습니다.
자동 속도 관리 (ASG) 프로세스 흐름
Spinnaker
시작 지점입니다. 개발자가 코드를 사전 프로덕션 환경에 병합합니다.
- CDN 애셋으로 사전 프로덕션 환경을 배포합니다.
- 배포가 완료되었는지 확인합니다.
- Docker 컨테이너를 실행하여 ASG 애플리케이션 빌드를 시작하거나 (배포 실패 시) 알림을 보냅니다.
Jenkins 및 Lighthouse
- Jenkins로 ASG 애플리케이션을 빌드합니다.
- Chrome 및 Lighthouse가 설치된 커스텀 Docker 컨테이너를 실행합니다.
SSG 앱에서
lighthouserc.json
를 가져와lhci autorun --collect-url=https://example.com
를 실행합니다.
Jenkins 및 SSG 앱
- lhci에서
assertion-results.json
을 추출하고budgets.json
의 사전 정의된 예산과 비교합니다. 출력을 텍스트 파일로 저장하고 나중에 비교할 수 있도록 Nexus에 업로드합니다. - 현재
assertion-results.json
를 마지막으로 성공한 빌드(Nexus에서 다운로드)와 비교하고 텍스트 파일로 저장합니다. - 성공 또는 실패 정보가 포함된 HTML 이메일을 빌드합니다.
- Jenkins를 사용하여 관련 메일링 리스트에 이메일을 전송합니다.