Saleor App 한계와 제약
App으로 할 수 없는 것을 명확히 하면, 코어 수정이 필요한 경계를 판단할 수 있다.
하드코딩된 제약
- Staff metadata 뮤테이션 불가 — App이
MANAGE_STAFF필요한 metadata 뮤테이션을 시도하면PermissionDenied발생 (코드에 하드코딩) - 동일 ID 중복 설치 불가 —
App.objects.filter(identifier=...)체크 - Extension 권한은 App 권한의 부분집합 — 넘으면
OUT_OF_SCOPE_PERMISSION에러 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 인덱스 효율 저하