데이터베이스 모델
스튜디오가 데이터를 어디에 무슨 모양으로 담는지 정리한 문서입니다. 백업 범위를 정하거나 직접 조회해야 할 때 봅니다.
PostgreSQL 에 메타데이터가 들어가고, 파일 시스템(DATA_ROOT)에 앱 소스와 빌드
산출물이 들어갑니다. 둘 다 받아야 복구됩니다 — DB 만 받으면 앱 코드가 없고, 파일만
받으면 누가 무엇을 만들었는지가 없습니다.
| 저장소 | 담는 것 |
|---|---|
| PostgreSQL | 사용자·앱 메타·대화·감사·와처·스킬 |
파일 시스템 (DATA_ROOT) | 워크스페이스(앱 소스) · 빌드 산출물 · 상태 |
PostgreSQL 은 두 모드 중 하나입니다 — 번들 컨테이너(기본) 또는 플랫폼 공용 PG. 환경 변수 레퍼런스 를 보세요.
테이블 — 11개
| 묶음 | 테이블 | 담는 것 |
|---|---|---|
| 사용자 | studio_users | 계정·역할(admin/builder/viewer)·비밀번호 해시 |
studio_tokens | 발급 토큰 | |
| 대화 | ask_conversations | 채팅 스레드 |
ask_history | 주고받은 메시지와 소요 시간 | |
| 와처 | watchers | 주기 감시 정의와 알림 설정 |
notification_seen | 알림 확인 여부 | |
| 스킬 | skills | 현장 노하우 등록본 |
| 배포 | deploy_log | 배포 이력 |
| 감사·사용량 | audit_log | 누가 무엇을 했는가 |
usage_log | AI 토큰 사용량 | |
| 스키마 | schema_migrations | 적용된 마이그레이션 이름과 시각 |
watchers 는 예전에 flows 였습니다2026-07-13 에 이름을 통일했습니다(ALTER TABLE flows RENAME TO watchers, 데이터 보존).
신규 설치도 flows 로 만든 뒤 리네임하는 순서를 그대로 밟습니다 — 마이그레이션 이력은
과거 기록이라 바꾸지 않기 때문입니다. 직접 쿼리를 쓴다면 watchers 입니다.
스키마 변경은 마이그레이션이 관리합니다
서버가 기동할 때 src/infra/db/migrations/ 의 .sql 을 번호 순으로 적용하고, 적용한
파일 이름을 schema_migrations 에 남깁니다. 이미 적용된 것은 다시 돌지 않습니다.
-- 지금 어디까지 적용됐는지
SELECT name, applied_at FROM schema_migrations ORDER BY name;
schema_migrations 와 실제 스키마가 어긋나면, 다음 업그레이드에서 마이그레이션이
「이미 있는 것을 만들려다」 실패합니다. 화면 기동이 통째로 막힙니다.
업그레이드 전에는 백업을 먼저 받으세요 → 백업과 복구.
파일 시스템 — DATA_ROOT
기본값은 /var/lib/pp-studio 입니다. 아래가 전부 이 안에 들어갑니다.
| 담기는 것 | 없으면 |
|---|---|
| 앱 워크스페이스(생성된 소스) | 앱을 열 수 없습니다 — DB 에는 메타만 있습니다 |
| 빌드 산출물 | 다시 빌드하면 됩니다 |
| 세션·상태 | 진행 중이던 작업이 사라집니다 |
| 번들 PG 데이터 | COMPOSE_PROFILES=bundled-pg 인 설치에서는 DB 본체가 여기 있습니다 |
DATA_ROOT 가 곧 DB 백업입니다번들 모드에서는 PostgreSQL 데이터 디렉터리도 DATA_ROOT 아래입니다. 즉 이 경로 하나를
빠뜨리면 DB 와 앱 소스를 동시에 잃습니다.
백업에서 놓치기 쉬운 것
| 받아야 할 것 | 빠뜨리면 |
|---|---|
| PostgreSQL 덤프 | 계정·와처·대화·감사 기록이 사라진다 |
DATA_ROOT | 앱 소스가 사라져 앱을 열 수 없다 |
/etc/kopens/plantpulse-studio.env | 접속 정보·키를 다시 채워 넣어야 한다 |
백업만 있고 복구를 해 본 적이 없는 상태가 가장 위험합니다. 절차는 백업과 복구 에 있습니다.
관련 문서
- 백업과 복구
- 환경 변수 레퍼런스 — DB 모드와
DATA_ROOT - 비밀번호 · API 키 변경 —
PG_PASSWORD회전 - 초기 비밀번호 변경 — 부트스트랩 관리자 계정