- 진행 기간
- 2022 ~ 2025
- 상태
- 운영 완료
Overview
전처리한 DICOM 영상을 딥러닝 모델에 전달하고, 반환된 폐결절 검출 결과를 판독 뷰어에 시각화하는 웹 어플리케이션입니다.
Tech Stack
ReactTypeScriptCornerstone3DReact QueryZustandWebSocket
주요 작업
- React·Cornerstone.js 기반 흉부 CT DICOM 판독 뷰어를 개발하여, 전처리한 DICOM 영상을 VUNO Lung CAD 딥러닝 모델에 전달하고 반환된 폐결절 검출 결과(결절 목록·영상 내 위치·Segmentation)를 시각화
- Cornerstone3D 출시에 맞춰, 2D Cornerstone에서 픽셀 조작으로 3축(axial·coronal·sagittal) 단면을 구현하던 기존 뷰어를 Cornerstone3D 기반으로 마이그레이션
- 기존 GraphQL(Apollo Client) 기반 프론트–백엔드 통신을 REST API 구조로 전환
- WebSocket 이벤트별 갱신 정책을 설계. 데이터 변경 이벤트를 페이지·발신 사용자에 따라 전체 refetch / 상태값만 갱신 / 사용자 확인 후 갱신으로 분기해, 불필요한 재조회 없이 화면 일관성 확보
- 동시 판독 시 발생하는 판독 결과 충돌을 막기 위해 백엔드와 Lock 획득·해제 규약(WebSocket 메시지 및 Release API)을 협의하고, 프론트엔드 측 처리를 구현
- 장시간·연속 판독 시 뷰어가 무한 로딩되거나 강제 종료되던 문제를 추적해 두 가지 원인을 해소. 영상 렌더링용 볼륨과 세그멘테이션용 볼륨이 각각 수백 MB 규모의 캐시를 이중으로 점유하던 것을 확인해 세그멘테이션을 표시하지 않는 배포 환경에서는 해당 볼륨을 생성하지 않도록 조건화하고, 뷰어 언마운트 시 revokeObjectURL 미호출과 DICOM 상태 미초기화로 메모리가 누적되던 부분은 cleanup 처리로 제거
- Segmentation Threshold 변경 시 매 조작마다 좌표를 전역 상태에 기록하던 방식을 viewport의 present/reference를 저장한 뒤 camera reset 시점에 복원하는 방식으로 재설계하여, 임계값 변경 후에도 zoom·pan 등 판독 컨텍스트가 유지되도록 개선
- PSP 파트너 연동을 위한 Longitudinal(추적검사) 신규 API를 설계하여, baseline·follow-up CT 간 결절 매칭과 시계열 변화 추적을 지원