Saleor App 한계와 제약

App으로 할 수 없는 것을 명확히 하면, 코어 수정이 필요한 경계를 판단할 수 있다.

하드코딩된 제약

  1. Staff metadata 뮤테이션 불가 — App이 MANAGE_STAFF 필요한 metadata 뮤테이션을 시도하면 PermissionDenied 발생 (코드에 하드코딩)
  2. 동일 ID 중복 설치 불가App.objects.filter(identifier=...) 체크
  3. Extension 권한은 App 권한의 부분집합 — 넘으면 OUT_OF_SCOPE_PERMISSION 에러
  4. requiredSaleorVersion 불일치 시 설치 거부

구조적 한계 (App으로 해결 불가)

한계설명대안
외부 인증OAuth/SSO 통합은 Plugin만 가능Plugin 유지 또는 코어 수정
GraphQL 스키마 확장커스텀 필드/타입 추가 불가코어 포크
DB 모델 확장커스텀 컬럼 추가 불가Metadata로 우회 또는 코어 포크
Checkout 흐름 변경단계 추가/삭제/순서 변경 불가Webhook + 프론트엔드에서 제어
주문 상태 커스텀OrderStatus enum 변경 불가Metadata로 부가 상태 관리
고객 채널 격리User 모델에 채널 FK 없음App 레벨 필터링 또는 코어 수정

Metadata 우회 패턴의 한계

Metadata로 “커스텀 필드”를 흉내낼 수 있지만:

  • private_metadata필터링 불가
  • value는 String 타입만 지원 (JSON은 stringify 필요)
  • DB 레벨 제약(unique, foreign key 등) 불가
  • 대량 데이터 시 GIN 인덱스 효율 저하

관련: Saleor App Manifest 스펙, Saleor Extension Surface 개요