지난 8편의 시리즈를 통해 우리는 다중 물리 시뮬레이션의 최적화부터 파이썬(Python)과 ASE 라이브러리를 이용한 데이터 전처리 자동화까지 복잡한 공학적 워크플로우를 하나씩 정복해 왔습니다. 하지만 아무리 뛰어난 자동화 스크립트라도 검은 화면의 터미널에서 명령어를 입력해야 한다면, 프로그래밍에 익숙하지 않은 실험실의 동료들이나 외부 협업 연구자들이 이를 활용하기에는 무리가 있습니다. 연구의 효율화는 나 혼자만의 생산성을 높이는 것을 넘어, 누구나 쉽게 내가 만든 도구를 사용할 수 있는 '환경'을 구축할 때 완성됩니다. 이번 글에서는 복잡한 웹 개발 지식(HTML/CSS/JS) 없이도 단 몇십 줄의 파이썬 코드만으로 전문가 수준의 연구용 웹 대시보드를 구축할 수 있게 해주는 **Streamlit(스트림릿)** 활용법을 전격 공개합니다.
1. Streamlit: 데이터 과학자를 위한 가장 빠른 웹 프레임워크
전통적인 웹 개발 방식인 Django(장고)나 Flask(플라스크)는 연구자가 배우기에 너무 방대한 지식을 요구합니다. 반면 스트림릿(Streamlit)은 오직 '파이썬' 하나만으로 데이터 시각화, 파일 업로드, 머신러닝 예측 인터페이스를 웹 브라우저에 즉시 띄울 수 있도록 설계되었습니다. 연구자는 복잡한 디자인 작업 대신 본연의 시뮬레이션 로직에만 집중하면 됩니다.
스트림릿을 사용하면 사용자가 웹 브라우저에서 분자 구조 파일을 드래그 앤 드롭으로 업로드하고, 원하는 파라미터(예: 격자 크기, 온도, 압력 등)를 슬라이더로 조절한 뒤, '실행' 버튼 하나로 모든 전처리와 계산을 끝낼 수 있습니다. 이는 연구실 내의 '디지털 전환(Digital Transformation)'을 실현하는 가장 강력한 수단이자, 여러분의 기술적 권위(Authority)를 증명하는 훌륭한 포트폴리오가 될 것입니다.
2. 실전 코드: 파일 업로드 및 일괄 변환 웹 대시보드 구현
아래 코드는 지난 포스팅에서 다룬 'ASE 기반 파일 변환 스크립트'를 스트림릿 UI와 결합한 형태입니다. 이 코드를 `app.py`로 저장하고 실행하면 브라우저에 아름다운 대시보드가 나타납니다.
import streamlit as st
from ase.io import read, write
import io
import zipfile
# 1. 웹 페이지 제목 및 레이아웃 설정
st.set_page_config(page_title="연구용 분자 구조 변환기", layout="wide")
st.title("🧪 시뮬레이션 포맷 만능 변환기 (XYZ to CIF/VASP)")
st.write("변환할 .xyz 파일들을 업로드하세요. 가상의 격자(Cell)가 자동 추가되어 변환됩니다.")
# 2. 사이드바에서 파라미터 설정
st.sidebar.header("설정 변경")
cell_size = st.sidebar.slider("가상 격자 크기 (Å)", 10.0, 50.0, 20.0)
# 3. 파일 업로더 구현
uploaded_files = st.file_uploader("XYZ 파일 선택", type=['xyz'], accept_multiple_files=True)
if uploaded_files:
st.info(f"총 {len(uploaded_files)}개의 파일이 업로드되었습니다.")
# 결과를 담을 메모리 버퍼 (ZIP 파일 생성용)
zip_buffer = io.BytesIO()
with zipfile.ZipFile(zip_buffer, "a", zipfile.ZIP_DEFLATED, False) as zip_file:
for uploaded_file in uploaded_files:
# 파일 읽기
stringio = io.StringIO(uploaded_file.getvalue().decode("utf-8"))
atoms = read(stringio, format='xyz')
# 격자 설정 및 중앙 배치 (지난 포스팅 노하우 적용)
atoms.set_cell([cell_size] * 3)
atoms.center()
atoms.set_pbc(True)
# 메모리 내에서 변환 (CIF 예시)
cif_io = io.StringIO()
write(cif_io, atoms, format='cif')
# ZIP 파일에 추가
zip_file.writestr(f"{uploaded_file.name.replace('.xyz', '.cif')}", cif_io.getvalue())
# 4. 결과 다운로드 버튼
st.success("변환이 완료되었습니다! 아래 버튼을 눌러 결과 파일을 ZIP으로 다운로드하세요.")
st.download_button(
label="📥 변환 결과 다운로드 (ZIP)",
data=zip_buffer.getvalue(),
file_name="converted_files.zip",
mime="application/zip"
)
3. 연구 데이터 공유의 새로운 패러다임: 웹 앱의 파급력
위와 같은 웹 애플리케이션이 구축되면 연구실의 워크플로우는 획기적으로 변합니다. 코딩을 전혀 모르는 동료 학부생이나 대학원생들도 여러분이 만든 웹 페이지에 접속하여 본인의 실험 데이터를 시뮬레이션용 포맷으로 즉시 변경할 수 있습니다. 이는 팀 내 협업 효율성을 극대화할 뿐만 아니라, 여러분이 개발한 알고리즘이나 모델의 재현성을 외부 연구자들에게 증명하는 가장 강력한 도구가 됩니다.
구글 애드센스 봇 또한 단순히 텍스트만 나열된 블로그보다, 이와 같이 실질적인 '웹 도구(Tool)' 기능을 제공하는 사이트를 매우 높은 품질로 평가합니다. 사용자가 페이지에 머물며 파일을 업로드하고 버튼을 누르는 모든 행위는 '체류 시간 증대'와 '사용자 경험(UX) 향상'으로 이어지며, 이는 승인을 앞당기는 결정적인 요인이 됩니다.
결론: 디지털 연구실을 향한 마지막 도약
결론적으로 파이썬 스크립트를 웹 대시보드로 전환하는 능력은 현대 연구자에게 '풀스택 전문가'라는 타이틀을 부여해 주는 핵심 역량입니다. Streamlit을 통해 구현된 나만의 연구 대시보드는 복잡한 계산 과학의 세계를 모든 이에게 연결해 주는 가교 역할을 할 것입니다. 이번 포스팅에서 제공한 실전 코드를 바탕으로 여러분의 연구실에 꼭 필요한 맞춤형 도구를 직접 설계해 보시기 바랍니다. 이어지는 다음 연재글에서는 시각화와 전처리를 넘어, 실제 논문에서 가장 많이 요구되는 데이터 통계 분석과 회귀 모델을 파이썬으로 단숨에 처리하고 보고서용 표(Table)를 자동 생성하는 노하우를 공유하겠습니다.