- 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)
41 lines
1.5 KiB
SQL
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);
|