CDSS 개발 보고서, 비동기 처리(Celery) 도입 및 통합 API 디버깅
CDSS 개발 보고서, 비동기 처리(Celery) 도입 및 통합 API 디버깅
주제: React-Django 기반 CDSS 시스템의 주요 기능 구현 및 안정화. LIS(검사정보시스템) 연동, 오믹스 데이터 분석 파이프라인 연결, 그리고 이 과정에서 발생한 복합적인 문제들을 해결하고 비동기 처리 시스템을 성공적으로 구축했다.
1. 주요 목표
- DUR (약물 상호작용) 기능 구현: 식약처 Open API를 연동하여 약물 상호작용 검사 기능의 백엔드 기반을 마련한다.
- 오믹스 데이터 업로드 기능 고도화: 단일 파일 업로드에서, 여러 종류의 오믹스 파일을 개별적으로 업로드하는 2단계 워크플로우로 개선한다.
- AI 예측 파이프라인 연동: 오프라인에서 학습된 AI 모델(
ml_models)을 실제 서비스(온라인)에서 사용할 수 있도록 Django와 연결한다. - 전체 시스템 안정화: 의사 및 간호사 페이지에서 발생하는 데이터 불일치 및 기능 오류를 해결한다.
2. 진행 내용 및 해결된 문제
오늘은 시스템의 핵심 기능을 구현하고 안정화하는 과정에서 발생한 여러 복합적인 문제들을 체계적으로 해결했다.
가. 데이터베이스 마이그레이션 상태 불일치 해결
- 문제점:
lis_integration앱의 모델 구조를 대폭 변경(LabOrderSync->LabOrder)한 후, Django의 마이그레이션 기록과 실제 데이터베이스 스키마가 꼬이는 현상 발생.migrate명령어 실행 시Table ... doesn't exist에러에 직면. - 해결 과정:
migrate <app_name> zero --fake명령으로 특정 앱의 마이그레이션 기록을 초기화.migrations폴더 내의 기존 마이그레이션 파일들을 수동으로 삭제.makemigrations <app_name>명령으로 최신 모델 기준의 새로운 ‘초기 설계도’(0001_initial.py)를 재생성.migrate를 실행하여 깨끗한 상태에서 데이터베이스에 최종 적용.
- 결과: 복잡하게 꼬였던 마이그레이션 문제를 해결하고, 모든 앱의 데이터베이스 스키마를 최신 코้드와 완벽하게 동기화했다.
나. 비동기 처리 시스템 (Celery & Redis) 도입
- 문제점: AI 예측과 같은 시간이 오래 걸리는 작업을 API 요청/응답 사이클 내에서 동기적으로 처리할 경우, 사용자는 수십 초간 응답을 기다려야 하는 등 사용자 경험(UX)이 심각하게 저하됨.
- 해결 과정:
ModuleNotFoundError: No module named 'celery'에러를 시작으로, 비동기 작업 처리를 위한 Celery 도입의 필요성을 확인.pip install "celery[redis]"로 파이썬 라이브러리를 설치.sudo apt-get install redis-server로 메시지 브로커 역할을 할 Redis 서버를 VM에 설치하고 실행.- Django
settings.py,celery.py,__init__.py에 Celery 연동을 위한 표준 설정을 모두 완료.
- 결과: 두 개의 터미널(Django 서버, Celery 워커)을 사용하는 비동기 처리 환경을 성공적으로 구축했다. 이제 무거운 작업은 백그라운드에서 처리하여 사용자에게 즉각적인 응답을 줄 수 있게 되었다.
다. 백그라운드 작업(Celery Task) 디버깅
- 문제점: Celery 워커가 작업을 수신했지만, 코드 내부의
AttributeError로 인해 중간에 실패.'LISAPIClient' object has no attribute 'create_lab_test': 서비스 로직이 호출하는 메소드 이름과 실제 클라이언트의 메소드 이름(create_lab_order)이 다른 문제.'Settings' object has no attribute 'ML_MODELS_DIR': 예측 서비스가 모델 파일 경로를settings.py에서 찾지 못하는 문제.
- 조치:
lis_integration/services.py에서 호출하는 메소드 이름을 실제lis_client.py에 정의된 이름으로 수정.cdss_config/settings.py에ML_MODELS_DIR변수를 명시적으로 추가.
- 결과: Celery 워커가 에러 없이 전체 분석 파이프라인을 끝까지 실행할 수 있게 되었다.
3. 주요 성과
- AI 모델 서빙 파이프라인 완성: 간호사가 React 화면에서 환자 선택 -> 암 종류 선택 -> 오믹스 파일 종류별 업로드 -> Django가 요청을 받아 Celery에 작업 전달 -> Celery 워커가 저장된 ML 모델을 로드하여 예측 수행 -> 결과를 DB에 저장하는 End-to-End 파이프라인을 성공적으로 구축했다.
- 데이터 무결성 및 일관성 확보: Django 관리자 및 Shell을 통해
Profile모델의role데이터 불일치 문제를 해결했으며, 의사/간호사 대시보드에서LabOrder,OmicsRequest등 다양한 데이터를 통합적으로 조회할 수 있는 기반을 마련했다. - 안정적인 비동기 처리 환경 구축: Celery와 Redis 도입으로, 향후 추가될 모든 시간이 오래 걸리는 작업을 안정적으로 처리할 수 있는 확장성 높은 아키텍처를 확보했다.
4. 향후 계획
- 외부 API 연동 강화: 현재 더미 데이터로 처리되고 있는 LIS 및 DUR API 연동 부분을 실제 API 클라이언트 로직으로 완전히 교체한다.
- AI 예측 결과 시각화 고도화:
AnalysisResultViewer컴포넌트에서 바이오마커 정보(SHAP 값)를 이용한 차트 등, 더 직관적인 시각화 기능을 추가한다. - 전체 기능 테스트 및 안정화: 구현된 모든 기능에 대해 역할별(의사, 간호사 등) 시나리오 테스트를 진행하고 버그를 수정한다.
This post is licensed under CC BY 4.0 by the author.