OHS 및 Google Cloud를 사용하여 Android 앱에서 FHIR 데이터 관리

1. 소개

이 Codelab에서는 OHS (Open Health Stack) 및 Google Cloud Healthcare API를 사용하여 안전하고 확장 가능하며 규정을 준수하는 혁신적인 의료 솔루션을 만드는 방법을 알아봅니다. 이러한 강력한 도구의 조합은 의료 종사자와 개발자가 환자 치료 및 치료 결과를 크게 개선할 수 있는 데이터 기반 솔루션을 만들 수 있는 능력을 제공합니다.

사용자가 Google Cloud에서 FHIR 환자 기록을 관리할 수 있도록 Android-FHIR SDK를 사용하는 모바일 앱에서 Open Health Stack 및 Google Cloud Healthcare API의 강력한 기능을 활용하려고 합니다.

구현 단계를 자세히 살펴보겠습니다.

빌드할 항목

이 구현에서

  • 구조화된 데이터 캡처 라이브러리를 사용하여 설문지를 렌더링하고 FHIR Engine 라이브러리를 사용하여 응답의 FHIR 콘텐츠를 저장합니다.
  • 그러면 데이터가 Cloud Healthcare API를 사용하여 Cloud FHIR 스토어에 업로드됩니다.
  • 업로드하기 전에 먼저 Firebase를 사용하여 본인을 인증합니다.

8514f90f016ecfc0.png

위의 다이어그램은 흐름을 나타냅니다. 각 구성요소에 관한 자세한 설명은 블로그를 참고하세요.

2. 요구사항

  • 브라우저(Chrome 또는 Firefox 등)
  • 결제가 사용 설정된 Google Cloud 프로젝트
  • Android 스튜디오 최신 버전
  • Android Emulator 설정 (실제 Android 기기도 사용할 수 있음)

프로젝트 만들기

  1. Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
  2. Cloud 프로젝트에 결제가 사용 설정되어 있어야 하므로 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
  3. 필요한 API (BigQuery, Healthcare API) 사용 설정

Cloud Shell 활성화

  1. bq가 사전 로드되어 제공되는 Google Cloud에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다.

Cloud 콘솔에서 오른쪽 상단에 있는 Cloud Shell 활성화를 클릭합니다.

51622c00acec2fa.png

  1. Cloud Shell에 연결되면 인증이 완료되었고 프로젝트가 이미 프로젝트 ID로 설정된 것을 확인할 수 있습니다. 프로젝트가 설정되지 않은 경우 다음 명령어를 사용하여 설정합니다.
gcloud config set project <YOUR_PROJECT_ID>

gcloud 명령어 및 사용법은 문서를 참조하세요.

3. Healthcare API 설정

  1. Healthcare API가 사용 설정되어 있는지 확인합니다. Google Cloud Console API 라이브러리로 이동하여 Healthcare API를 검색한 다음 '사용 설정'을 클릭하면 API가 실행되어 Healthcare 서비스 계정이 프로젝트에 추가됩니다.
  2. 서비스 계정에 BigQuery 관리자 권한을 부여합니다. Cloud Shell 터미널에서 아래 gcloud 명령어를 실행하여 권한을 부여합니다.
gcloud projects add-iam-policy-binding <<YOUR_PROJECT_ID>> \
--member=serviceAccount:service-<<PROJECT_NUMBER>>@gcp-sa-healthcare.iam.gserviceaccount.com  --role=roles/bigquery.admin

참고: 콘솔에서 PROJECT_ID 및 PROJECT_NUMBER를 찾을 수 있습니다. ID는 문서를 참조하세요.

Healthcare 데이터 세트 만들기

Cloud Shell에서 아래 명령어를 실행하여 Healthcare 데이터 세트를 만듭니다.

gcloud beta healthcare datasets create <<DATASET_ID>> --location=us-central1

위치를 리전으로 설정합니다.

FHIR Datastore 만들기

Cloud Shell에서 아래 명령어를 실행하여 FHIR Datastore를 만듭니다.

gcloud beta healthcare fhir-stores create <<FHIR_STORE>> \
  --dataset=<<DATASET_ID>> --location=us-central1 --version=r4

위치를 리전으로 설정합니다.

4. BigQuery 설정 및 스트리밍

여기에서는 BigQuery 및 BQML의 강력한 기능을 활용하여 FHIR 스토어 데이터를 BigQuery 데이터 세트에 저장하는 방법을 통해 쿼리, 프로그래밍, 분석할 수 있습니다.

BigQuery 데이터 세트 만들기

BigQuery 데이터 세트는 테이블의 모음입니다. 데이터 세트의 모든 테이블은 동일한 데이터 위치에 저장됩니다. 커스텀 액세스 제어를 연결하여 데이터 세트 및 해당 테이블에 대한 액세스를 제한할 수도 있습니다.

Cloud Shell에서 아래 명령어를 실행합니다.

bq mk --location=us-central1 --dataset <<PROJECT_ID>>:<<BQ_DATASET>>

위치를 리전으로 설정합니다.

