Show HN: SnackBase – Python 팀을 위한 오픈 소스, GxP 준수 백엔드
요약
SnackBase는 GxP 준수가 필요한 멀티테넌트 제품을 위한 오픈 소스 Python 백엔드입니다. 컬렉션 중심 API를 통해 필터링, 페이지네이션, 유효성 검사가 연결된 CRUD 기능을 쉽게 배포할 수 있습니다. SQL 기반 규칙과 불변 감사 추적, 웹훅/워크플로우 자동화 엔진이 특징입니다.
핵심 포인트
- 컬렉션 단위로 CRUD API가 즉시 배포 가능합니다.
- SQL 기반의 컬렉션 규칙으로 접근 제어를 구현합니다.
- 불변(immutable) 감사 기록 및 행 수준 격리가 지원됩니다.
- 웹훅, 워크플로우 등 자동화 로직을 백엔드 코드 없이 구성할 수 있습니다.
POST /api/v1/{collection}
컬렉션 중심 API (Collection-Centric APIs)
컬렉션을 한 번 정의하고 필터링, 페이지네이션, 유효성 검사가 이미 연결된 CRUD API를 배포하세요.
SnackBase는 실질적인 제어가 필요한 멀티테넌트 제품을 위한 오픈 소스 Python 백엔드입니다. 규칙은 SQL로 컴파일되고, 감사 추적(audit trails)은 불변하며, 자동화 엔진은 백엔드 코드를 작성할 필요 없이 웹훅(webhooks), 워크플로우(workflows), 사용자 정의 엔드포인트를 처리합니다.
import { SnackBaseClient } from '@snackbase/sdk';
const sb = new SnackBaseClient({
url: 'https://api.yourapp.com',
...
POST /api/v1/{collection}
컬렉션을 한 번 정의하고 필터링, 페이지네이션, 유효성 검사가 이미 연결된 CRUD API를 배포하세요.
account_id /* 자동 스코프 (auto scoped) */
컬렉션당 하나의 물리적 테이블에 여러 테넌트 계정이 존재하며, 모든 계층에서 자동 행 수준 격리(row-level isolation)가 이루어집니다.
checksum + previous_hash
열 수준 감사 이벤트는 추적성, GxP, CFR 스타일 워크플로우를 위해 추가 전용(append-only)이며 해시 연결되어 있습니다.
list_rule: "@owns_record()"
컬렉션 규칙은 정책 코드를 작성할 필요 없이 행 수준 및 필드 수준 액세스를 위한 SQL WHERE 절로 컴파일됩니다.
trigger → condition → action
웹훅, API 정의 후크(hooks), 다단계 워크플로우, 사용자 정의 엔드포인트 — 모두 API를 통해 구성 가능하며 백엔드 코드가 필요 없습니다.
/api/v1/x/{your-slug}
쿼리, 집계 및 변환 단계를 가진 액션 파이프라인을 실행하는 서버리스(serverless)와 유사한 HTTP 엔드포인트를 정의하세요.
on_record_before_create
우선순위 순서 지정과 중단 지원 기능을 갖춘 33개 이상의 라이프사이클 이벤트가 있어 코어 로직을 포크(forking)하지 않고도 동작을 확장할 수 있습니다.
/api/v1/auth/*
실제 프로덕션 요구 사항을 위해 이메일/비밀번호, OAuth, SAML, API 키 및 다중 계정 사용자가 내장되어 있습니다.
git clone https://github.com/lalitgehani/snackbase.git
cd SnackBase && uv sync
uv run python -m snackbase init-db
uv run python -m snackbase serve --reload
SnackBase는 다음과 같은 기능을 통해 스타트업의 민첩성과 엔터프라이즈급 제어 기능을 제공합니다: 컬렉션 규칙(collection rules), 다중 계정 격리(multi-account isolation), 불변 감사 기록(immutable audit history), 그리고 웹훅(webhooks), 워크플로우(workflows), 사용자 지정 엔드포인트(custom endpoints)를 위한 내장 자동화 엔진입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 HN AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기