제4장

1단계 - 데이터 형식 (생태계 데이터 스키마)

모니터링 시스템 전반의 상호운용성을 가능하게 하는 표준화된 데이터 구조

데이터 형식 표준화 개요

WIA 생태계 모니터링 표준의 1단계는 이후의 모든 상호운용성을 가능하게 하는 기초 데이터 형식을 확립한다. 생태계 관측, 환경 측정, 메타데이터에 대한 표준화된 스키마를 정의함으로써, 1단계는 플랫폼·조직·분석 시스템을 넘나들며 이해될 수 있는 모니터링 데이터의 공통 언어를 만든다.

데이터 형식 표준화는 제2장에서 확인한 핵심 과제, 즉 호환되지 않는 데이터 구조로 인한 파편화를 해결한다. 모니터링 프로그램마다 자체 형식을 고안하면 데이터 통합 비용은 감당하기 어려울 만큼 커진다. 1단계는 누구나 채택하고 구현할 수 있도록 잘 문서화되고 검증된 스키마를 제공함으로써 이 장벽을 제거한다.

핵심 스키마 아키텍처

WIA 데이터 형식은 가볍고 사람이 읽을 수 있으며 보편적으로 지원되는 데이터 교환 형식인 JSON(JavaScript Object Notation)을 기반으로 한다. JSON의 단순성과 유연성, 그리고 강력한 도구 지원은 단순한 종 관측에서 복잡한 센서 네트워크 원격 측정 데이터에 이르는 생태계 모니터링 데이터에 이상적이다.

기본 스키마 구조

모든 WIA 생태계 모니터링 레코드는 필수 메타데이터와 구조를 제공하는 공통 기본 스키마를 공유한다. 이 기본 스키마는 모든 레코드가 올바른 해석과 활용에 필요한 최소한의 정보를 담도록 보장한다. 아래는 1단계 명세가 정의한 기본 구조이다.

{
  "wia_version": "1.0",
  "schema_type": "string (필수)",
  "record_id": "UUID 또는 고유 식별자 (필수)",
  "timestamp": "ISO 8601 날짜·시간, 시간대 포함 (필수)",
  "location": {
    "latitude": "number (필수)",
    "longitude": "number (필수)",
    "elevation": "number (선택)",
    "datum": "string (기본값: WGS84)",
    "precision": "number, 미터 단위 (선택)",
    "location_name": "string (선택)"
  },
  "observer": {
    "id": "string (필수)",
    "name": "string (선택)",
    "organization": "string (선택)",
    "email": "string (선택)"
  },
  "quality": {
    "validation_status": "enum (필수)",
    "quality_flags": "문자열 배열 (선택)",
    "confidence_level": "0-1 사이의 number (선택)"
  }
}

이 기본 구조는 모든 레코드가 고유하게 식별되고, 시공간상에서 정확히 위치가 지정되며, 관측자에게 귀속되고, 품질 평가를 받도록 보장한다. 필수 필드는 wia_version(현재 "1.0"), schema_type(예: "species-observation", "water-quality-sample"), record_id, timestamp, location.latitude(-90~90), location.longitude(-180~180), observer.id, quality.validation_status이다. validation_status는 unvalidated, in_review, validated, expert_verified, questionable, invalid 가운데 하나의 값을 가진다. confidence_level은 0.0(신뢰 없음)에서 1.0(완전한 신뢰)까지의 값이다. 도메인별 스키마는 특정 관측 유형과 관련된 추가 필드로 이 기본 구조를 확장한다.

종 관측 스키마

생물다양성 모니터링은 종 관측, 즉 특정 장소와 시각에 탐지된 생물의 기록을 생성한다. schema_type이 "species-observation"인 WIA 종 관측 스키마는 육안 조사부터 eDNA, 카메라 트랩에 이르는 다양한 데이터 수집 방법을 수용하면서 필수 정보를 담아낸다.

필수 필드

필드 유형 설명 예시
taxon.scientific_name string 학명 "Haliaeetus leucocephalus"
taxon.taxon_authority string 동정 근거가 된 분류학적 명명 권위 "GBIF:2480498"
detection_method enum 생물을 탐지한 방법(통제 어휘) "visual_survey", "camera_trap", "edna", "acoustic_monitoring"
occurrence_status enum 출현, 부재 또는 흔적 "present", "absent", "trace"

occurrence_status의 absent는 대상 종을 찾는 조사를 수행했으나 발견하지 못했음을, trace는 직접 관찰은 없으나 흔적(발자국, 배설물 등)이 확인되었음을 뜻한다.

선택 필드

선택 필드는 기본 관측에 장벽을 만들지 않으면서, 정보가 있을 경우 추가적인 세부 사항을 제공한다.

종 관측 전체 예시

