# 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 |