빌더를 만나다: 의료 보고서를 이중 엔진 기반의 건강 지능으로 변환하기
요약
Google Gemini를 활용하여 의료 PDF 보고서를 분석하고 개인 맞춤형 건강 정보와 공중 보건 데이터를 제공하는 멀티 에이전트 RAG 플랫폼 구축 사례를 소개합니다. 초기 프로토타입에서 React 19와 SSE 스트리밍을 도입한 프로덕션 수준의 웹 애플리케이션으로 발전시킨 과정을 다룹니다.
핵심 포인트
- 멀티 에이전트 RAG 파이프라인을 통한 의료 데이터 추출 및 분석
- ChromaDB와 SQLite를 활용한 개인용 Q&A 및 커뮤니티 데이터 집계
- React 19와 SSE 스트리밍을 적용한 실시간 사용자 경험 개선
- 의료 분야의 AI 환각 문제를 해결하기 위한 근거 제시 기술 적용
Meet the Builders: Transforming Medical Reports into Dual-Engine Health Intelligence
해커톤 빌더 팀이 Google Gemini 2.5를 사용하여 고립된 의료 PDF 검사 보고서를 개인의 건강 문해력 향상 및 예측적 공중 보건 감시를 위한 AI 기반 플랫폼으로 어떻게 변화시켰는지 소개합니다.
🌟 불꽃: 두 가지 측면의 문제
매년 수백만 명의 사람들이 난해한 의학 전문 용어, 모호한 약어, 그리고 가공되지 않은 수치로 가득 찬 검사 보고서를 받습니다. HbA1c(당화혈색소)가 6.8%이든, Hemoglobin(헤모글로빈)이 10.2 g/dL이든, 대부분의 환자들은 병원 진료를 마친 후 불안함과 혼란을 느끼며 답을 찾기 위해 신뢰할 수 없는 웹 검색에 의존하게 됩니다.
동시에, 우리는 훨씬 더 큰 시스템적 문제를 발견했습니다: 의료 데이터가 고립된 사일로(Silo) 형태로 존재한다는 점입니다. 수천 개의 의료 검사 PDF가 개인의 스마트폰과 병원 데스크에 흩어져 있습니다. 아무도 전체적인 그림을 보지 못합니다. 특정 지역 환자의 30%가 혈당 수치 상승을 보일 때도 아무런 경고가 울리지 않습니다. 농촌 지역의 젊은 인구층에서 빈혈 발생률이 급증해도, 그것이 지역 사회의 건강 위기가 될 때까지는 아무도 알아차리지 못합니다.
우리는 스스로에게 간단한 질문을 던졌습니다: 단 한 번의 의료 보고서 업로드로 환자에게는 명확하고 신뢰할 수 있는 답변을 즉시 제공하는 동시에, 익명으로 예측적 공중 보건 지능(Public Health Intelligence)에 기여할 수 있다면 어떨까?
그것이 Community Health Intelligence Assistant를 탄생시킨 불꽃이었습니다.
Phase 1: 초기 프로토타입 구축 (v1.0)
우리는 두 세계를 연결하기 위해 설계된 멀티 에이전트 RAG (Retrieval-Augmented Generation, 검색 증강 생성) 파이프라인을 설계하는 것부터 시작했습니다:
추출 및 파싱 (Extraction & Parsing): Python과 테이블 추출 라이브러리를 사용하여 비정형 의료 보고서 텍스트를 파싱하고, 원시 값(raw values)을 임상 참조 범위(clinical reference ranges)와 매핑했습니다.
환자 Q&A (RAG): 환자들이 자신의 보고서에 대해 자연어로 질문할 수 있도록 텍스트 청크(text chunks)를 벡터 스토어 (ChromaDB)에 저장했습니다.
커뮤니티 집계 (Community Aggregation): 인구 통계학적 구간(0-18, 19-30, 60+) 및 지역 구역(Urban-Central, Rural-West)별로 그룹화된 익명화된 검사 파라미터를 저장하기 위해 기본적인 SQLite 데이터베이스 스키마를 설계했습니다.
우리의 초기 개념 증명(PoC)은 단순한 Streamlit 인터페이스에서 실행되었습니다. 작동은 했지만, 우리는 이것이 프로덕션(production) 단계에 준비되지 않았음을 빠르게 깨달았습니다. 환자들에게는 AI 설명에 대한 절대적인 신뢰가 필요했고, UI는 반응성이 느껴져야 했으며, 커뮤니티 분석에는 엔터프라이즈급 개인정보 보호와 보안이 필요했습니다.
⚡ 2단계: 과제 극복 및 개선 단계 (v2.0)
개선 단계 동안, 우리는 엔지니어링을 다음 수준으로 끌어올렸습니다:
-
사용자 경험 현대화 (React 19 + Vite + SSE Streaming)
단일 스크립트 프론트엔드를 프로덕션용 React 19 + Vite 웹 애플리케이션으로 완전히 교체했습니다. AI 생성 중 발생하는 긴 대기 시간 문제를 해결하기 위해, 서버 전송 이벤트 (SSE, Server-Sent Events) 라이브 스트리밍 (/api/chat/stream)을 구현했습니다. 이제 답변은 토큰 단위로 실시간 스트리밍됩니다. -
접이식 출처 근거 제시를 통한 AI 신뢰 문제 해결
의료 분야에서 AI 환각 (hallucinations)은 용납될 수 없습니다. 이를 해결하기 위해 접이식 출처 근거 카드 (Collapsible Source Evidence Cards, ChatSourceEvidence)를 설계했습니다. 모든 AI 응답과 함께, 사용자는 명시적인 페이지 번호 배지 (Page 1, Page 2)가 포함된 압축된 발췌문을 토글하여 볼 수 있습니다. 환자들은 AI를 맹목적으로 신뢰할 필요 없이, 자신이 업로드한 보고서와 직접 대조하여 모든 주장을 검증할 수 있습니다. -
AI 엔진 업그레이드 (Google Gemini 2.5)
기반 모델 파이프라인을 Google Gemini 2.5 (추론/설명을 위한 gemini-2.5-flash 및 벡터 임베딩을 위한 gemini-embedding-001)로 업그레이드했습니다.
경량화된 직접 REST API 클라이언트를 작성함으로써, 무거운 SDK 의존성을 제거하고 API 응답 지연 시간(latency)을 획기적으로 줄였습니다.
- 엔터프라이즈 보안 및 수학적 프라이버시 (Enterprise Security & Mathematical Privacy)
의료 애플리케이션은 엄격한 데이터 보호를 요구합니다:
CodeQL 보안 강화 (CodeQL Security Hardening): 우리는 CodeQL 보안 취약점에 대비하여 백엔드 코드를 체계적으로 감사하고 강화했습니다. 경로 주입(path injection)을 방지하기 위해 엄격한 디렉토리 경로 정규화(os.path.normpath)를 구현하였고, 평문 로그 유출을 방지하기 위해 동적 자격 증명 마스킹(_mask_credentials)을 생성하여 로그에 민감 정보가 남지 않도록 했습니다.
차분 프라이버시 (Differential Privacy): 공공 보건 계획가들이 커뮤니티의 집계된 지표를 안전하게 조회할 수 있도록, 보정된 라플라스 노이즈 차분 프라이버시 (calibrated Laplace Noise Differential Privacy, ϵ=0.5)를 통합했습니다. 이를 통해 대시보드 통계로부터 개별 환자의 기록을 역공학(reverse-engineering)하는 것이 수학적으로 불가능함을 보장합니다.
- 예측적 질병 발생 분석 (Predictive Outbreak Analytics): 단순히 정적인 과거 차트를 표시하는 대신, 선형 회귀 추세 분석 (Linear Regression Trend Analysis)과 CDC ESSENCE 이상 탐지 기능을 통합했습니다. 이제 플랫폼은 30~90일간의 지역별 이상 발생률 예측치를 투영하며, 이를 통해 보건 당국은 건강 수치가 위기로 치닫기 전에 타겟팅된 의료 검진 캠프를 조직할 수 있습니다.
결과: 프로덕션 준비가 된 아키텍처 (How It Finished: A Production-Ready Architecture)
아이디어로 시작된 것이 이제는 풀스택 컨테이너화된 플랫폼이 되었습니다:
프론트엔드 (Frontend): 분할 테마 디자인 시스템과 다국어 지원(영어, 힌디어, 스페인어 등)을 갖춘 반응형 React 19 + Vite UI.
백엔드 (Backend): 헬스 엔드포인트(health endpoints), CORS 미들웨어 및 정적 자산 라우팅을 포함한 비동기 FastAPI 서버.
배포 (Deployment): Google Cloud Run의 서버리스 컨테이너 배포를 위해 멀티 스테이지 Dockerfile과 자동화된 Google Cloud Build 설정(cloudbuild.yaml)으로 패키징되었습니다.
교훈 및 향후 계획
이 플랫폼을 구축하며 우리는 책임감 있는 AI (Responsible AI)가 단순한 안전 체크리스트가 아니라 핵심 기능이라는 점을 배웠습니다. 사용자에게 투명한 출처 인용, 수학적 프라이버시 보장(mathematical privacy guarantees), 그리고 즉각적인 평이한 언어(plain-language)의 명확성을 제공함으로써, AI를 두려운 "블랙박스 (black box)"에서 신뢰할 수 있는 의료 보조 도구로 변화시킬 수 있습니다.
앞으로의 계획으로는, 스캔된 보고서의 OCR을 위한 Document AI, Vertex AI Embeddings, 그리고 기업 규모의 역학 모델링 (epidemiological modeling)을 위한 BigQuery ML을 사용하여 우리의 파이프라인을 Google Cloud 네이티브 서비스로 마이그레이션할 계획입니다.
이 빌드를 가능하게 해준 AI 도구들을 제공해 준 해커톤 주최측, 멘토들, 그리고 Google Gemini 팀에 감사의 인사를 전합니다!
GitHub 저장소: Astroidkiller/medical-report-rag
기술 스택: Google Gemini 2.5, React 19, Vite, FastAPI, Python 3.11, ChromaDB, SQLite, Docker
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기