wing-ops/database/README.md
htlee 13d6ca69e2 refactor(db): DDL 스크립트 현행화 + wing_auth→auth 스키마 문서 전면 수정
- 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>
2026-03-01 15:16:38 +09:00

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 |