{
  "wia_version": "1.0",
  "schema_type": "species-observation",
  "record_id": "OBS-2025-12345",
  "timestamp": "2025-12-26T14:30:00Z",
  "location": {
    "latitude": 47.6062,
    "longitude": -122.3321,
    "elevation": 52,
    "datum": "WGS84",
    "precision": 10,
    "location_name": "Discovery Park, Seattle"
  },
  "observer": {
    "id": "obs-001",
    "name": "Jane Smith",
    "organization": "Example Bird Survey Team"
  },
  "taxon": {
    "scientific_name": "Haliaeetus leucocephalus",
    "common_name": "Bald Eagle",
    "kingdom": "Animalia",
    "class": "Aves",
    "order": "Accipitriformes",
    "family": "Accipitridae",
    "taxon_authority": "GBIF:2480498"
  },
  "detection_method": "visual_survey",
  "occurrence_status": "present",
  "abundance": 2,
  "life_stage": "adult",
  "behavior": "perching",
  "habitat_type": "coastal_forest",
  "environmental_conditions": {
    "temperature_c": 12,
    "cloud_cover": "partly_cloudy",
    "wind_speed_kmh": 15
  },
  "quality": {
    "validation_status": "expert_verified",
    "quality_flags": [],
    "confidence_level": 0.95
  }
}

환경 센서 데이터 스키마

자동화된 센서는 환경 측정값을 연속적인 스트림으로 생성한다. schema_type이 "sensor-timeseries"인 센서 데이터 스키마는 센서 메타데이터, 설치 정보, 측정값 배열의 세 부분으로 이루어지며, 일관된 구조를 유지하면서 다양한 센서 유형의 시계열을 수용한다.

센서 메타데이터와 설치 정보

sensor_metadata에서 필수 필드는 sensor_type, measurement_parameter, measurement_unit(QUDT 단위 어휘 사용), calibration_date이다. 제조사, 모델, 일련번호, 정밀도, 정확도, 검출 한계, 교정 인증서는 선택 필드이다. deployment에서는 설치 일시(deployment_date)와 위치(location)가 필수이며, 지상 높이, 지표 아래 깊이, 설치 환경은 선택이다.

시계열 데이터 형식

측정값은 data 객체 안에 시작·종료 시각, 측정 간격(초), 측정값 배열로 저장된다. 각 측정값 객체는 timestamp, value, qc_flag를 필수로 가지며, qc_notes는 선택이다.

{
  "wia_version": "1.0",
  "schema_type": "sensor-timeseries",
  "sensor_id": "TEMP-001",
  "sensor_metadata": {
    "sensor_type": "air_temperature",
    "manufacturer": "Campbell Scientific",
    "model": "CS215",
    "serial_number": "12345",
    "measurement_parameter": "air_temperature",
    "measurement_unit": "unit:DEG_C",
    "precision": 0.1,
    "accuracy": 0.3,
    "calibration_date": "2025-01-15",
    "calibration_certificate": "CAL-2025-001"
  },
  "deployment": {
    "deployment_date": "2025-02-01T09:00:00Z",
    "location": {"latitude": 47.6062, "longitude": -122.3321, "datum": "WGS84"},
    "height_above_ground": 2.0,
    "environment": "open_air"
  },
  "data": {
    "start_time": "2025-12-26T00:00:00Z",
    "end_time": "2025-12-26T23:55:00Z",
    "interval_seconds": 300,
    "readings": [
      {"timestamp": "2025-12-26T00:00:00Z", "value": 12.3, "qc_flag": "good"},
      {"timestamp": "2025-12-26T00:05:00Z", "value": 12.1, "qc_flag": "good"},
      {"timestamp": "2025-12-26T00:10:00Z", "value": 12.2, "qc_flag": "questionable",
       "qc_notes": "인접 값 대비 변화율 검사 경계"}
    ]
  }
}

레코드 전체의 record_id, timestamp, observer, quality 같은 기본 스키마 필드는 지면 관계상 생략했다. 일 평균·최솟값·최댓값 같은 요약 통계는 명세의 필수 구조가 아니므로, 필요하면 API의 집계 매개변수(제5장)로 구하거나 네임스페이스를 붙인 확장 필드로 담는다.

수질 스키마

수질 모니터링은 수생 생태계의 물리적·화학적·생물학적 매개변수를 측정한다. schema_type이 "water-quality-sample"인 수질 스키마에서 필수 필드는 sample_id와 sampling_method이며, 수체 이름(waterbody_name), 지점 ID(site_id), 채수 수심(sampling_depth_meters), 매개변수, 실험실 정보는 선택이다. sampling_method는 grab_sample(단일 순간 시료), composite(여러 시료를 합친 혼합 시료), in_situ(센서로 현장 측정), continuous(자동 연속 모니터링) 가운데 하나이다.

