BUFR
1. 개요
BUFR(Binary Universal Form for the Representation of meteorological data, 기상 데이터를 표현하기 위한 이진 범용 형식)는 기상 데이터를 표현하기 위한 이진 형식이다. BUFR 메시지는 6개의 섹션으로 구성되며, 각 섹션은 메시지 식별, 로컬 옵션, 데이터 형식, 핵심 데이터 및 종료 표시를 포함한다. BUFR은 세계 기상 기구(WMO)에서 규정하며, 템플릿과 디스크립터를 사용하여 데이터의 구조와 내용을 정의한다. BUFR은 여러 서브셋을 포함할 수 있으며, 유럽 중기 예보 센터(ECMWF)를 비롯한 여러 기관에서 관련 소프트웨어와 온라인 검증기를 제공한다.
| 유형 | 자료 표현 |
|---|---|
| 개발 | 세계 기상 기구 (WMO) |
| 용도 | 기상 데이터 교환 및 저장 |
| 특징 | 이진 형식 테이블 기반 코드 자기 기술적 고효율 유연성 |
| 설명 | BUFR (이진 형식 범용 기상 통보식)은 WMO에서 개발한 기상 데이터를 효율적으로 표현, 교환 및 저장하기 위한 이진 데이터 형식임. |
|---|---|
| 장점 | 뛰어난 유연성 효율적인 데이터 압축 다양한 데이터 유형 지원 |
| 단점 | 복잡성으로 인해 구문 분석 및 처리가 어려울 수 있음. |
-
기상 데이터 및 네트워크 -
기상 관측
기상 관측은 고대부터 현대에 이르기까지 지구 대기의 상태를 관측하는 활동으로, 국제적인 협력과 과학 기술 발전을 통해 체계화되었으며, 기상 예보, 재해 예방, 기후 연구 등 다양한 분야에 활용된다. -
기상 데이터 및 네트워크 -
운항정보 교신시스템
운항정보 교신시스템(ACARS)은 항공기와 지상국 간 디지털 통신을 위한 시스템으로, VHF/HF 무선 통신을 통해 항공 교통 관제, 운영 통제, 행정 통제 메시지 전송, OOOI 이벤트 자동 보고, 비행 관리 시스템 연동, 장비 상태 및 유지보수 데이터 전송, 핑 메시지 교환 등 다양한 기능을 수행하며 항공 안전 및 효율성 향상에 기여한다.
2. 형식 설명
3절은 짧은 헤더와 4절의 비트 스트림 내용과 일치하는 일련의 디스크립터로 구성된다. 3절의 디스크립터 시퀀스는 BUFR 메시지의 템플릿으로 이해될 수 있다. 템플릿에는 일치하는 비트 스트림에 포함된 데이터 값의 구조를 설명하는 데 필요한 정보가 포함되어 있으며, 이는 단계별, 알고리즘과 유사한 방식으로 해석된다. BUFR 메시지 집합에서 4절에 포함된 값은 메시지마다 다를 수 있지만, 3절에 제공된 템플릿이 변경되지 않으면 순서와 구조는 예측 가능한 상태로 유지된다. 템플릿은 특정 데이터 제품(예: 기상 관측)의 요구 사항을 충족하도록 설계할 수 있으며, BUFR 데이터 제품의 내용과 구조를 표준화하는 데 사용될 수 있다. 세계 기상 기구(WMO)는 지상 및 상층 기상 관측 데이터에 대한 여러 BUFR 템플릿을 공개했다.
모든 16비트 디스크립터는 F-X-Y 구조를 가지며, 여기서 F는 가장 왼쪽 두 비트, X는 중간 6비트, Y는 가장 오른쪽 8비트를 나타낸다. F 값(0~3)은 디스크립터의 유형을 결정한다.
자세한 내용은 디스크립터 유형에서 확인할 수 있다.
2.1. 섹션 구성
BUFR 메시지는 0부터 5까지 번호가 매겨진 6개의 섹션으로 구성된다.
* 섹션 0, 1, 5는 주로 메시지 식별을 위한 정적 메타데이터를 포함한다.
* 섹션 2는 선택 사항이며, 사용 시 메시지 작성자가 원하는 임의의 형식의 데이터를 포함할 수 있다(이는 로컬 사용에만 권장된다).
* 섹션 3은 BUFR 데이터 제품의 형식과 내용을 정의하는 일련의 소위 디스크립터를 포함한다.
* 섹션 4는 섹션 3에 의해 레이아웃된 메시지의 핵심 데이터 및 메타데이터 값을 포함하는 비트 스트림이다.
섹션 3에 포함된 제품 설명은 복제 및/또는 연산자 디스크립터를 사용하여 정교하고 복잡하게 만들 수 있다. (다양한 종류의 디스크립터에 대한 간략한 개요는 아래를 참조하고, 자세한 내용은 WMO BUFR 가이드를 참조하십시오.)
WMO에서 발행하는 『코드 매뉴얼』(WMO-No.306) 중 "Part B - 이진 코드" 절에서 규정하고 있다. 섹션 0~5까지 6개의 대항목으로 규정된다.
; Section 0
CCITT IA5 규정에 따라, 문자 형식으로 "BUFR"임을 표시한다. 또한, 전체 데이터의 옥텟 길이를 3옥텟으로 표시하고, BUFR의 에디션을 나타낸다. 8옥텟이다.
; Section 1
에디션 3에서는 17옥텟, 에디션 4에서는 22옥텟에 걸쳐, 일시나 데이터 형식 등 필요한 정보를 담는다.
; Section 2
WMO에서 규정하지 않은 로컬 옵션이다.
; Section 3
Section 4에서 기술될 데이터 형식을 나타내는 부분이다. 관측값인지 아닌지, 압축인지 비압축인지 등도 표시된다.
; Section 4
데이터를 기술하는 메인 부분이다.
; Section 5
"7777"만 표시된다. 전송의 종료를 나타낸다.
2.2. 템플릿
3절의 descriptor 시퀀스는 BUFR 메시지의 '템플릿'으로 이해될 수 있다. 템플릿에는 일치하는 비트 스트림에 포함된 데이터 값의 구조를 설명하는 데 필요한 정보가 포함되어 있으며, 이는 단계별, 알고리즘과 유사한 방식으로 해석된다. BUFR 메시지 집합에서 4절에 포함된 값은 메시지마다 다를 수 있지만, 3절에 제공된 템플릿이 변경되지 않으면 순서와 구조는 예측 가능한 상태로 유지된다. 템플릿은 특정 데이터 제품(예: 기상 관측)의 요구 사항을 충족하도록 설계할 수 있으며, BUFR 데이터 제품의 내용과 구조를 표준화하는 데 사용될 수 있다. 세계 기상 기구(WMO)는 지상 및 상층 기상 관측 데이터에 대한 여러 BUFR 템플릿을 공개했다.
2.3. 디스크립터
모든 16비트 디스크립터는 'F-X-Y' 구조를 가지며, 여기서 'F'는 가장 왼쪽 두 비트, 'X'는 중간 6비트, 'Y'는 가장 오른쪽 8비트를 나타낸다. 'F' 값(0~3)은 디스크립터의 유형을 결정한다.
디스크립터 유형에 대한 자세한 내용은 해당 섹션에서 확인할 수 있다.
BUFR 디스크립터는 세계기상기구(WMO)에서 발행하는 『코드 매뉴얼』(WMO-No.306)의 "Part B - 이진 코드" 절에 규정되어 있으며, Section 0부터 5까지 총 6개의 섹션으로 구성된다.
;Section 0
CCITT IA5 규정에 따라 "BUFR" 문자열을 표시한다. 또한 전체 데이터의 길이를 3옥텟으로, BUFR 에디션 번호를 1옥텟으로 나타낸다. (총 8옥텟)
;Section 1
에디션 3에서는 17옥텟, 에디션 4에서는 22옥텟에 걸쳐 일시, 데이터 형식 등 필수 정보를 담는다.
;Section 2
WMO에서 규정하지 않은 로컬 옵션을 위한 섹션이다.
;Section 3
Section 4에 기술될 데이터 형식을 나타내는 부분으로, 관측값 여부, 압축 여부 등을 표시한다.
;Section 4
데이터를 기술하는 주된 부분이다.
;Section 5
"7777" 문자열만을 포함하며, 전송 종료를 나타낸다.
2.3.1. 디스크립터 유형
모든 16비트 디스크립터는 'F-X-Y' 구조를 가지며, 여기서 'F'는 가장 왼쪽 두 비트, 'X'는 중간 6비트, 'Y'는 가장 오른쪽 8비트를 나타낸다. 'F' 값(0~3)은 디스크립터의 유형을 결정한다.
* 요소 디스크립터 (F=0): 기본적인 데이터 및 관련 메타데이터를 전달한다.
* 'X' 값은 디스크립터의 클래스(예: 수평 좌표, 온도 등)를 나타낸다.
* 'Y' 값은 해당 클래스 내의 디스크립터 번호이다.
* 클래스 1~9의 요소 디스크립터는 BUFR 템플릿의 나머지 부분 전체에 걸쳐 효력을 유지하는 특별한 속성을 가진다.
* 이들은 BUFR 메시지의 핵심 데이터에 적용할 수 있는 공간, 시간 및 기타 메타데이터에 사용된다.
* "표 B"에 정의되어 있으며, 표 B에 새로운 요소 디스크립터를 추가해도 BUFR 소프트웨어 사양은 변경되지 않는다.
* 표 B 정의에는 번호, 텍스트 정의, 디코딩 매개변수(비트 너비, 스케일 팩터, 바이어스) 및 유형(수치, 문자열, 코드 테이블 등)이 포함된다.
* 반복 디스크립터 (F=1): 선택된 수의 디스크립터 반복을 제어한다.
* BUFR 템플릿에 루프와 같은 구조를 도입하는 연산이다.
* 'X' 값은 반복에 포함될 다음 디스크립터의 수를 지정한다.
* 'Y' 값은 반복 횟수를 나타낸다.
* 'Y'=0이면 "지연된 반복"이라고 하며, 반복 횟수는 특수 요소 디스크립터의 값에서 가져온다.
* 연산자 디스크립터 (F=2): 데이터의 특성을 수정하거나 추가 데이터를 생성 및 조작하는 특수 연산을 전달한다.
* 'X' 값은 연산자를 식별한다.
* 'Y' 값은 연산의 적용을 제어한다.
* "표 C"에 정의되어 있으며, 표 C에 새로운 연산자 디스크립터를 추가하려면 BUFR 소프트웨어 사양을 변경해야 하며, 이는 새로운 BUFR 에디션 번호로 이어진다.
* 시퀀스 디스크립터 (F=3): 반복 디스크립터 및 표 B, C, D 항목을 포함한 일련의 다른 디스크립터의 별칭이다.
* "표 D"에 정의되어 있다.
* 'X' 및 'Y' 값의 사용은 요소 디스크립터와 동일하다.
2.4. 서브셋
3절 템플릿에 정의된 데이터 구조는 단일 BUFR 메시지 내에서 여러 번 재사용될 수 있다. 이러한 경우, 4절에는 서브셋이 연속적으로 포함된다. 예를 들어, 서브셋은 단일 메시지 내에서 여러 위치의 관측 데이터를 전달하는 데 사용될 수 있다.
3. 관련 소프트웨어
* 유럽 중기 예보 센터(ECMWF)는 [https://confluence.ecmwf.int/display/BUFR/BUFRDC+Home BUFRDC 라이브러리]와 [https://software.ecmwf.int/wiki/display/ECC ecCodes 라이브러리]를 제공한다. [https://confluence.ecmwf.int/display/MAGP/Magics 매직스] 및 메트뷰는 이러한 라이브러리를 사용하여 BUFR 데이터를 처리하고 시각화한다.
* [https://emc.ncep.noaa.gov/emc/pages/infrastructure/bufrlib.php NCEP 라이브러리]
* [https://github.com/ECCC-MSC/libecbufr libECBUFR] 환경부 캐나다 라이브러리
* [https://sourceforge.net/projects/wmobufr/ NCAR wmobufr 라이브러리] — Java 라이브러리 및 XML 구현
* [https://pypi.python.org/pypi/pybufr-ecmwf/ 포트란] 및 [https://github.com/pytroll/python-bufr/ C 기반] ECMWF 라이브러리를 래핑하는 파이썬 래퍼
* [http://www.arpa.emr.it/dettaglio_documento.asp?id=2927&idlivello=64 wreport] BUFR 및 CREX의 인코딩 및 디코딩을 구현하는 자유 소프트웨어 C++ 라이브러리
* [https://trollbufr.readthedocs.io/index.html trollbufr], 순수 파이썬 BUFR 리더 및 라이터 FOSS
* [https://csv2bufr.readthedocs.io csv2bufr] — CSV 데이터를 WMO BUFR 형식으로 변환하는 파이썬 패키지