WooCommerce 연동 가이드
이 가이드는 WooCommerce 스토어를 Tajo에 연결하는 방법을 안내합니다. 이 연동은 함께 동작하는 두 부분으로 이루어집니다.
- Tajo for WooCommerce 플러그인: WordPress 안에서 실시간 인게이지먼트 이벤트(주문, 장바구니, 환불, 리뷰, 폼 제출)를 수집해 내구성 있는 서명 아웃박스를 통해 Tajo로 전송합니다.
- WooCommerce REST 연결: Tajo가 스토어의 고객, 주문, 상품, 쿠폰, 환불, 리뷰를 읽어 과거 데이터 임포트와 지속적인 동기화를 수행합니다. REST 전용 설정은 WooCommerce 커넥터 레퍼런스를 참고하세요.
마케팅 자동화 자체(Brevo 및 기타 제공업체를 통한 이메일, SMS, WhatsApp)는 플러그인이 아니라 Tajo에서 설정합니다. 플러그인의 역할은 신뢰할 수 있는 이벤트를 WordPress 밖으로 내보내는 것입니다.
사전 준비 사항
- 관리자 권한이 있는 WordPress 6.3 이상
- PHP 7.4 이상
- WooCommerce 7.0 이상 (플러그인은 WooCommerce가 없는 WordPress 사이트에서도 동작하며, 이 경우 커머스 어댑터가 비활성 상태로 유지됩니다)
- WordPress 연결이 생성된 Tajo 계정
- Tajo 엔드포인트의 HTTPS (호스팅형 Tajo에서는 항상 충족됩니다)
1단계: Tajo for WooCommerce 플러그인 설치
수동 설치
# Download the plugincd wp-content/pluginswget https://tajo.io/downloads/woocommerce/tajo-woocommerce-latest.zip
# Verify and unzipunzip tajo-woocommerce-latest.zip그런 다음 WordPress 관리자에서 활성화합니다.
- Plugins → Installed Plugins로 이동합니다
- “Tajo for WooCommerce”를 찾습니다
- Activate를 클릭합니다
zip 파일을 Plugins → Add New → Upload Plugin에서 직접 업로드할 수도 있습니다. 릴리스마다 SHA-256 체크섬이 tajo.io/downloads/woocommerce/에 함께 게시됩니다. 이 플러그인은 아직 WordPress.org 디렉터리에 등재되어 있지 않으며, 현재 지원되는 방식은 수동 설치입니다.
2단계: 연결 설정
WooCommerce → Tajo(WooCommerce가 없는 사이트에서는 Settings → Tajo)로 이동해 Tajo WordPress 연결에서 확인한 세 가지 값을 입력합니다.
| 항목 | 값 |
|---|---|
| Tajo 엔드포인트 | Tajo에 표시되는 HTTPS 웹훅 URL. 예: https://alto.tajo.io/api/connectors/wordpress/webhooks/engagement |
| 바인딩 ID | Tajo에서 확인한 연결의 바인딩 ID |
| 서명 시크릿 | 공유 시크릿(32~256자). 플러그인이 활성화 시 강력한 로컬 시크릿을 생성합니다. 이 값을 Tajo에 붙여넣거나, Tajo의 시크릿을 여기에 붙여넣으세요 |
wp-config.php에 추가해야 할 API 키 상수는 없습니다. 세 값이 모두 저장될 때까지 이벤트는 로컬 아웃박스에 안전하게 대기합니다.
그런 다음 전체 경로를 끝까지 검증합니다.
- Queue test event를 클릭한 뒤 Process now를 클릭합니다.
- 전송 아웃박스 테이블에 해당 이벤트가 전송 완료로 표시되어야 합니다.
- Tajo에서
connection.test이벤트가 WordPress 연결로 도착했는지 확인합니다.
플러그인이 보내는 데이터
모든 이벤트는 HMAC-SHA256으로 서명된, 간결하고 개인정보를 최소화한 봉투입니다. WordPress를 벗어나는 것은 인게이지먼트 식별 필드(이메일, 전화번호, 로컬 ID)와 제한된 이벤트 메타데이터뿐이며, 이름, 우편 주소, IP 주소, 사용자 에이전트, 댓글 본문, 임의의 폼 필드, 주문 메모, 결제 정보는 전송되지 않습니다.
WooCommerce 이벤트
| 훅 | 이벤트 |
|---|---|
woocommerce_created_customer / woocommerce_update_customer | customer.created / customer.updated |
woocommerce_new_product / woocommerce_update_product | product.created / product.updated |
woocommerce_add_to_cart, 상품 삭제, 쿠폰 적용/해제 | cart.updated (이탈 플로우를 위한 장바구니 요약 포함) |
woocommerce_cart_emptied | cart.emptied |
woocommerce_new_order / woocommerce_update_order | order.placed / order.updated |
woocommerce_order_status_changed | order.status_changed (완료 시 order.fulfilled 추가) |
woocommerce_payment_complete | order.paid |
woocommerce_order_refunded | refund.created |
| WooCommerce Subscriptions 상태 업데이트 | subscription.status_changed |
주문 이벤트에는 주문 번호, 상태, 통화, 합계, 라인 아이템, 그리고 바로 사용할 수 있는 리뷰/재주문 URL이 담깁니다. 추가 API 호출 없이도 구매 후 자동화와 윈백 자동화를 구성하기에 충분합니다.
WordPress 이벤트
- 사용자 계정에 대한
contact.created/contact.updated/contact.deleted - 공개 콘텐츠에 대한
content.published/content.updated/content.unpublished - 방문자 댓글과 상품 리뷰에 대한
comment.created/comment.status_changed(WooCommerce 내부 주문 메모, 핑백, 트랙백은 발행되지 않습니다) - Contact Form 7, WPForms, Gravity Forms, Fluent Forms 제출이 성공했을 때의
form.submitted. 타입이 지정된 이메일/전화번호 식별 필드와 폼 메타데이터만 추출하며, 임의로 제출된 필드는 폐기합니다
안정성: 전송 아웃박스
플러그인은 페이지 로드 중에 Tajo로 이벤트를 직접 쏘지 않습니다. 모든 이벤트는 먼저 로컬 아웃박스 테이블에 기록되고, 이후 WP-Cron이 다음 방식으로 전송합니다.
- 상한이 있는 지수 백오프(최대 8회 시도,
Retry-After준수) - 관리자 화면에서 클릭 한 번으로 실행하는 Replay dead letters와 데드 레터 처리
- 도달할 수 없는 엔드포인트가 개인 데이터를 쌓아두지 못하도록 하는 보관 기한(전송 완료: 7일, 대기: 30일, 데드 레터: 마지막 갱신 후 30일)
- 멱등 이벤트 ID를 사용하므로 재시도와 재전송이 다운스트림에서 중복되지 않습니다
호스트가 WP-Cron을 비활성화한 경우(DISABLE_WP_CRON), 실제 스케줄러에서 wp-cron.php를 최소 1분에 한 번 호출하세요.
동의는 절대 추론하지 않습니다
계정 생성, checkout, 구매, 일반적인 폼 제출은 마케팅 동의로 취급하지 않습니다. 기본 제공 이벤트는 빈 동의 목록을 담고 있습니다. 명시적 동의(예: 뉴스레터 체크박스 선택)를 기록하려면 확장 훅으로 발행하세요.
do_action( 'tajo_engagement_emit', 'consent.updated', array( 'email' => $email ), array( 'policyVersion' => '2026-07' ), array( array( 'channel' => 'email', 'status' => 'opt_in', // or 'opt_out' 'purpose' => 'marketing', 'source' => 'newsletter_checkbox', 'evidence' => array( 'formId' => 'newsletter-footer', 'field' => 'marketing_email' ), ), ), gmdate( 'c' ));같은 훅으로 어떤 플러그인이나 테마도 맞춤 이벤트를 발행할 수 있으며, 모두 동일한 정제기, 아웃박스, 서명을 거칩니다.
3단계: 과거 데이터 임포트
실시간 이벤트는 설치 시점 이후의 모든 것을 다룹니다. 플러그인 설치 이전의 이력은 Tajo의 WooCommerce REST 연결이 기존 고객, 주문, 상품, 쿠폰, 환불, 리뷰를 임포트하며, 설정은 전적으로 Tajo 쪽에서 WooCommerce REST API 키(WooCommerce → Settings → Advanced → REST API, 읽기 권한)로 진행합니다. 자세한 내용은 WooCommerce 커넥터 레퍼런스를 참고하세요.
개인정보 보호와 GDPR
- 플러그인은 WordPress Tools → Export Personal Data 및 Tools → Erase Personal Data에 등록되며, 일치하는 이메일에 대해 보관 중인 아웃박스 이벤트를 로컬에서 내보내거나 삭제합니다.
- 삭제와 전송은 fail-closed 뮤텍스를 공유하므로, 페이로드가 전송되는 중에 삭제가 완료로 보고되는 일은 결코 없습니다.
- 로컬 삭제는 WordPress 아웃박스만 대상으로 합니다. 다운스트림 데이터는 Tajo에서 해당 요청을 제출하세요.
- 비활성화하면 전송이 일시 중지되지만 설정과 대기 중인 이벤트는 유지됩니다. 플러그인을 삭제하면 아웃박스, 설정, 시크릿, 스케줄이 영구적으로 제거됩니다.
호환성
- HPOS: 플러그인은 WooCommerce High-Performance Order Storage 호환성을 선언하며 CRUD 객체와 공개 훅만 사용합니다.
- WooCommerce Subscriptions: 이 확장이 활성화되어 있으면 구독 상태 변경을 수집합니다.
- 멀티사이트: 삭제 시 네트워크의 모든 사이트를 정리합니다.
운영 레퍼런스
서버 간 탐색과 아웃박스 제어는 Application Password 인증을 통해 관리자에게 제공됩니다.
| 메서드 | 라우트 | 용도 |
|---|---|---|
GET | /wp-json/tajo/v1/capabilities | 플러그인 버전, 감지된 어댑터, 이벤트 목록, 아웃박스 상태 |
GET | /wp-json/tajo/v1/outbox | 아웃박스 건수 (페이로드는 노출되지 않습니다) |
POST | /wp-json/tajo/v1/outbox/process | 배치를 즉시 처리 |
POST | /wp-json/tajo/v1/outbox/replay | 데드 레터 재전송 |
문제 해결
| 증상 | 원인 및 해결 |
|---|---|
| 이벤트가 “Queued” 상태에 머무름 | 엔드포인트, 바인딩 ID, 시크릿 중 아직 저장되지 않은 값이 있습니다. 세 값이 모두 설정될 때까지 전송이 일시 중지됩니다 |
| 이벤트가 “Retrying” 상태에 머무름 | 호스트에서 Tajo 엔드포인트에 도달할 수 없거나 WP-Cron이 실행되지 않고 있습니다. 아웃박스 테이블의 오류 열과 cron 설정을 확인하세요 |
| 데드 레터가 쌓임 | 재시도할 수 없는 오류입니다(대개 잘못된 바인딩 ID 또는 시크릿). 설정을 수정한 뒤 Replay dead letters를 실행하세요 |
| ”Enter a valid HTTPS Tajo webhook endpoint” | 엔드포인트는 자격 증명이 포함되지 않은 HTTPS여야 합니다 |
| 테스트 이벤트는 전송되었는데 Tajo에 아무것도 없음 | 엔드포인트가 속한 Tajo 워크스페이스/연결과 동일한 곳의 바인딩 ID를 붙여넣었는지 확인하세요 |
다음 단계
- WooCommerce 커넥터 레퍼런스: REST 동기화, 웹훅 서명 상세, 설정 키
- 고객 동기화: WooCommerce 고객을 기준 시스템에 매핑하기
cart.updated,order.placed,order.fulfilled이벤트를 사용해 Tajo에서 장바구니 이탈, 구매 후, 윈백 자동화를 설정하세요