동적 테이블
별도 DB 없이 앱 전용 테이블을 만들고, 행을 CRUD하고, 데이터 API로 읽고 쓰는 방법이에요.
동적 테이블은 앱 전용 데이터 저장소예요. 외부 DB를 따로 붙이지 않아도 표(테이블)를 만들고 행을 추가·조회·수정·삭제할 수 있어요. AxHub가 앱마다 격리된 PostgreSQL 스키마로 관리해 줘요.
테이블 만들기
CLI로 컬럼을 지정해 만들어요. 명령은 기본이 미리보기(dry-run)라, 실제로 만들 땐 --execute를 붙여요.
axhub tables create orders --app demo \
--column 'title:text' \
--column 'qty:int' \
--column 'done:bool' \
--execute컬럼은 이름:타입[:nullable][:default] 형식이에요. 쓸 수 있는 타입은 8가지예요.
| 타입 | 설명 |
|---|---|
text | 문자열 |
int · bigint | 정수 |
float | 실수 |
bool | 참/거짓 |
timestamptz | 시각(타임존 포함) |
uuid | UUID |
jsonb | JSON |
컬럼이 많으면 --schema table.yaml로 스키마 파일을 넘길 수도 있어요. 행의 소유자를 구분하려면 --owner-column <컬럼>을 지정하면 돼요.
데이터 다루기
행 추가·조회·수정·삭제도 CLI로 해요. 추가·수정·삭제는 --execute가 필요해요.
axhub data insert orders --app demo --body '{"title":"첫 주문","qty":2}' --execute
axhub data list orders --app demo
axhub data get orders <row-id> --app demo
axhub data count orders --app demo
axhub data update orders <row-id> --app demo --body '{"done":true}' --execute
axhub data delete orders <row-id> --app demo --execute여러 행을 한 번에 넣을 땐 --batch rows.jsonl(한 줄에 JSON 하나)을 써요.
데이터 API
테이블 데이터를 코드에서 다루는 방법은 두 가지예요.
① 앱 안에서 — SDK (권장) · 로그인한 사용자 자격으로 가장 간단해요. 자세히는 SDK로 백엔드 호출하기.
const app = await makeApp(); // 템플릿 제공 헬퍼
const todos = await app.data.discover<{ id: string; title: string; done: boolean }>('todos');
await todos.list({ limit: 20 });
await todos.insert({ title: '할 일', done: false });② 외부에서 — HTTP API + PAT · 에이전트·CI·서버-투-서버처럼 앱 밖에서 호출할 땐 HTTP로 직접 써요. 경로는 /data/{tenant}/{app}/{table}.
| 메서드 · 경로 | 하는 일 |
|---|---|
GET /data/{tenant}/{app}/{table} | 목록 |
GET …/{table}/_count | 개수 |
GET …/{table}/{id} | 단건 조회 |
POST …/{table} | 추가 |
PATCH …/{table}/{id} | 수정 |
DELETE …/{table}/{id} | 삭제 |
const base = `https://api.axhub.ai/data/${tenant}/${app}/orders`;
const headers = { 'X-Api-Key': process.env.AXHUB_API_KEY, 'Content-Type': 'application/json' };
const rows = await fetch(base, { headers }).then((r) => r.json()); // 목록
await fetch(base, { method: 'POST', headers, body: JSON.stringify({ title: '첫 주문', qty: 2 }) }); // 추가PAT(개인 액세스 토큰)는 코드에 박지 말고 환경변수에 runtime secret으로 두고 서버에서 읽으세요. 테이블을 만들고 관리하는 일(DDL)은 PAT가 아니라 로그인(OAuth)으로 해요.
다른 앱에 공유하기
기본적으로 테이블은 만든 앱만 접근해요. 다른 앱이나 주체에게 읽기/쓰기를 열어주려면 table grant를 줘요.
axhub tables grants list --app demo자세한 엔드포인트·쿼리·권한·인증은 데이터 API를 보세요.