Yoast.com의 웹샵을 EDD에서 WooCommerce로 마이그레이션
게시 됨: 2018-02-27Yoast에서는 웹사이트 성능의 모든 측면을 최적화합니다. 우리의 목표는 웹사이트를 더 유용하고, 더 쉽게 탐색하고, 더 빠르고, 더 안정적으로 만들어 웹을 더 나은 곳으로 만드는 것입니다.
2017년 9월에 EDD(Easy Digital Downloads)에서 WooCommerce로 웹샵을 마이그레이션했습니다. 여기에서 yoast.com에서 사용할 수 있는 모든 도구, 제품 및 콘텐츠를 판매합니다. 이 게시물에서는 우리가 왜 그렇게 했는지, 무엇을 만들었는지, 그리고 앞으로 우리와 사용자에게 어떤 이점이 있는지 설명하겠습니다. WooCommerce는 앞으로 몇 년 동안 구축할 수 있는 기술 기반을 제공했습니다.
변경 이유는 무엇입니까?
Yoast.com은 플러그인의 인기와 SEO 블로그의 확대되는 청중이라는 두 가지 주요 구성 요소로 인해 놀라운 성장을 경험하고 있습니다. 그러나 이 두 요소의 조합으로 인해 yoast.com은 관리하기 어려운 웹사이트가 되었습니다.
역사적으로 이 사이트는 단순한 WordPress 설치에서 발전했습니다. Easy Digital Downloads(EDD)는 Yoast 설립자 Joost de Valk가 프리미엄 플러그인 판매를 용이하게 하기 위해 추가했습니다. 또한 EDD를 사용하여 전 세계의 모든 Premium 설치에 대한 업데이트를 제공했습니다.
수년에 걸쳐 우리는 EDD가 여전히 우리의 요구를 충족할 수 있도록 더 많은 조정을 했습니다. 예를 들어 고객이 유로나 달러로 결제할 수 있도록 하는 것은 엄청난 노력이었습니다. 앞으로 다른 통화를 추가하고 싶었기 때문에 다른 솔루션을 찾아야 했습니다.
다른 옵션을 조사할 때 다음과 같은 몇 가지 요구 사항을 고려했습니다.
- 다중 통화 구매를 지원할 수 있습니다.
- 반복 지불을 지원할 수 있습니다.
- 통합 구축 비용 및 플랫폼의 유지 관리 용이성.
- 사용자 계정을 지원할 수 있습니다.
- SEO 플랫폼을 만듭니다.
- 우리는 5-10년 후에도 여전히 작동할 사이트를 갖고 싶기 때문에 미래의 호환성을 고려합니다.
위의 모든 것을 달성하기 위해 우리는 계획을 세워야 했습니다.
관념화
2017년 1월에 우리는 Joost, Omar, Jip 및 저와 같은 건축가 팀과의 회의를 예약했습니다. 우리는 우리의 필요 사항이 무엇이고 어떻게 하면 가장 잘 충족할 수 있는지 논의했습니다.
첫 번째 결론은 WordPress에서 벗어나고 싶지 않다는 것입니다. 이제 다른 플랫폼용 플러그인이 있지만 우리는 WordPress 팬이며 그 사명에 깊은 관심을 가지고 있습니다. WordPress는 우리의 뿌리이며 CMS로서 우리에게 매우 효과적이었습니다.
왜 우커머스인가?
그런 다음 사용할 전자 상거래 플랫폼을 고려했습니다. WordPress를 위한 최고의 전자 상거래 솔루션이 무엇인지 스스로에게 물었고 그것이 WooCommerce라는 결론에 도달했습니다. 그러나 EDD와 마찬가지로 WooCommerce는 여러 통화를 지원하지 않았습니다. 그래서 우리는 해결책이 필요했습니다.
나는 모든 것이 리믹스라는 생각의 열렬한 팬입니다. 우리는 MultilingualPress 플러그인에 의해 잘 실행된 아이디어인 각 언어에 대해 다른 사이트를 사용한다는 아이디어에서 영감을 받았습니다. 그래서 우리는 그것을 다시 혼합했습니다. 수많은 사용자 정의 코드를 작성하지 않기 위해 다중 사이트 설치를 사용하기로 결정했습니다.
결과적으로 WooCommerce는 다른 통화를 관리할 필요가 없습니다. 달러 사이트에서 WooCommerce는 모든 것을 달러로 처리합니다. 유로 사이트에서 WooCommerce는 모든 것을 유로로 처리합니다. 이것은 또한 새로운 통화를 추가하는 것을 비교적 쉽게 만듭니다. 새 사이트를 추가하고 설정을 복사하기만 하면 됩니다. MultilingualPress와 함께 향후에는 다양한 언어를 지원할 수도 있습니다.
WooCommerce는 여러 가지 이유로 yoast.com에 매우 적합했습니다.
- 좋은 데이터 모델입니다.
- 거대한 생태계.
- 내장 REST API 및 Webhook 지원.
- WooCommerce와 함께 플러그인을 dogfood할 수 있는 가능성.
- WooCommerce는 전자 상거래 영역을 해결합니다. 우리는 전자 상거래 도메인에서 작업하는 데 많은 시간을 보내고 싶지 않았습니다. SEO는 우리의 전문 기술이므로 SEO에 중점을 두고자 합니다.
- WooCommerce에는 우리가 참여할 수 있는 활기찬 커뮤니티가 있습니다.
전자 상거래: SKU, 기록 기록 및 환불
잠시 전자 상거래 도메인에 집중하고 싶습니다. 여기서 고려해야 할 한 가지 측면은 SKU입니다. 모든 제품에는 고유 식별자인 SKU가 있습니다. SKU는 불필요한 것처럼 들릴 수 있습니다. 데이터베이스에 ID가 있는데 SKU가 필요한 이유는 무엇입니까? 그러나 모든 회사의 모든 재무 부서가 이미 이 시스템을 갖추고 있다는 것을 알게 됩니다. SKU는 자동으로 증가하지 않습니다. 명확한 방식으로 제품을 추적하는 방법이 필요합니다. 이름은 이에 적합하지 않습니다. 따라서 yoast.com에서 SKU는 이제 재무 부서에서 제품을 추적하는 데 사용하는 것과 동일한 번호입니다.
또 다른 요구 사항은 모든 구매에 대한 내역 기록을 보유하는 것이었습니다. WooCommerce는 기본적으로 이 작업을 수행합니다. 주문이 완료되면 끝입니다. 모든 데이터는 변경할 수 없습니다. 고객이 이름, 주소 또는 이메일을 변경하는 경우 새 정보는 새 주문에만 사용됩니다. 개발자에게 이것은 이상하게 들릴지 모르지만 실제로는 강점입니다. 당신은 은행이 거래를 변경하는 것을 원하지 않을 것입니다. 일단 거래가 완료되면 거래가 완료됩니다. 모든 돌연변이는 새로운 트랜잭션입니다.
환불과 관련하여 역사적 기록이 가장 큰 차이를 만듭니다. 이전 설정에서는 환불된 주문이 수출에서 사라지고 해당 월의 수익이 변경됩니다. WooCommerce에서 모든 환불에는 고유한 날짜와 금액이 있습니다. 그래서 한 달에 한 번이면 정말 끝입니다.
WooCommerce에서 모든 환불에는 고유한 날짜와 금액이 있습니다. 그래서 한 달에 한 번이면 정말 끝입니다.
Yoast.com을 WooCommerce로 마이그레이션하는 기술 세부 정보
이주
과거 데이터가 많기 때문에 많은 주문을 마이그레이션해야 했습니다. 우리는 대규모 데이터 세트를 처리하도록 설계된 도구인 pandas라는 도구를 선택했으며 한 번에 마이그레이션하기에 좋은 선택입니다. 다른 마이그레이션을 계획했다면 아마도 다른 방향으로 갈 것입니다. 몇 달에 걸쳐 기록 데이터의 형식을 천천히 지정할 것입니다. 그러면 실제 이동 당일에 마이그레이션할 데이터 양이 크게 줄어듭니다.
프로세스를 필요 이상으로 복잡하게 만드는 한 가지 주요 문제점이 있었습니다. 모든 데이터가 데이터베이스의 하나의 메타 값에 저장되었기 때문에 직렬화 해제가 필요했습니다. Python에는 PHP 직렬화 해제를 수행하는 효율적이고 올바른 방법이 없기 때문에 이 데이터를 직렬화 해제할 수 있도록 PHP를 사용하게 되었습니다.
데이터 집계
이제 두 개의 사이트가 있다는 것을 눈치채셨을 것입니다. 그러나 우리는 여전히 한 위치에서 모든 데이터에 대한 개요를 갖고 싶어합니다. 이것이 우리가 MyYoast를 구축하는 이유 중 하나입니다. 접수된 모든 주문은 MyYoast에 동기화됩니다. 이것은 MyYoast가 모든 것을 알고 있음을 의미합니다.
WooCommerce에는 모든 주문을 동기화하는 시스템인 웹훅이 있습니다. 일반적으로 Webhook의 가장 큰 단점은 수신 시스템이 다운되면 Webhook이 수신되지 않는다는 것입니다. 웹훅의 코드를 보면 다음 스니펫을 찾을 수 있습니다.
"`
/*
* Rabbit/zeromq와 같은 일부 메시지 대기열에 대해 다른 플러그인이 배달을 가로채도록 합니다.
*/
return apply_filters( 'woocommerce_webhook_should_deliver', $should_deliver, $this, $arg );
"`
우리는 주석에서 제안한 대로 메시지 대기열을 사용하는 것을 고려했지만 더 간단한 접근 방식을 사용했습니다.
Ruby on Rails 커뮤니티의 delay_job 프로젝트가 있습니다. 우리의 요구에 맞는 PHP 포트를 찾았습니다. 지연된 작업은 이름에서 알 수 있듯이 나중에 실행되도록 작업을 예약합니다. 이것은 직업을 잃을 수 없다는 것을 의미합니다. 그리고 작업이 실패하면 4번 더 재시도됩니다. 그 후에 작업은 무엇이 잘못되었는지 디버깅하는 데 사용할 수 있습니다. 이것은 우리에게 정말 강력한 설정을 제공합니다.
웹훅을 사용자 지정 더미 URL인 `http://my-yoast-job.url`로 보내도록 WooCommerce를 구성했습니다. 이렇게 하면 코드에서 이러한 요청을 잡을 수 있습니다. 작업 예약을 담당하는 하나의 '스케줄러' 클래스가 있습니다. 웹훅 요청을 잡아서 대신 작업으로 바꿉니다.
yoast.com의 기본 빌딩 블록마다 하나씩 작업을 처리하는 여러 클래스가 있습니다. 그런 다음 백그라운드에서 작업자가 작업을 처리합니다. 이 프로세스는 빠르기 때문에 고객은 MyYoast에서 즉시 제품을 볼 수 있습니다.
애플리케이션으로서의 워드프레스
Twelve-Factor App을 읽어본 적이 없다면 읽어보길 강력히 추천합니다. 웹 애플리케이션 개발을 위한 매우 강력한 프레임워크를 제안합니다. 이것은 WordPress 컨텍스트로 어떻게 변환됩니까? 생각보다 좋습니다.
WordPress에는 설정을 더 어렵게 만드는 몇 가지 고유한 기능이 있습니다. 그러나 이러한 문제를 해결하여 강력한 WordPress 설치를 얻을 수 있습니다. 이 중 하나만 수행하는 경우 종속성 요인이 되어야 합니다. Composer 사용을 시작하세요! 여기 있고 작동합니다. Rarst는 WordPress 개발을 위해 Composer를 사용하는 방법에 대한 좋은 개요를 만들었습니다. 자동 업데이트는 복잡한 웹 응용 프로그램에 대한 옵션이 아닙니다. 따라서 다른 솔루션이 필요하며 Composer는 매우 잘 작동합니다.
성능
우리는 객체 캐시를 사용하지 않고 시작했습니다. 그것은 나쁜 생각으로 밝혀졌습니다. WooCommerce를 사용하여 상당한 양의 판매를 처리하는 경우 개체 캐싱이 필요합니다. 그것이 없으면 주문 모델은 해당 주문과 관련된 모든 요청에 대해 완전히 다시 인스턴스화해야 합니다. 많은 페이지에서 주문 모델이 필요하기 때문에 비용이 많이 듭니다. 최소한 모든 결제 페이지는 주문에 액세스할 수 있어야 합니다.
또한 캐싱 없이 성능을 개선하기 위해 WooCommerce 자체에 몇 가지 pull 요청을 만들었습니다. 그 중 하나는 통화를 캐시하는 수정 사항이었습니다. 수정 전에는 모든 통화가 코드에 하나의 통화만 필요할 때마다 번역되었습니다. 각 상점이 하나의 통화로만 운영된다는 점을 고려하면 이는 매우 비효율적입니다.
WooCommerce 자체에서 간단히 고칠 수 없는 한 가지는 주문 및 구독을 검색하는 것이었습니다. 이렇게 하면 전체 웹사이트를 다운시킬 수 있는 쿼리가 생성됩니다. 이 쿼리에는 포스트 메타에 대한 많은 검색이 포함되며 시간이 오래 걸립니다. MyYoast 위에 자체 검색 기능을 구축하여 이 문제를 해결했습니다.
WooCommerce가 이미 WooCommerce 기술 로드맵에 있는 사용자 지정 테이블을 사용했다면 메타 검색 문제도 해결될 것입니다. 이 문제는 또한 우리 자신의 플러그인에 대한 우리의 생각을 알려주었습니다. Yoast SEO가 생성하는 메타 키의 양을 줄일 수 있습니까? 결과적으로 우리는 자체 기술 로드맵에 사용자 정의 테이블 생성도 추가했습니다.
WordPress 플러그인 및 WooCommerce 확장의 현재 목록
우리가 어디에 도착했는지에 대한 포괄적인 아이디어를 제공하기 위해 다음은 우리 사이트의 상점 기능과 관련하여 현재 사용하고 있는 플러그인 목록입니다. 전체 목록에는 55개의 활성 플러그인이 포함되어 있습니다.
- CMB2: 게시물 유형에 더 많은 사용자 정의 필드를 추가하는 데 사용됩니다.
- CMB2 필드 유형: 여러 게시물을 메타 값으로 첨부하는 데 사용됩니다.
- CMB2 게시물 검색 필드: 메타 값으로 첨부할 단일 게시물을 검색하는 데 사용됩니다.
- Google Authenticator: 로그인에 2FA를 추가합니다.
- Google Authenticator, 사용자별 프롬프트: 이 방법으로 모든 Yoast 직원은 2FA를 사용할 수 있지만 고객은 그럴 필요가 없습니다.
- WordPress용 MailChimp 및 WordPress용 MailChimp – Premium: MailChimp에 주문을 연결하는 데 사용됩니다.
- 구성원: 지원 엔지니어와 같은 다양한 역할에 대한 권한을 관리합니다.
- MultilingualPress: 다중 사이트에서 다른 사이트를 관리하는 데 사용됩니다.
- MyYoast 사용자 정의 로그인: 로그인 화면의 스타일을 지정합니다.
- WordPress용 New Relic Reporting: NewRelic을 사용하여 성능을 추적합니다.
- 소인: 이메일을 안정적으로 보내기 위한 것입니다.
- Romance Admin 색 구성표: 모든 사람은 자신의 삶에 약간의 분홍색이 필요합니다!
- WooCommerce: 짐작하시겠지만 yoast.com에서 주문을 처리합니다!
- Yoast SEO: WooCommerce: WooCommerce와 Yoast SEO 간의 호환성 추가.
- Yoast SEO 프리미엄: 리디렉션, 내부 링크 제안 및 여러 키워드에 사용됩니다.
WordPress 플러그인 및 WooCommerce 확장의 현재 목록
- WooCommerce – 국가 기반 결제: 다른 국가의 고객에게 다른 결제 방법을 표시하는 데 사용됩니다.
- WooCommerce AdyenCw: WooCommerce에 Adyen 결제 게이트웨이를 추가하는 데 사용됩니다.
- WooCommerce 쿠폰 링크: 특정 쿠폰을 자동으로 적용하는 링크를 생성하는 데 사용됩니다.
- WooCommerce Dynamic Pricing : 대량 구매 시 할인을 제공하는 데 사용됩니다.
- WooCommerce 이메일 사용자 정의: WooCommerce가 보내는 이메일의 스타일을 지정하는 데 사용됩니다.
- WooCommerce EU VAT 번호: 유럽 고객의 VAT 번호를 수집하고 VIES 서비스를 사용하여 번호를 확인하는 데 사용됩니다.
- WooCommerce Give Products: 제품을 제공할 때 사용합니다.
- WooCommerce PayPal Express 체크아웃 게이트웨이: WooCommerce 구독을 지원하는 WooCommerce에 PayPal 결제 게이트웨이를 추가하는 데 사용됩니다.
- WooCommerce 제품 번들: 스토어에서 번들을 생성하는 데 사용됩니다.
- WooCommerce 구독: 플러그인 지원 및 업데이트에 남은 시간을 추적하는 데 사용됩니다.
요점 및 결과
우리는 2017년 8월 29일에 이 새로운 플랫폼을 출시했습니다. 그 후 몇 주 동안 사이트 성능이 크게 향상되었습니다. 우리는 우리가 달성하고 싶었던 모든 목표를 달성했습니다. 마이그레이션 이후 우리는 다른 많은 것들을 구축하기 시작했습니다. 이제 지원 팀에서 훨씬 쉽게 계정을 환불하고 이전할 수 있습니다. Yoast 아카데미를 다중 사이트로 마이그레이션했습니다. 2018년에는 다음과 같은 흥미로운 계획이 많이 있습니다.
- 영국 파운드로 판매하는 상점을 추가합니다. 과거의 선택과 WooCommerce로의 이동 덕분에 하루 만에 이 작업을 수행할 수 있으며 추가 코드가 거의 필요하지 않습니다. 영업 팀을 위한 영업 대시보드를 추가합니다.
- 영업 팀을 위한 영업 대시보드를 추가합니다.
- 프리미엄 플러그인에 Composer 지원 추가.
WooCommerce는 Yoast가 향후 10년 동안 플랫폼을 구축하고 개선할 수 있는 기술적 기반을 제공했습니다. 기존 웹샵을 다른 플랫폼으로 마이그레이션하는 것을 고려하고 있습니까? 당신은 이미 이것을 했습니까? 의견에 경험을 공유하십시오.