대규모 임상 데이터 처리와 레거시 연동 테스트3
대규모 임상 데이터 처리와 레거시 연동을 위한 MSA 백엔드 최적화 경험 (AMC PROMs 구축기)
1. 도입 및 기술적 도전 과제
현대 의료의 핵심 패러다임인 '환자 중심 의료(Patient-Centered Care)'를 뒷받침하는 핵심 데이터가 바로 PROMs(환자자기평가결과)입니다. 저는 서울아산병원(AMC) PROMs 플랫폼의 백엔드 개발을 담당하며, 방대한 임상 데이터를 안정적으로 수집·분석하고 거대한 병원 코어 시스템(AMIS)과 연동하는 미션을 수행했습니다. 이 과정에서 마주한 인증 한계, 실시간 데이터 시각화 병목, 대용량 소급 계산 OOM, 장애 전파 위험이라는 네 가지 기술적 난제와 이를 아키텍처 관점에서 해결한 과정을 공유하고자 합니다.
2. HTTP Header 제약을 극복한 비표준 Payload 기반 인증 어댑터
[문제 상황: 레거시 환경의 HTTP Header 조작 한계] 최신 MSA 환경과 Spring Security는 HTTP Authorization Header를 통해 JWT를 주고받는 표준 규약을 따릅니다. 하지만 병원 코어 시스템(AMIS)은 구조적 제약으로 인해 표준 HTTP 헤더에 토큰을 실어 보낼 수 없었고, 대신 Request Body(AmcData) 내부의 특정 필드(encToken)에 암호화된 인증 정보를 담아 전송해야 했습니다.
[해결 방안: ContentCachingRequestWrapper 및 커스텀 필터 구현] 비표준 통신을 수용하면서도 내부 보안 표준을 유지하기 위해 앞단에 커스텀 Security Filter를 구현했습니다. 서블릿 특성상 InputStream은 한 번 읽으면 소실되므로, ContentCachingRequestWrapper를 적용해 Request Body를 캐싱했습니다. 필터에서 캐싱된 Body의 encToken을 추출해 Keycloak 서버로 검증한 뒤, 유효한 정보를 ThreadLocal 기반 ContextHolder에 주입했습니다. 이를 통해 외부의 비표준 연동을 수용하면서도 서버 내부는 완벽히 표준 권한 제어 흐름을 따르는 인증 어댑터를 완성했습니다.
3. 실시간 임상 데이터 시각화를 위한 Kafka & CQRS 패턴 도입
[문제 상황: 복잡한 의학 수식 계산에 따른 실시간 DB 병목] 환자가 문진을 제출하고 진료실에 들어오기 전, 의사의 모니터에는 이미 통증 지수나 삶의 질(QoL) 변화 추이가 시각화되어야 합니다. 의료진이 대시보드를 열 때마다 과거의 방대한 설문 응답 테이블을 Join하고 의학적 규칙을 계산한다면 심각한 조회 지연(Latency)이 발생해 사용자에게 불편함을 제공합니다.
Eric
