OsWL 애플리케이션 데이터는 PostgreSQL(prod) 또는 H2 파일 모드(local)에 저장됩니다. domain/entity/ 아래 JPA 엔티티가 실제 스키마의 기준입니다.
| 프로파일 | ddl-auto |
의미 |
|---|---|---|
local |
update |
엔티티 변경 시 H2 스키마가 자동 반영 |
prod |
validate |
PostgreSQL이 엔티티와 다르면 기동 실패 — 자동 마이그레이션 없음 |
test |
create-drop |
테스트마다 메모리 스키마 재생성 |
운영 DB를 업그레이드할 때는 새 버전으로 재기동하기 전에 src/main/resources/db/ SQL을 적용합니다.
| 파일 | 용도 |
|---|---|
project_members.sql |
프로젝트 ACL용 project_members 생성 |
instance_setup_lock.sql |
설정 마법사 잠금 테이블 |
ai_enhancement.sql |
AI 설정 컬럼, ai_daily_usage 테이블 |
schema_cleanup.sql |
1회 정리: 미사용 테이블/컬럼 제거 (아래 참고) |
PostgreSQL에 psql, DBeaver, CI 마이그레이션 등으로 실행합니다. 가능한 곳은 IF EXISTS / IF NOT EXISTS를 사용합니다.
레거시 스키마를 제거한 릴리스로 올릴 때 한 번 실행:
| 제거 대상 | 이유 |
|---|---|
ai_feedback 테이블 |
JPA/UI 미연결 |
external_api_settings 테이블 |
cache_settings만 사용 |
api_keys.created_by_user_id |
미사용; 발급은 감사 로그(CLI_KEY.CREATE) |
scan_results.raw_payload, submitted_by_user_id |
미사용; 제출자는 감사 로그(SCAN.INGEST) |
project_versions.imported_at, last_updated_at |
미사용 타임스탬프 |
projects.updated_at, version, last_scanned_at |
비정규화; UI는 최신 scan_results 사용 |
운영 배포 체크리스트 §8 참고.
projects
├── project_versions
├── project_members
├── scan_results
│ └── scan_components → libraries (전역)
│ └── dependency_paths
└── api_keys
libraries (공유)
├── library_cves (CVE 연결, 심각도, CWE, AI 필드)
└── 보강을 통한 라이선스 데이터
users, role_templates, audit_logs, cache_settings, vcs_connections, …
- 프로젝트 카드 버전 / 마지막 스캔 —
projects.version이 아니라 최신scan_results에서 계산. - 보강 캐시 —
cache_settings(설정 → 캐시); OSV/deps.dev 재조회 TTL. - CWE — OSV
database_specific.cwe_ids에서library_cves에 저장.
앱 중지 후 oswl-db.mv.db(및 H2 관련 파일) 삭제 → 재기동 시 빈 DB 및 설정 마법사. local에서는 수동 SQL 불필요.
- 운영 배포 체크리스트
- 관리 — 캐시 설정
- 스캔 API 보안 — 감사 로그 기반 제출자 추적