
개요
tdb_viewer는 폭발물 · 추진제 · 산화제 등 에너지 물질(Energetic Materials)의 열역학적 · 물리화학적 특성 데이터를 탐색하기 위한 데스크톱 GUI 애플리케이션이다. Python 표준 라이브러리인 tkinter를 UI 프레임워크로 사용하며, 별도의 외부 데이터베이스 파일 없이 데이터가 소스코드에 직접 내장(embedded)되어 있다는 점이 가장 큰 특징이다. 이 코드는 데이터 처리 로직, UI 구성, 검색 엔진, 상세 렌더링이라는 네 가지 핵심 레이어로 나뉜다.
1. 내장 데이터베이스 구조
원래 .mdb 형식(Microsoft Access Database)으로 존재하던 TDB 데이터베이스를 JSON 형태로 변환하여 소스코드 내부에 포함시켰다. MDBParser 클래스가 이 JSON 데이터를 파싱하고 메모리에 올리는 역할을 담당한다. 각 물질(substance)은 고유 ID를 키로 가지며, 영문 · 독일어 명칭, 분자량(MW), 산소 균형(OB), 원소 구성, 물리적 상태, 분류 코드, 그리고 다수의 물성 데이터(props)를 사전 형태로 저장한다.
데이터 로딩은 UI 응답성을 유지하기 위해 별도 스레드에서 비동기로 처리되며, 진행 상황은 프로그레스 바로 사용자에게 실시간 표시된다.
2. 분자식 역산 알고리즘
이 코드의 알고리즘에서 가장 정교한 부분은 der다. 데이터베이스에는 원소 종류 목록만 저장되어 있고 각 원소의 개수는 없는 경우가 많다. 이 함수는 분자량과 산소 균형값을 제약 조건으로 삼는 깊이 우선 탐색(DFS)을 통해 정수 원소 개수를 역으로 추론한다.
CHNO(탄소 · 수소 · 질소 · 산소) 화합물의 경우 동일한 분자량을 갖는 이성질체(isomer)가 존재할 수 있다. 예를 들어 TNT(C₇H₅N₃O₆)와 분자량이 동일한 다른 화합물을 구별하기 위해, 산소 균형 공식 OB% = 1600/Mw × (nO − 2nC − nH/2)을 이용한 복합 스코어링으로 최적 해를 선택한다. 이 알고리즘 덕분에 사용자에게 C7 H5 N3 O6와 같이 구독자 형식의 분자식을 자동으로 표시할 수 있다.
3. 물성 코드 파싱 및 분류 체계
물성 데이터는 "SCHM-50.(-90.)RP"와 같은 복합 코드 문자열로 저장되어 있다. 정규식을 사용해 이를 베이스 코드(SCHM), 비고(remarks), 출처(RP) 세 부분으로 파싱한다.
사전은 수십 가지 베이스 코드를 녹는점(SCHM), 끓는점(SIED), 생성 엔탈피(ENTH), 밀도(DICH), 연소열(VBW) 등의 사람이 읽을 수 있는 설명과 단위로 매핑한다. 출처 약어를 사용하여 "Kaye & Laby", "Experimental", "ICT Report" 등 전문 문헌명으로 호출하는 역할을 한다.
4. GUI 구조 및 상세 렌더링
TDBViewer 클래스는 tk.Tk를 상속하며 전체 앱의 뼈대를 이룬다. UI는 좌우 분할(PanedWindow) 구조로, 왼쪽은 검색창과 결과 리스트, 오른쪽은 선택된 물질의 상세 정보 패널이다.
검색은 네 가지 모드(이름 앞부분 일치, 부분 일치, 원소 구성, 물성 코드)를 지원하며, 입력 280ms 후 자동 실행되는 디바운싱(debouncing) 방식으로 실시간 필터링이 이루어진다.
상세 패널은 카드 방식으로 ① 물질명 카드(영문 · 독일어명 포함), ② 개요(분자식, 분자량, 산소 균형, 상태, 분류), ③ 물성 테이블(녹는점 · 밀도 등), ④ 생성 엔탈피 테이블(kJ/mol · kcal/mol · kcal/kg 다중 단위 자동 환산), ⑤ 생성 에너지 테이블(엔탈피 − 보정값)로 구성된다. 테마 색상 팔레트를 변수로 관리하여 일관된 시각 스타일을 유지한다.
5. 요약
이 코드는 전문적인 에너지 물질 연구를 위한 자립형(self-contained) 데스크톱 도구로, 복잡한 화학 데이터를 직관적인 GUI로 탐색할 수 있도록 설계되었다. 외부 파일 의존성 없이 단일 Python 스크립트만으로 실행 가능하다는 실용적인 배포 전략이 돋보인다.
'프로젝트 > ROCKET' 카테고리의 다른 글
| 원통형 압력 용기의 파열 압력 추정 (0) | 2026.04.16 |
|---|---|
| NOZ-MOC 1.0— 특성곡선법을 이용한 노즐 설계 (0) | 2026.04.15 |
| 로켓 노즐 초음속 유동과 배기에서 발생하는 팽창파 해석 (0) | 2026.04.12 |
| HTPB (Hydroxyl-Terminated Polybutadiene) (0) | 2026.04.12 |
| TDB-Viewer와 ICT-DB란? 열화학 데이터베이스 (0) | 2026.04.10 |