- database/schema/ 14개 DDL 파일 신규 생성 (운영 DB pg_dump 기반) - database/seed/ 14개 초기 데이터 파일 분리 - database/_deprecated/로 구 init.sql, auth_init.sql 이동 - database/README.md 신규 작성 (DB 아키텍처, 설치 절차) - docs/ 6개 가이드 문서 wing_auth→auth 스키마 구조로 수정 - README.md, CLAUDE.md wing 단일 DB 구조 반영 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
107 lines
4.1 KiB
Markdown
107 lines
4.1 KiB
Markdown
# WING-OPS Database
|
|
|
|
## 아키텍처
|
|
|
|
wing 단일 DB에 3개 스키마로 구성. `search_path = wing, auth, public` 설정으로 스키마 접두사 없이 쿼리 가능.
|
|
|
|
```
|
|
wing (database)
|
|
├── public PostGIS 확장 (geometry, geography, spatial_ref_sys)
|
|
├── auth 인증/권한 (9 테이블)
|
|
└── wing 운영 데이터 (35+ 테이블)
|
|
```
|
|
|
|
| 스키마 | 역할 | 주요 테이블 |
|
|
|--------|------|-------------|
|
|
| public | PostGIS 공간 함수, pg_trgm, uuid-ossp | (확장 전용) |
|
|
| auth | 사용자 인증, 역할, 권한, 감사로그 | auth_user, auth_role, auth_perm, auth_perm_tree, auth_audit_log |
|
|
| wing | 사고, 확산예측, HNS, SCAT, 자산, 게시판, 보고서 | acdnt, pred_exec, hns_substance, cst_sect, asset_org, board_post, report |
|
|
|
|
## 초기 설치
|
|
|
|
```bash
|
|
# 1. DB 생성 + 사용자
|
|
createdb -U postgres wing
|
|
psql -U postgres -c "CREATE USER wing WITH PASSWORD 'Wing2026';"
|
|
psql -U postgres -c "GRANT ALL ON DATABASE wing TO wing;"
|
|
|
|
# 2. 스키마 DDL 실행 (순서대로)
|
|
for f in database/schema/0*.sql database/schema/1*.sql; do
|
|
psql -U wing -d wing -f "$f"
|
|
done
|
|
|
|
# 3. Seed 데이터 (SQL)
|
|
for f in database/seed/0[1-8]*.sql database/seed/1[1-4]*.sql; do
|
|
psql -U wing -d wing -f "$f"
|
|
done
|
|
|
|
# 4. Seed 데이터 (Node.js — layer 160건, HNS 1,316건)
|
|
cd backend && npm run db:seed
|
|
```
|
|
|
|
## 디렉토리 구조
|
|
|
|
```
|
|
database/
|
|
├── schema/ ERD용 순수 DDL (현행 운영 DB 기준)
|
|
│ ├── 00_extensions.sql 확장 + 스키마 생성
|
|
│ ├── 01_auth_tables.sql auth 스키마 (9 테이블)
|
|
│ ├── 02_common_tables.sql 공통코드, 레이어
|
|
│ ├── 03_org_user_tables.sql 조직, 사용자
|
|
│ ├── 04_accident_tables.sql 사고, 유출, 예측, 기상, 미디어
|
|
│ ├── 05_hns_tables.sql HNS 물질, 분석
|
|
│ ├── 06_scat_tables.sql 해안조사 구역, 구간
|
|
│ ├── 07_boom_backtrack_tables.sql 오일붐, 역추적, 선박
|
|
│ ├── 08_asset_tables.sql 자산 기관, 장비, 연락처
|
|
│ ├── 09_board_manual_tables.sql 게시판, 매뉴얼
|
|
│ ├── 10_report_tables.sql 보고서, 템플릿, 분석카테고리
|
|
│ ├── 11_aerial_rescue_tables.sql 항공, CCTV, 위성, 구조
|
|
│ ├── 12_incidents_tables.sql 사건사고
|
|
│ └── 13_indexes.sql 인덱스 (GiST, GIN, btree)
|
|
├── seed/ 초기 데이터 (INSERT)
|
|
│ ├── 01~06 auth 스키마 seed
|
|
│ ├── 07~08 공통코드, 조직
|
|
│ ├── 09~10 참조 안내 (Node.js seed)
|
|
│ ├── 11~14 샘플 데이터
|
|
│ └── README.md 실행 순서 안내
|
|
├── migration/ 증분 마이그레이션 (001~016)
|
|
└── _deprecated/ 구 스크립트 (통합 이전 버전)
|
|
├── init.sql 구 wing DB 초기 스키마
|
|
└── auth_init.sql 구 wing_auth DB 초기 스키마
|
|
```
|
|
|
|
## 마이그레이션 규칙
|
|
|
|
- 번호 체계: `NNN_설명.sql` (예: `017_add_feature.sql`)
|
|
- DDL(CREATE/ALTER)과 seed(INSERT)를 분리
|
|
- DDL만 포함하는 파일: `NNN_설명.sql`
|
|
- seed만 포함하는 파일: `NNN_설명_seed.sql`
|
|
- 새 테이블 추가 시 `schema/` 파일도 함께 업데이트
|
|
|
|
## PostGIS 컬럼
|
|
|
|
| 테이블 | 컬럼 | 타입 | 인덱스 |
|
|
|--------|------|------|--------|
|
|
| acdnt | loc_geom | Point, 4326 | GiST |
|
|
| aerial_media | geom | Point, 4326 | GiST |
|
|
| asset_org | geom | Point, 4326 | GiST |
|
|
| backtrack | geom | Point, 4326 | GiST |
|
|
| boom_line | geom | LineString, 4326 | GiST |
|
|
| cctv_camera | geom | Point, 4326 | GiST |
|
|
| cst_sect | geom | Point, 4326 | GiST |
|
|
| cst_srvy_zone | geom | Point, 4326 | GiST |
|
|
| hns_analysis | geom | Point, 4326 | - |
|
|
| rescue_ops | geom | Point, 4326 | GiST |
|
|
| sat_request | geom | Point, 4326 | GiST |
|
|
|
|
## 접속 정보
|
|
|
|
| 항목 | 값 |
|
|
|------|------|
|
|
| Host | 211.208.115.83 |
|
|
| Port | 5432 |
|
|
| Database | wing |
|
|
| User | wing |
|
|
| Schema | wing, auth, public |
|
|
| search_path | wing, auth, public |
|