매개변수 필드 이름에는 단위가 붙어 있어 단위 혼동을 막는다. 아래 표의 일반적 범위와 정확도 목표는 현장 실무에서 흔히 쓰는 참고값이며 명세가 정한 규범 값이 아니다.

매개변수(필드) 단위 일반적 범위 정확도 목표(참고)
pH (ph) pH 단위 0-14 ±0.1
수온 (temperature_c) °C -2 ~ 40 ±0.5°C
용존산소 (dissolved_oxygen_mgl) mg/L 0-20 ±0.2 mg/L
탁도 (turbidity_ntu) NTU 0-1000 ±2% 또는 0.5 NTU
전기 전도도 (conductivity_uscm) µS/cm 수체에 따라 크게 다름 ±1% 수준
총질소 (total_nitrogen_mgl) mg/L 0-10 ±10% (실험실 분석)
총인 (total_phosphorus_mgl) mg/L 0-1 ±10% (실험실 분석)

이 밖에 엽록소 a(chlorophyll_a_ugl, µg/L)와 염분(salinity_ppt, ppt)도 정의되어 있다.

시료 레코드 예시

{
  "wia_version": "1.0",
  "schema_type": "water-quality-sample",
  "record_id": "WQ-2025-456",
  "timestamp": "2025-12-26T10:00:00Z",
  "location": {
    "latitude": 47.6205,
    "longitude": -122.2842,
    "datum": "WGS84"
  },
  "observer": {"id": "field-team-03"},
  "sample_id": "WQ-2025-456",
  "waterbody_name": "Lake Washington",
  "site_id": "LW-SITE-03",
  "sampling_depth_meters": 5.0,
  "sampling_method": "grab_sample",
  "parameters": {
    "temperature_c": 8.5,
    "ph": 7.2,
    "dissolved_oxygen_mgl": 9.8,
    "turbidity_ntu": 3.2,
    "total_nitrogen_mgl": 0.45,
    "total_phosphorus_mgl": 0.018,
    "chlorophyll_a_ugl": 2.3
  },
  "laboratory": {
    "lab_name": "Example Environmental Lab",
    "analysis_date": "2025-12-27",
    "methods": {
      "total_nitrogen_mgl": "EPA 353.2",
      "total_phosphorus_mgl": "EPA 365.1"
    }
  },
  "quality": {
    "validation_status": "validated",
    "quality_flags": [],
    "confidence_level": 0.95
  }
}

대기질 스키마

대기질 모니터링은 대기 오염물질과 기상 조건을 추적한다. schema_type이 "air-quality-measurement"인 이 스키마는 관측소 ID(station_id)를 필수로 하며, 규제 준수 모니터링과 연구 응용을 모두 지원한다.

주요 매개변수

벤젠, 톨루엔, 폼알데하이드 같은 휘발성 유기화합물(VOCs)은 1단계 대기질 스키마의 기본 필드에 들어 있지 않다. 이를 측정하는 프로그램은 확장 메커니즘(제3장)에 따라 네임스페이스를 붙인 필드로 추가한다.

토양 건강과 탄소 플럭스

1단계 명세는 적용 범위에 토양 건강 평가와 탄소 플럭스 측정을 포함하지만, v1.0에서는 이 둘에 대한 전용 스키마 유형을 아직 상세히 정의하지 않았다. 따라서 구현자는 기본 스키마 위에 도메인 필드를 얹는 방식으로 레코드를 구성한다. 아래 토양 시료 예시는 이러한 구성 방식을 보여 주는 예시이며, soil-sample이라는 스키마 유형 이름과 하위 필드 이름은 명세가 확정한 값이 아니다.

{
  "wia_version": "1.0",
  "schema_type": "soil-sample",
  "record_id": "SOIL-2025-789",
  "timestamp": "2025-12-26T11:30:00Z",
  "location": {"latitude": 47.61, "longitude": -122.33},
  "observer": {"id": "soil-team-01"},
  "quality": {"validation_status": "unvalidated"},
  "sampling_depth": {
    "top_cm": 0,
    "bottom_cm": 30,
    "horizon": "A"
  },
  "physical_properties": {
    "texture": "loam",
    "sand_percent": 40,
    "silt_percent": 40,
    "clay_percent": 20,
    "bulk_density_gcm3": 1.3,
    "moisture_percent": 25
  },
  "chemical_properties": {
    "ph": 6.5,
    "organic_matter_percent": 4.2,
    "total_nitrogen_percent": 0.21,
    "available_phosphorus_ppm": 45,
    "potassium_ppm": 180,
    "cec_meq100g": 18.5
  },
  "biological_properties": {
    "microbial_biomass_carbon_ugcg": 450,
    "respiration_rate_ugco2gh": 12
  }
}

