kcg-monitoring/database/migration/002_aircraft_positions.sql
htlee 1e4c51e76b feat(aircraft): 항공기 백엔드 수집기 구현 + 프론트엔드 전환
- Airplanes.live / OpenSky @Scheduled 수집기 (60초 주기)
- 인메모리 캐시 + PostGIS DB 적재 (향후 리플레이용)
- GET /api/aircraft?region=iran|korea REST API
- 프론트엔드 LIVE→백엔드 API, REPLAY→샘플 전용
- JDK 17→21 업그레이드 (pom, sdkmanrc, CI/CD, systemd)
2026-03-17 16:50:17 +09:00

41 lines
1.5 KiB
SQL

-- 002: 항공기 위치 이력 테이블 (PostGIS)
-- 리플레이 기능을 위한 시계열 위치 데이터 저장
SET search_path TO kcg;
-- PostGIS 확장 활성화
CREATE EXTENSION IF NOT EXISTS postgis;
-- 항공기 위치 이력 테이블
CREATE TABLE IF NOT EXISTS aircraft_positions (
id BIGSERIAL PRIMARY KEY,
icao24 VARCHAR(6) NOT NULL,
callsign VARCHAR(16),
position geometry(Point, 4326) NOT NULL,
altitude DOUBLE PRECISION,
velocity DOUBLE PRECISION,
heading DOUBLE PRECISION,
vertical_rate DOUBLE PRECISION,
on_ground BOOLEAN DEFAULT FALSE,
category VARCHAR(16),
typecode VARCHAR(16),
type_desc VARCHAR(128),
registration VARCHAR(16),
operator VARCHAR(128),
squawk VARCHAR(4),
source VARCHAR(16) NOT NULL,
region VARCHAR(16) NOT NULL,
collected_at TIMESTAMP NOT NULL DEFAULT NOW(),
last_seen TIMESTAMP
);
-- GiST 공간 인덱스
CREATE INDEX IF NOT EXISTS idx_aircraft_pos_geom ON aircraft_positions USING GIST (position);
-- 시간 기반 인덱스 (리플레이 쿼리 최적화)
CREATE INDEX IF NOT EXISTS idx_aircraft_pos_collected ON aircraft_positions (collected_at);
CREATE INDEX IF NOT EXISTS idx_aircraft_pos_region_time ON aircraft_positions (region, collected_at);
-- 개별 항공기 추적
CREATE INDEX IF NOT EXISTS idx_aircraft_pos_icao24 ON aircraft_positions (icao24, collected_at);