BigQuery 스트리밍 만들기

FHIR 저장소에서 FHIR 리소스가 생성, 업데이트, 패치 또는 삭제될 때마다 리소스 변경사항을 BigQuery로 내보내려면 스트리밍이 필요합니다. 저장소마다 스트리밍 구성을 최대 10개까지 사용할 수 있습니다.

  1. Google Cloud Healthcare 콘솔 브라우저 페이지로 이동
  2. 새로 만든 데이터 세트를 클릭합니다.
  3. 새로 만든 데이터 스토어 7acaa364337086aa.png를 클릭합니다.
  4. '새 스트리밍 구성 추가'를 클릭합니다.

caa2cc881d3406aa.png

  1. 목록에서 새로 만든 BigQuery 데이터 세트를 선택하고 스키마 유형으로 'Analytics V2'를 선택합니다. 리소스 유형은 'Patient' 원하는 만큼 선택하고 완료를 클릭합니다.

1e038c694fcca1ef.png

이상입니다. 이제 FHIR 스토어 데이터를 저장하고 BigQuery로 스트리밍할 준비가 되었습니다.

5. Cloud Functions (Healthcare API를 사용하여 FHIR Datastore에 R4 데이터 쓰기)

Cloud Functions를 사용하면 서버리스 방식으로 코드를 작성하고 클라우드에 배포할 수 있습니다. 사용한 만큼만 지불하는 확장 가능하며, 이벤트 중심이며, 기술 및 언어 지원 측면에서 개방적입니다. 더 많은 기능은 문서를 참고하세요.

여기서 작성할 함수는 Cloud Healthcare API를 사용하여 FHIR R4 형식으로 들어오는 데이터를 인증하고 FHIR Data Store에 쓰는 것입니다. Cloud 함수를 만들려면 다음 안내를 따르세요.

  1. Cloud 함수로 이동하여 함수 만들기를 클릭합니다.
  2. 이름을 fhir-datastore-proxy로, 리전을 us-central1로, 인증 옵션을 '인증 필요'로 설정하세요.
  3. 런타임, 빌드, 연결, 보안 설정을 펼칩니다. 런타임 환경 변수 5개를 추가합니다.

이름: CLOUD_FUNCTIONS_ENDPOINT | 값: 함수의 URL 엔드포인트입니다. 위의 인증 블록에서 확인할 수 있으며 형식은 https://us-central1-PROJECT_ID.cloudfunctions.net/fhir-datastore-proxy입니다.

이름: PROJECT_ID | 값: 프로젝트 ID

이름: DATASET_LOCATION | 값: FHIR Datastore의 위치

이름: DATASET_ID | 값: Healthcare Datastore ID

이름: FHIR_STORE_ID | 값: FHIR 스토어 ID

  1. '다음'을 눌러 코드를 추가할 다음 페이지로 이동합니다.
  2. 이제 인라인 편집기가 표시되고 언어로 Java 17을 선택한 다음 HelloHttpFunction.java 클래스로 이동합니다. 이름을 FhirDatastoreProxy.java로 바꿉니다. 진입점 이름을 gcfv2.FhirDatastoreProxy로 바꿔야 합니다.
  3. 저장소에서 코드를 복사하여 인라인 편집기에 붙여넣습니다.
  4. pom.xml 파일로 이동하여 저장소의 pom 파일을 인라인 편집기에 복사합니다.
  5. 배포를 클릭하면 함수가 생성되고 곧 실행됩니다.

참고:

  1. 이 함수에 사용되는 Cloud Healthcare API는 애플리케이션 기본 사용자 인증 정보를 사용하여 Healthcare API로 들어오는 요청을 인증합니다.
  2. Android 애플리케이션에서 호출할 수 있도록 배포된 함수 URL 저장 지금까지 Android 앱이 Healthcare API를 독립적으로 사용하여 BigQuery에 FHIR 데이터를 쓰는 데 필요한 모든 요소를 만들었습니다. 이제 모든 요소가 연결되었으며 설문지 제출 시 API가 호출되는지 확인해 보겠습니다.

6. Android 프로젝트 및 Firebase 설정

최신 버전의 Android 스튜디오와 Android Emulator 설정을 사용할 예정입니다 (실제 Android 기기도 사용 가능). 준비가 되면 다음 단계를 따르세요.

  1. FHIR 앱 예시 저장소 클론: https://github.com/google/fhir-app-examples
  2. Android 스튜디오를 열고 Import Project (Gradle, Eclipse ADT 등)를 선택한 다음, 앞서 다운로드한 소스 코드에서 cloudfunction/ 폴더를 선택합니다. app/google-services.json을 엽니다. 비어 있으며 채워야 합니다.

./gradlew signingReport를 사용하여 SHA-1 키를 생성하고 디버그 변형 아래의 SHA1 필드를 기록합니다.

Firebase Console을 사용하여 Firebase Console을 사용하여 Firebase에 앱을 추가합니다 (1단계 및 2단계 따름). '디버그 서명 인증서 SHA-1' 필드에 이전 단계의 값을 입력합니다.