통제 어휘

표준화된 어휘는 데이터셋 전반에서 일관된 용어를 보장하여 자동 처리와 통합을 가능하게 한다. WIA는 주요 필드에 대한 통제 어휘를 정의하며, 서식지는 ENVO, 단위는 QUDT처럼 기존의 외부 권위 체계와 연계한다.

탐지 방법

품질 플래그

센서 측정값의 qc_flag에는 다음 다섯 값만 쓴다. 레코드 전체의 검증 상태를 나타내는 validation_status와는 별개의 어휘이다.

플래그 의미 조치
good 모든 QC 검사를 통과함 그대로 사용
questionable 간신히 허용 수준임 주의하여 사용
bad QC 기준을 충족하지 못함 분석에서 제외
missing 수집될 것으로 예상된 값이 수집되지 않음 결측값으로 처리
estimated 보간하거나 모델링한 값 추정 방법을 문서화

메타데이터 표준

모든 데이터셋에는 그 맥락, 방법, 품질, 접근 조건을 기록한 포괄적인 메타데이터가 반드시 포함되어야 한다. WIA 메타데이터는 ISO 19115와 EML을 생태계 모니터링 고유의 요소로 확장한다.

데이터셋 수준 메타데이터

파일 형식 규약

검증 및 품질 보증

1단계 명세에 따르면 WIA를 준수하는 모든 데이터는 다음 여덟 가지 검증을 통과해야 한다.

  1. 스키마 검증: 데이터 구조가 JSON 스키마와 일치한다
  2. 필수 필드: 모든 필수 필드가 존재하고 null이 아니다
  3. 데이터 유형: 값이 지정된 유형과 일치한다
  4. 범위 검사: 수치가 유효 범위 안에 있다. 음수 개체 수, 0-14를 벗어난 pH, 절대 영도 미만의 온도가 그 예이다
  5. 좌표 검증: 위도는 -90~90, 경도는 -180~180이다
  6. 시간 검증: 날짜가 미래가 아니며, 종료 시각이 시작 시각보다 앞서지 않는다
  7. 분류학적 검증: 학명이 지정한 명명 권위에서 확인된다
  8. 품질 플래그: QC 플래그가 통제 어휘에 속한다

JSON Schema 검증기는 1~3번 검사를 자동으로 수행하며, 데이터 생성 시점에 실행하면 오류를 조기에 발견할 수 있다. 이 밖에 시료 채취일이 분석일보다 앞서는지, 분류 계급이 서로 일관되는지, 좌표가 장소명과 맞는지 같은 필드 간 일관성 검사를 추가로 두면 논리적 불일치를 더 많이 잡아낼 수 있다.

📝 장 요약

핵심 요점:

  • 1단계는 JSON 스키마에 기반한 표준화된 데이터 형식을 확립하여 모니터링 시스템 전반의 상호운용성을 가능하게 한다
  • 도메인별 스키마는 공통 기본 구조를 공유하면서 종 관측, 센서 시계열, 수질, 대기질을 다룬다. v1.0에서 토양 건강과 탄소 플럭스 레코드는 기본 스키마 위에 도메인 필드를 얹어 구성한다
  • 통제 어휘는 탐지 방법, 출현 상태, 검증 상태, 품질 플래그 같은 주요 필드의 용어를 통일하며, 서식지는 ENVO, 단위는 QUDT와 연계한다
  • 포괄적인 메타데이터 표준은 데이터셋의 맥락, 방법, 품질, 접근 조건을 기록하여 올바른 해석과 활용을 가능하게 한다
  • WIA를 준수하는 모든 데이터는 스키마, 필수 필드, 데이터 유형, 범위, 좌표, 시간, 분류학, 품질 플래그의 여덟 가지 검증을 통과해야 한다

복습 질문:

  1. 생태계 모니터링 데이터의 기본 형식으로서 JSON은 어떤 장점을 제공하는가?
  2. 필수 필드와 선택 필드는 데이터 완전성과 채택 용이성 사이의 균형을 어떻게 맞추는가?
  3. 통제 어휘가 자동화된 데이터 통합에 필수적인 이유는 무엇인가?
  4. 모든 관측 레코드에는 어떤 품질 보증 정보가 함께 제공되어야 하는가?
  5. 도메인별 스키마는 공통 기본 스키마를 어떻게 확장하는가?
  6. 메타데이터는 모니터링 데이터를 종합 분석에 활용할 수 있게 하는 데 어떤 역할을 하는가?

다음 장 예고:

제5장은 이러한 데이터 형식을 바탕으로 2단계, 즉 표준화된 인터페이스를 통해 모니터링 데이터에 프로그래밍 방식으로 접근할 수 있게 하는 API 명세를 정의한다.