Ruby로 구현된 일본의 복잡한 치과 의료 시스템 DENTIS 개발 사례

How Ruby Powers One of the Most Complex Healthcare Systems in the World

작성자
발행일
2025년 12월 30일

핵심 요약

  • 1 DENTIS는 일본의 복잡한 의료 보험 및 치과 진료 시스템을 Ruby 기반의 클라우드 플랫폼으로 성공적으로 모델링하여 운영 효율성을 극대화했습니다.
  • 2 ActiveRecord 콜백의 한계를 극복하기 위해 Interactor 기반의 명시적 워크플로우 엔진을 도입하여 비즈니스 로직의 예측 가능성과 유지보수성을 확보했습니다.
  • 3 치아 상태 변화의 복잡성을 해결하기 위해 이벤트 소싱과 시간 기반 쿼리를 활용한 SQL 기반의 이벤트 기록 시스템을 구축하여 과거 이력의 정확성을 보장했습니다.

도입

메들리(Medley, Inc.)의 엔지니어링 매니저이자 치과 클리닉 사업부 책임자인 마키 토시오는 2025년 RubyWorld Conference에서 'Ruby powering Dental DX – Development case of the cloud dental system DENTIS'라는 제목으로 강연을 진행했습니다. 이 강연은 Ruby가 프레임워크나 문법을 넘어 일본의 복잡한 의료 규제, 재정, 임상 시스템을 모델링하는 데 어떻게 활용될 수 있는지 보여주며, 현대 헬스케어 분야에서 Ruby의 인상적인 실제 적용 사례를 제시했습니다. DENTIS는 Medley, Inc.가 개발한 클라우드 기반 치과 진료 플랫폼으로, 기존 온프레미스 시스템을 대체하고 예약, 접수, 임상 기록, 치료, 보험 청구, 결제 등 모든 과정을 통합하여 환자 경험과 병원 효율성을 개선합니다.

일본의 의료 청구 시스템은 연령별 규칙, 소득별 본인 부담금, 공공 보조금, 고액 의료비 상한제, 희귀 질환 지원금 등 여러 보험 시스템이 복잡하게 얽혀 있어 계산이 매우 어렵습니다. DENTIS는 이러한 복잡성을 해결하기 위해 Ruby를 활용하여 다음과 같은 기술적 접근 방식을 채택했습니다.

1. 복잡한 일본 치과 청구 시스템 모델링

  • 보험 모델링: 환자당 단일 보험 대신 시간 기반 기록으로 보험을 모델링합니다. 각 보험 및 공공 지원금 항목은 시작일, 종료일, 본인 부담률, 소득 범주, 고액 계산 규칙을 포함합니다.

  • 청구 처리: 청구 시 해당 날짜에 활성화된 모든 보험 및 보조금을 선택하고, 지불자 조합을 구성하며, 정책 규칙을 적용하고, 비용을 할당하여 최종 환자 부담 금액을 계산합니다. 이는 실제 정책 로직을 반영하는 Ruby 기반 도메인 엔진으로 구현되었습니다.

2. ActiveRecord 콜백의 한계와 워크플로우 엔진 도입

  • 콜백의 문제점: 초기 DENTIS는 ActiveRecord 콜백을 사용하여 비즈니스 로직을 구현했으나, 단일 의료 행위가 점수 재계산, 구강 상태 변경, 보험 재평가, 청구 재계산 등 수많은 연쇄 반응을 일으켜 숨겨진 실행 순서, 순환 종속성, 예측 불가능한 부작용을 초래했습니다.

  • Interactor 기반 워크플로우: 팀은 콜백 대신 클린 아키텍처의 오케스트레이션 계층인 Interactor를 도입했습니다. 각 비즈니스 액션은 트랜잭션 안전 파이프라인(예: 치료 추가 → 유효성 검사 → 보험 확인 → 치아 업데이트 → 보철물 업데이트 → 점수 재계산 → 수정자 적용 → 영구 저장 → 알림)으로 구성됩니다. 이는 명시적인 실행 순서, 실패 시 전체 롤백, 격리된 비즈니스 규칙, 예측 가능한 동작을 제공하며, Ruby의 표현력 덕분에 규제 변화에도 불구하고 워크플로우를 가독성 높고 유지보수하기 쉽게 만듭니다.

3. 치아 상태 이력 관리의 복잡성 해결

  • 치아 도메인의 도전: 치아는 발치, 충전, 크라운, 분할, 이식 등 다양한 상태 변화를 겪으며, 보험 적용은 각 날짜의 정확한 치아 상태에 따라 달라집니다.

  • 스냅샷 시스템의 실패: 초기에는 모든 변경 후 전체 치아 스냅샷을 저장했으나, 과거 치료가 수정될 경우 모든 미래 스냅샷이 잘못되어 이력 수정이 계산적으로나 논리적으로 불가능해지는 문제가 발생했습니다.

  • 이벤트 기반 치아 시스템: 최종 해결책은 각 치아가 자체 이벤트 이력(치아 ID, 상태, 타임스탬프, 순서, 연결된 치료)을 저장하는 것이었습니다. 특정 날짜의 구강 상태를 재구성하기 위해 SQL은 해당 날짜 이전의 각 치아에 대한 최신 기록을 선택합니다. 이는 Rails와 PostgreSQL을 통해 완전히 구현된 이벤트 소싱, 시간적 쿼리, 완전한 이력 정확성을 제공합니다.

결론

DENTIS는 고도로 규제되고 끊임없이 변화하며 도메인 지식이 매우 중요한 시스템입니다. Ruby는 도메인 모델링, 규칙 엔진, 클린 아키텍처, 규제 변화에 따른 리팩토링에 탁월한 성능을 발휘하며, 이러한 시스템에 이상적인 도구임을 입증했습니다. 메들리(Medley, Inc.)가 구축하고 마키 토시오가 RubyWorld Conference 2025에서 발표한 DENTIS 플랫폼은 Ruby가 실제 세계의 복잡성을 대규모로 해결할 수 있음을 보여주는 가장 강력한 사례 중 하나입니다. 이는 소프트웨어가 법률, 의학, 정책과 같은 인간 시스템을 모델링해야 할 때 Ruby가 여전히 우리가 가진 가장 강력한 도구 중 하나임을 상기시켜 줍니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!