google-services.json을 다운로드하고 Firebase의 콘텐츠를 앱 폴더의 빈 파일로 교체합니다.

Firebase SDK가 이미 빌드 Gradle 파일에 추가되었습니다.

  1. FhirApplication.kt를 열고 baseUrl 필드를 Cloud 함수의 URL로 설정합니다.
  2. 'Sync your project with Gradle files'를 선택합니다. Android 스튜디오 툴바에서

이제 구현의 설정 및 종속 항목 포함 부분을 완료했습니다.

7. 설문지 설정 및 응답

저장소에 설문지 설정이 이미 설정되어 있습니다. 이제 코드를 살펴보겠습니다.

  1. app/src/main/res/layout/activity_main.xml 파일의 ConstraintLayout 내에 FragmentContainerView가 있는지 확인합니다.
  2. QuestionnaireFragment에 프래그먼트를 렌더링하는 JSON 인코딩된 FHIR 설문지가 있는지 확인하세요.

이 경우 JSON-' new-patient-registration-paginated.json&quot; 프래그먼트를 렌더링해야 합니다. MainActivity.kt, AddPatientFragment.kt, AddPatientViewModel.kt 파일을 확인합니다.

프래그먼트, JSON, 모델을 확인했으므로 이제 앱을 실행하고 설문지 필드에 답변을 입력해 봅니다.

문자열, 날짜, 숫자 필드, 기타 조건이 확인됩니다.

앱을 실행하고 로그를 확인하여 레코드가 생성되었는지 확인할 수 있습니다.

9e1bb440074f1a88.png

프래그먼트 사용에 관한 자세한 내용은 여기를 참고하세요. 이것으로 설문지 프래그먼트와 응답 설정에 대해 알아보았습니다.

8. FHIRStore 및 BigQuery 데이터 세트 결과 표시

이제 설정과 업데이트를 모두 설정했으므로 'Sync Project with Gradle Files'를 클릭합니다. 완료되면

  1. Android Emulator에서 앱을 실행하고 설문지가 로드되는지 확인합니다.
  2. 질문에 답하고 상단의 제출을 클릭하세요.
  3. '환자가 저장되었습니다'라는 메시지가 표시됩니다. 앱에서

FHIR 저장소 결과 보기

Google Cloud Healthcare FHIRViewer 콘솔로 이동합니다.

1064f03b4e1e45f5.png

FHIR 스토어를 선택하고 쿼리한 다음 '검색 실행'을 누르면 바로 아래에 검색 결과가 표시됩니다. 37a070480a06362c.png

BigQuery 데이터 세트 결과 보기

Google Cloud BigQuery 콘솔로 이동한 후 탐색기 창에서 이 프로젝트용으로 만든 데이터 세트로 이동합니다.

7c483ec6d578b8cd.png

'미리보기'를 클릭하면 BigQuery 데이터 세트의 Healthcare FHIR 스토어에서 찾은 것과 동일한 수치와 결과 데이터가 표시됩니다.

faafeae4a837a41c.png

이제 방금 클라우드 데이터 세트에 저장한 FHIR 데이터로 BigQuery SQL, 분석, ML을 수행할 수 있습니다.

9. 검색 및 오프라인 기능

OHS 기반 Android FHIR SDK 앱에서 오프라인 기능을 보장하려면 여기에서 설명하는 구현에서 사용 설정해야 하는 디자인 가이드라인을 따라야 합니다.

FHIR 리소스 검색에는 두 가지 방법이 있습니다.

  1. Google Cloud 콘솔의 FHIR 뷰어
  2. GET 또는 POST 요청을 사용하는 FHIR 검색 메서드

10. 앱 데모

이제 앱이 개발되었으니 사용해 보고 클라우드에서 결과를 확인해 보겠습니다.

11. 삭제

이 게시물에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.
  2. 프로젝트 목록에서 삭제하려는 프로젝트를 선택한 후 '삭제'를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 '종료'를 클릭하여 프로젝트를 삭제합니다.

12. 축하합니다

축하합니다. 이 프로젝트에서는 Cloud Healthcare API를 사용하여 클라우드 의료 FHIR 스토어 및 BigQuery 데이터 세트에 환자 FHIR 데이터를 저장하고 쿼리하는 Android 애플리케이션을 단 7단계만으로 성공적으로 만들었습니다.

  1. Android 앱 설정
  2. Google Cloud Healthcare API 설정
  3. Healthcare 데이터 세트 및 FHIR Datastore 생성됨
  4. BigQuery 데이터 세트 생성됨
  5. BigQuery 데이터 세트에 FHIR Datastore 데이터를 쓰도록 BigQuery 스트림을 구성했습니다.
  6. FHIR Datastore에 R4 데이터를 쓰는 Cloud 함수를 배포했습니다.
  7. 설문지 응답 제출 시 Android 앱에서 Cloud Functions가 트리거됨

단계를 명확히 이해했으니 이제 환자 FHIR 편집이 클라우드에 동기화될 때도 동일한 단계를 시도해 보세요.