Laravel로 멀티 벤더 마켓플레이스 구축하는 방법

마켓플레이스를 구축하는 것은 데이터 문제입니다.

대부분의 개발자는 판매자 대시보드를 만드는 것이 가장 어렵다고 생각합니다. 하지만 그렇지 않습니다. 진짜 과제는 멀티 테넌시(multi-tenancy)입니다. 모든 쿼리가 단 하나의 질문에 답할 수 있도록 보장해야 합니다: "이 데이터의 소유자는 누구인가?"

일반적인 쇼핑몰을 먼저 구축한 뒤 나중에 벤더를 추가하려고 하면, 코드를 처음부터 다시 작성해야 하는 상황에 직면하게 됩니다. 모든 모델, 모든 쿼리, 모든 장바구니에 벤더 ID를 일일이 연결해야 하기 때문입니다. 만약 필터 하나라도 놓치면, 한 판매자가 다른 판매자의 주문을 보게 됩니다. 이는 데이터 유출입니다.

당신에게는 세 가지 선택지가 있습니다:

  • 직접 구축하기: 모든 스코핑 절(scoping clause)을 직접 작성해야 합니다. 비용이 많이 들고 위험합니다.
  • 애드온을 사용하는 싱글 테넌트 쇼핑몰: 벤더를 위해 설계되지 않은 스키마에 벤더 컬럼을 억지로 끼워 넣어야 합니다. 격리 수준이 취약할 수밖에 없습니다.
  • 멀티 테넌트 기반 사용하기: Aimeos와 같이 첫날부터 데이터 모델에 격리 기능을 내장한 패키지를 사용하세요.

Aimeos를 사용하여 단일 쇼핑몰을 마켓플레이스로 전환하는 방법은 다음과 같습니다:

1. 기반 구축하기

시작하려면 다음 명령어를 실행하세요: composer create-project aimeos/aimeos myshop

2. 멀티 벤더 모드 활성화하기

데이터베이스를 다시 작성할 필요가 없습니다. .env 파일에서 한 줄만 변경하면 됩니다: SHOP_MULTISHOP=true

이 플래그는 모든 라우트, API, 관리자 패널을 특정 사이트로 자동 스코핑합니다. 시스템이 데이터 분리를 대신 처리해 줍니다.

3. 셀프 서비스 온보딩 활성화하기

규모를 확장하려면 판매자가 직접 가입할 수 있도록 하세요. .env에 다음을 추가합니다: SHOP_REGISTRATION=true

새로운 판매자는 자신의 카탈로그, 주문, 고객 정보에만 접근할 수 있습니다. 그 외의 다른 정보는 볼 수 없습니다.

작동 원리:

Aimeos는 모든 것을 "사이트(site)" 중심으로 구성합니다. 모든 제품, 가격, 주문에는 사이트 ID가 포함됩니다. 데이터 레이어에서 이를 자동으로 필터링합니다. 시스템이 알아서 처리해주기 때문에 직접 where site_id = ?를 작성할 필요가 없습니다.

이 접근 방식은 세 가지 주요 문제를 해결합니다:

  • 보안: 데이터 격리가 코드의 일부가 아닌 데이터베이스 자체의 속성이 됩니다. 따라서 코드를 작성하다 실수로 누락할 일이 없습니다.
  • 복잡성: 스키마를 변경하지 않고도 판매자가 구독이나 번들 같은 복잡한 상품을 관리할 수 있습니다.
  • 결제: Stripe와 같은 확장 기능을 사용하여 결제 금액을 즉시 분할할 수 있습니다. 플랫폼은 수수료를 가져가고 판매자는 나머지를 받습니다.

배관 작업(plumbing)은 그만하세요. 이제 진짜 마켓플레이스를 구축하기 시작하세요.

Source: https://dev.to/aimeos/how-to-implement-a-multi-vendor-e-commerce-marketplace-397a