모비닥-EMR 연동 프로젝트 개발 경험: 외부 시스템 연동 설계와 구현
병원은
의료법 제22조에 따라 환자의 진료 기록을 작성하고 보관해야 합니다. EMR(Electronic Medical Record)시스템은 환자의 의료 정보를 전자적으로 관리하여 수기 작업을 최소화하고 문서 관리 비용을 절감 하는 등 병원 운영에 필수적인 시스템입니다.
모비닥 통합 클라이언트를 사용하는 대부분의 병원은 모비닥과 EMR을 함께 사용합니다. 모비닥 통합 클라이언트는 환자가 사용하는 애플리케이션을 통해 접수된 진료를 알리고, 원격 진료도 가능하다는 장점이 있습니다. 하지만 모비닥을 통해 접수된 환자 및 진료 정보를 EMR 시스템에 수동으로 옮겨야 하는 번거로움도 있었습니다.
이런 불편점을 개선하기 위해 EMR 업체와 협약을 맺고 모비닥과 EMR간 진료를 자동으로 연동하는 프로젝트를 진행하였습니다. 이번 프로젝트는 프로세스 설계부터 기능 개발, 테스트, 배포까지 전 과정을 홀로 담당한 프로젝트였습니다.
Keep
1. 지속적인 개선
모비닥과 EMR 접수 연동 프로젝트는 데이터베이스 설계부터 기능 구현까지 전담하여 개발하였습니다. 프로젝트를 진행하면서 “더 나은 데이터베이스 구조와 연동 프로세스가 무엇일까?” 를 계속해서 고민하고 개선하였습니다.
- 초기 단계는 프로세스를 충실히 따르되 복잡성을 최소화하여 간결하게 구현하였습니다.
- 이후 동료 개발자분들의 코드 리뷰를 요청드렸습니다. 피드백을 통해 코드 가독성을 향상하고 성능 최적화에 중심을 둔 리팩토링을 진행하였습니다.
- 최근에는 추상화 적용하여 향후 다양한 EMR 시스템과 연동을 고려한 확장성 있는 구조로 개선하였습니다.
2. 테스트 추가하기
EMR 연동 프로젝트 중 가장 어려웠던 부분은 테스트였습니다.
- 우선 테스트를 위해 필요한 텍스트 픽스처가 너무 많았습니다. 연동 테스트를 위해서 병원, 환자, 의사 등 준비해야할 텍스트 픽스처가 많이 필요했습니다.
- 테스트 코드 작성 자체에 익숙하지 않았습니다. 무엇을, 어떻게 테스트 해야 할지 막막하였습니다.
이에 초기에는 시나리오 기반 수동 테스트를 진행하였습니다.
- 총 38개 주요 EMR 연동 테스트 시나리오를 정의하고 확인하였습니다.
- 단점은 요구사항이 변경될 때 마다 수동으로 테스트를 수행하는 것은 시간 소모가 큰 작업이었습니다.
테스트 코드의 중요성을 깨닫고, 테스트 코드 작성을 해야하는 이유와 방법에 대해 학습하였습니다.
- 사이드 프로젝트에서 테스트 코드 작성을 연습했습니다.
- 텍스트 픽스처를 메소드화하여 테스트 코드 작성 효율을 향상시켰습니다.
- EMR의 상태가 작성한 테스트의 결과에 영향을 미치지 않도록 Mock 프레임워크를 활용하였습니다.
이러한 경험을 통해 요구사항에 맞게 잘 구현이 되었는지를 빠르고 반복적으로 검증할 수 있었습니다. 리팩토링도 과감하게 시도할 수 있는 장점도 느꼈습니다.
3. 문서화
프로젝트 진행사항을 문서화하여 얻는 장점이 크다는 것을 경험하였습니다.
- 외부 시스템과 용어 차이로 인한 미스커뮤니케이션을 줄일 수 있었습니다.
- 예) 모비닥에서는 접수, 완료를 EMR에서는 수납대기, 수납 완료로 표현합니다.
- 회의록을 작성하고 공유하여 미스커뮤니케이션을 방지합니다.
- 논의 내용과 주요 결정사항을 공유하여 프로젝트의 진행도를 파악하고 일관된 개발 방향을 유지할 수 있었습니다.
- 다른 프로젝트와 컨텍스트 스위칭 시 업무 및 진행 사항 파악이 빨라졌습니다.
Problem
1. 예외 처리가 부족하다.
현재 모비닥과 EMR 연동 시스템은 환자 및 진료 연동과 같은 핵심 기능에 대해서만 예외를 로깅하고 있습니다. 다양한 연동 실패 케이스를 안정적으로 처리할 수 있도록 더 개발되어야 합니다.
- 주요 연동 지점에 대한 추가적인 예외 처리 추가한다.
- 실패 유형 별 상세 로깅을 남긴다.
- 연동 실패 시 실시간 알림(슬랙)을 전송한다.
- 연동 실패 시 재시도 로직 또는 대체 프로세스을 실행시킨다.
2. 캐시는 신중하게 적용해야한다.
EMR과 연동된 병원 정보는 읽기 작업이 빈번하고 수정은 상대적으로 적기 때문에 성능 향상을 위한 로컬 캐시를 도입하였습니다. 하지만 다중 인스턴스 배포 환경에서 예상치 못한 문제가 발생하였습니다. 2개의 파드 중 1개 파드만 캐시 클리어되어 서버 간 데이터 정합성이 깨졌습니다.
스테이징 배포 환경은 서버 인스턴스를 1개로 사용하고 있어서 이와 같은 다중 인스턴스 환경에서 데이터 정합성에 문제가 생기는 케이스를 대비하지 못하였습니다. 우선, 성능 저하를 감수하고 로컬 캐시 기능을 제거하였습니다.
향후 Redis와 같은 분산 캐시 시스템 도입을 검토하여 다중 인스턴스 환경에서의 데이터 일관성과 성능을 동시에 확보할 계획입니다. 이번 경험을 통해 캐시 시스템 도입 시 성능 향상 뿐 만 아니라 배포 환경, 데이터 정합성 등 다각도의 신중한 검토가 필수적이라는 것을 배웠습니다.
Try
1. 개발 문서의 지속적인 최신화
EMR 연동 프로젝트의 초기 프로세스 설계 이후 크고 작은 변경 사항이 있었습니다. 그러나 이러한 변경사항들이 개발 문서에 적시에 반영되지 않아, 현재 개발 문서의 내용과 실세 시스템 코드 간에 약간의 불일치가 존재합니다. 업데이트 되지 않은 개발 문서는 유지보수를 더 어렵게 할 수 있기 때문에 빠른 시일 내 개발 문서를 최신화 하고자 합니다.
-[x] 연동 프로세스와 ERD 해설서 최신화 -[x] 주요 변경사항 발생 시 코드 배포와 동시에 관련 개발 문서 업데이트
2. 코드 품질 향상 시키기
외부 시스템 연동 프로세스의 코드 품질을 향상 시키기 위해 다음과 같은 계획을 세웠습니다.
- 연동 실패 케이스와 같이 테스트가 미비한 부분을 보완합니다.
- 연동 실패 테스트 케이스를 통과시키기 위해 연동 실패에 대한 예외 처리 로직을 추가 합니다.
- 다양한 외부시스템(EMR)과 연동 될 수 있도록 연동 프로세스를 추상화합니다.
- 변경에 유연하고 재사용성이 높은 코드 구조를 위해 객체 지향의 원칙을 학습하고 적용합니다.
2024년 5월 건강보험 본인확인 의무화 제도 시행 등의 이유로 EMR 연동 추가 개발은 중단되었지만, 목표로 삼았던 외부 요청 실패 처리와 프로세스 추상화는 다른 프로젝트에 적용해 코드 품질을 향상시킬 계획입니다.