참고: 이 게시물은 버전 5.5 프리뷰 릴리스 기준의 Couchbase Analytics 데이터 정의 언어를 사용합니다. 최신 버전의 업데이트 및 주요 변경 사항에 대한 자세한 내용은 다음을 참조하세요. 카우치베이스 애널리틱스 서비스 변경 사항.
지난 가을 Couchbase Connect 실리콘밸리 컨퍼런스를 위해 구축된 이 애플리케이션은 동적 N1QL 쿼리, 오프라인 모바일, IoT 센서, 분석을 통한 임시 쿼리, 데이터 센터 간 복제, 장애 복구, 퍼지 텍스트 매칭 및 기타 여러 기능을 통합하고 있습니다.
이 글에서는 데모를 구성하고 실행하는 모든 단계를 살펴보겠습니다. 명령줄을 통해 이 작업을 수행하겠습니다. (일부 단계에서는 cURL 도구)
비슷한 내용을 다룬 동영상으로 바로 연결되는 링크를 곳곳에 넣었습니다.
리포지토리 복제 및 작업 디렉토리 설정
데모 코드는 다음에서 찾을 수 있습니다. GitHub. 리포지토리를 복제하고 디렉터리를 최상위 레벨로 변경합니다.
1 2 |
git 복제 https://github.com/couchbaselabs/connect-fall-2017-demo.git cd 연결-가을-2017-데모 |
카우치베이스 서버 구성
데모 프로젝트는 Couchbase 5.5에 예정된 새로운 기능에 따라 달라집니다. 이 글을 쓰는 현재 5.5는 베타 버전입니다. 플랫폼에 맞는 Couchbase 5.5 다운로드 및 설치하기 여기. 노드 실행을 시작합니다.
준비
다음은 다음에서 실행 중이라고 가정합니다. localhost
. 필요에 따라 원격 호스트로 조정할 수 있습니다. 명령 실행 파일은 Couchbase 설치에 포함되어 있습니다. 명령 경로에 도구 디렉터리를 추가할 수 있습니다. 예를 들어 Mac에서는 다음과 같이 할 수 있습니다.
1 |
내보내기 PATH="$PATH:/path/to/install/Couchbase Server.app/Contents/Resources/couchbase-core/bin" |
노드 초기화
첫 번째 노드를 초기화하려면 세 단계가 필요합니다.
- 관리 사용자, 실행할 서비스 및 메모리 할당에 대한 기본 설정
- 기본 애플리케이션 버킷 생성
- 역할 기반 액세스 제어를 위해 별도의 사용자를 추가합니다.
다음 명령을 실행하여 이 단계를 수행합니다.
1 2 3 4 5 6 7 8 9 10 11 12 |
# 기본 메모리 및 서비스 구성 카우치베이스-cli 클러스터-init --클러스터 카우치베이스://127.0.0.1 --cluster-name 클러스터 \ --클러스터-사용자 이름 관리자 --클러스터-비밀번호 비밀번호 \ --서비스 데이터,색인,쿼리,fts,분석,이벤트 --클러스터-램사이즈 256 --클러스터-분석-램사이즈 1024 \ --클러스터-색인-램사이즈 256 --클러스터-fts-램사이즈 256 --색인-스토리지-설정 기본값 # 메인 버킷 생성 카우치베이스-cli 버킷-create --클러스터 카우치베이스://127.0.0.1 -u 관리자 -p 암호 \ --버킷 건강 --버킷-유형 카우치베이스 --버킷-램사이즈 100 # 역할 기반 액세스 제어 카우치베이스-cli 사용자-관리 --클러스터 카우치베이스://127.0.0.1 -u 관리자 -p 암호 \ --set --rbac-사용자 이름 관리자 --rbac-비밀번호 비밀번호 \ --rbac-이름 "J. R. 관리자" --역할 "관리자" --auth-도메인 local |
이러한 명령의 매개변수 대부분은 매우 간단하게 파악할 수 있습니다.
카우치베이스 서버 노드는 사용 가능한 모든 서비스의 하위 집합을 실행하는 데 전용으로 사용할 수 있습니다. 다차원 스케일링. 여기서는 애플리케이션에 필요한 모든 서비스로 노드를 구성하고 있습니다.
RAM 할당은 모두 최소값으로 설정되어 있습니다. 이는 일반적으로 프로덕션 환경에서 사용하는 것은 아니지만 여기에 포함된 데이터에는 충분합니다.
클러스터 사양은 사용자 지정 URL을 사용한다는 점에 유의하세요, couchbase://127.0.0.1
. 지정하는 다른 방법도 있지만 이 방법이 가장 쉽습니다. 이것은 로컬 컴퓨터의 Couchbase Server에 연결하도록 명령을 내리는 것입니다.
이러한 명령을 실행한 후 일반적으로 노드를 예열하는 데 잠시 시간이 걸립니다. 다음 단계를 진행하기 전에 잠시 멈추세요.
관련 동영상:
데이터
우리는 다음을 사용하여 사실적인 합성 환자 데이터를 생성했습니다. Synthea 도구(저작권 © 2018 The MITRE Corporation). Synthea는 오픈 소스이며 무료로 사용할 수 있습니다. Connect 2017의 전체 데모에서는 수억 개의 레코드가 사용되었습니다. 단일 머신에서 실행하기에 더 적합한 데이터 세트가 데모 소스 리포지토리에 포함되어 있습니다. 이를 로드하려면 다음을 실행하세요.
1 2 3 4 5 |
# 샘플 데이터 로드 에 대한 파일 in 데이터/*.json do cbimport json -c 카우치베이스://127.0.0.1:8091 -d file://${파일} -g '%id%' -f lines -b health -u admin -p password 완료 |
옵션은 다음을 알려줍니다. cbimport
를 사용하여 줄당 하나의 레코드를 예상하고 각 레코드의 ID 필드에서 문서 키를 자동 생성하도록 설정합니다.
관련 동영상:
이벤트 서비스
그리고 카우치베이스 이벤트 서비스 는 릴리스 5.5에 추가되는 새로운 기능 중 하나입니다. 이 기능을 사용하면 데이터베이스의 변경 사항을 모니터링하고 이에 대한 응답으로 JavaScript 함수를 실행할 수 있습니다.
이 애플리케이션에서는 들어오는 환자 데이터를 모니터링하는 데 사용합니다. 이를 통해 설문조사에 의존하지 않고 데이터를 웹 앱으로 푸시할 수 있습니다. 이는 cURL 기능 에 내장 N1QL.
이를 위해서는 데이터베이스의 변경 사항을 감시하는 자바스크립트 함수를 설정해야 합니다. 현재 이벤트 서비스에는 자체 메타데이터 버킷도 필요합니다. 다음 명령어로 이 부분을 구성하세요.
1 2 3 4 5 |
# 이벤트 서비스 메타데이터 버킷 생성 카우치베이스-cli 버킷-create --클러스터 카우치베이스://127.0.0.1 -u 관리자 -p 암호 \ --버킷 이벤트 --버킷-유형 카우치베이스 --버킷-램사이즈 100 # 이벤트 서비스 기능 curl -X POST -u 관리자:비밀번호 -d "@scripts/config/eventing" http://127.0.0.1:8096/api/v1/functions/monitor |
실제 자바스크립트는 다음과 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
함수 온업데이트(doc, 메타) { 만약 (doc.리소스 유형 != '관찰') 반환; let 참조 = doc.subject.참조; let URL = "http://localhost:8080/events/" + 참조.substr(9); let 데이터 = JSON.문자열화({ "참조": doc.subject.참조, "code": doc.코드.코딩[0].코드, "recordedAt": doc.발행, "value": doc.valueQuantity.값 }); let curl = 선택 CURL($URL, { "요청": "POST", "header": [ "콘텐츠 유형: 애플리케이션/json", "수락: 신청/제이슨" ], "데이터": $데이터 }); curl.실행 쿼리(); } 함수 OnDelete(메타) {} |
이 기능은 '관찰' 문서만 처리합니다. 웹 콘솔에서 표시할 몇 가지 요소를 추출합니다. 그런 다음 cURL
호출을 호출하여 해당 데이터를 웹 서버의 REST 엔드포인트에 게시합니다.
관련 동영상:
쿼리 인덱스
이 애플리케이션은 다음과 같은 여러 N1QL 쿼리를 사용합니다. 기본 인덱스를 정의하면 이러한 쿼리가 실행되지만 속도가 느려집니다. 대신 세 개의 글로벌 보조 인덱스.
애플리케이션에서 사용되는 데이터는 FHIR 사양입니다. 레코드에는 다음이 포함됩니다. 리소스 유형
필드에 추가할 수 있습니다. 예를 들어 "Observation", "Condition", "Practitioner"는 모두 리소스 유형입니다. 첫 번째 인덱스는 이 필드에 대한 쿼리를 최적화합니다.
대시보드에는 온도 그래프가 표시됩니다. 이는 '관찰' 문서로 기록됩니다. 두 번째 인덱스는 우리가 표시하고자 하는 주요 정보를 가져옵니다. (여기의 필드와 이벤트 코드에 의해 푸시되는 필드를 비교하세요.) 이렇게 하면 필요한 모든 것이 인덱스에 저장되므로 관련 데이터를 빠르게 조회하고 검색할 수 있습니다.
마지막 인덱스는 '위치' 레코드에 대해 구축됩니다. 이는 환자를 가장 가까운 병원과 연결할 수 있도록 하는 데 사용됩니다.
1 2 3 4 |
쿼리 최적화를 위한 # 인덱스 cbq -u 관리자 -p 비밀번호 -q --스크립트="CREATE INDEX \`resource-idx\` ON health(resourceType, id);" cbq -u 관리자 -p 비밀번호 -q --스크립트="CREATE INDEX \`observation-idx\` ON health(subject.reference, issued DESC, valueQuantity.\`value\`)" cbq -u 관리자 -p 비밀번호 -q --스크립트="CREATE INDEX \`location-idx\` ON health(type.coding[0].code) WHERE resourceType = 'Location';" |
관련 동영상:
분석
이 애플리케이션은 일부 사례 기록 데이터를 조사할 수 있습니다. 이러한 종류의 자유 형식 분석은 새로 도입된 카우치베이스 애널리틱스 서비스 (현재 미리 보기 중).
분석 서비스는 운영 데이터베이스 버킷에서 자체 특수 목적 버킷으로 데이터를 자동으로 가져오는 방식으로 작동합니다. 그런 다음 섀도 데이터세트라고 하는 것을 정의합니다. 마지막으로, 분석을 운영 데이터에 연결하기 위한 명령을 실행해야 합니다. 그 후, 쿼리는 N1QL과 유사한 SQL의 상위 집합인 SQL++를 사용하여 수행됩니다. 자세한 내용은 다음에서 확인할 수 있습니다. 이 튜토리얼.
모든 구성은 애널리틱스 쿼리 엔진을 통해 명령을 실행하여 수행됩니다. 다음 명령을 사용하여 데모에 필요한 부분을 구성합니다.
1 2 3 4 5 |
# 애널리틱스 서비스 구성 cat 스크립트/구성/분석 | 동안 읽기 쿼리 do curl -u 관리자:비밀번호 --데이터-urlencode "statement=${query}" http://127.0.0.1:8095/analytics/service 완료 |
실제 실행되는 명령은 다음과 같습니다.
1 2 3 4 5 |
만들기 버킷 ha WITH {"name":"health"} 만들기 섀도 데이터 세트 환자 켜기 ha 어디 리소스 유형 = "환자" 만들기 섀도 데이터 세트 조건 켜기 ha 어디 리소스 유형 = "조건" 만들기 섀도 데이터 세트 만남 켜기 ha 어디 리소스 유형 = "만남" 연결 버킷 ha |
위에 표시된 것과 동일한 줄을 사용하여 Couchbase Server 웹 콘솔의 쿼리 인터페이스에서도 이 작업을 수행할 수 있습니다.
관련 동영상:
전체 텍스트 검색
카우치베이스 서버 전체 텍스트 검색은 색인된 필드와 입력 검색어 모두를 기반으로 언어 인식 매칭을 지원합니다. 자유 형식 텍스트를 검색할 때 매우 강력한 성능을 제공합니다. 이 애플리케이션에서는 비정형 메모를 위해 따로 마련된 FHIR 문서의 항목, 즉 바로 그것에 기반해 레코드를 가져오는 데 이 기능을 사용합니다.
필요한 인덱스를 다음과 같이 구성합니다.
1 2 |
# 전체 텍스트 검색 색인 curl -u 관리자:비밀번호 -T "scripts/config/fts-index.json" http://127.0.0.1:8094/api/index/diagnosis |
색인이 너무 복잡해서 여기서 모두 설명하기는 어렵습니다. 몇 가지 주요 사항만 언급하겠습니다.
가장 중요한 것은 언어 인식 분석을 수행하고 있다는 점입니다. 참고
필드와 "관찰" 문서의 이유
필드에 입력합니다. 의료 서비스 제공자가 자유 형식 텍스트를 입력할 수 있는 필드입니다.
다른 항목은 단순히 표시하기 위해 데이터를 가져오거나 패싯에 사용하기 위한 것입니다. 패싯을 사용하면 사용자가 검색을 제한하고 구체화할 수 있습니다. 데이터를 구조적으로 드릴다운할 수 있는 강력한 방법입니다.
자세한 내용은 향후 게시글에서 인덱스와 FTS 코드를 살펴보시기 바랍니다.
관련 동영상:
cURL 액세스 제한
N1QL 쿼리에는 다음이 포함될 수 있습니다. cURL
-스타일의 네트워크 호출을 사용합니다. 웹 앱에 업데이트를 푸시하고 Google을 통해 지오매핑 데이터를 가져오는 데 사용합니다.
이러한 호출은 쿼리 서비스 노드에서 시작되므로 보안에 중요한 영향을 미칩니다. 따라서 기본적으로 이 기능은 꺼져 있습니다.
Google 엔드포인트와 웹 서버의 API에 대한 호출을 승인해야 합니다. 다음 명령을 사용하여 이를 수행합니다.
1 2 |
# cURL 사이트 화이트리스트 curl -X POST -u 관리자:비밀번호 -d "@scripts/config/curl" http://127.0.0.1:8091/settings/querySettings/curlWhitelist |
관련 동영상:
동기화 게이트웨이
동기화 게이트웨이 는 카우치베이스 서버와 모바일 애플리케이션 사이의 접착제를 제공합니다. 또한 일부 비즈니스 로직도 제공합니다. 이 경우 쿠치베이스 서버에 연결하고 기본 인증을 구성한 다음 기본 사용자를 위한 채널을 생성하기만 하면 됩니다.
다음과 같이 동기화 게이트웨이를 직접 실행합니다.
1 |
/경로/에/카우치베이스-동기화-게이트웨이/bin/동기화 게이트웨이 동기화-게이트웨이/cc-2017-sg-구성.json |
여기서는 필터링된 문서 가져오기를 사용하지 않으므로 처음에 필요한 모든 메타데이터를 생성하는 데 시간이 조금 걸릴 수 있습니다.
관련 동영상:
웹 클라이언트 및 서버
설치 Node.js. 서버에는 버전 7 이상이 필요합니다. 다음을 사용하는 것이 좋습니다. nvm 를 사용하여 노드 버전을 관리할 수 있습니다. (nvm 설치 가이드는 다음에서 확인할 수 있습니다. 여기.)
웹 클라이언트 구성
웹 클라이언트 코드는 아래에 있습니다. 웹/클라이언트
. 아래 src/config
클라이언트 코드에서 serverURI
에서 index.js
파일을 웹 서버를 가리키도록 설정합니다. 이것은 호스트의 웹 서버 가 실행되고 있습니다. 이는 Couchbase를 실행하는 위치와 다를 수 있습니다. 기본적으로 localhost
로 설정되어 있으므로 하나의 컴퓨터에서 모든 것을 실행할 계획이라면 그대로 두어도 됩니다.
클라이언트 구축
디렉터리를 다음과 같이 변경합니다. 웹/클라이언트
. 노드 패키지를 설치합니다.
1 |
npm 설치 |
개발 또는 프로덕션 두 가지 모드 중 하나로 실행할 수 있습니다. 개발 모드에서는 디버깅이 더 쉽고 핫 리로드를 지원하지만 설정이 더 복잡합니다. 이 모드에서는 클라이언트 페이지를 제공하는 서버와 필요한 API를 노출하는 서버를 별도로 실행해야 합니다.
여기서는 프로덕션 모드에서 실행하는 것에 대해서만 설명하겠습니다. 클라이언트의 경우 이는 빌드를 실행하는 것을 의미합니다.
1 |
npm 실행 빌드 |
완료되면 최종 클라이언트 파일이 서버 디렉터리의 하위 디렉터리로 복사됩니다. 노드 서버는 거기서 앱 콘텐츠를 가져옵니다.
웹 서버 구성 및 실행
디렉터리를 다음과 같이 변경합니다. 웹/서버
. 노드 패키지를 설치합니다.
1 |
npm 설치 |
서버에는 설정이 필요한 몇 가지 매개변수가 있습니다. 환경 변수 또는 서버 디렉토리에 있는 .env라는 파일에서 이러한 매개 변수를 가져오는 패키지를 포함했습니다. 매개 변수는 다음 두 가지 그룹으로 나뉩니다. 도시 비행선 푸시 알림및 Couchbase에 연결하는 데 필요한 것들입니다.
매개 변수는 다음과 같습니다.
- 도시 비행선 애플리케이션 키
- 도시 비행선 마스터의 비밀
- 카우치베이스 서버 클러스터 URL
- 적절한 권한을 가진 CB 서버 클러스터 사용자의 사용자 이름 및 비밀번호
- 카우치베이스 서버 애널리틱스 서비스 노드에 연결하기 위한 URL입니다.
이 Bash 셸 명령 세트는 템플릿을 생성합니다.
1 2 3 4 5 6 7 8 9 |
cat > .env <<EOF ua_application_key='' ua_application_master_secret='' 클러스터='couchbase://localhost' 클러스터_사용자='admin' 클러스터_암호='password' CLUSTER_CBAS='localhost:8095' PORT=8080 EOF |
또는 환경 변수를 설정할 수도 있습니다. 예를 들어, 도시 비행선 매개 변수를 제외하고 대신 다음과 같이 구성할 수 있습니다.
1 2 |
내보내기 ua_application_key=<당신의 애플리케이션 키> 내보내기 ua_application_master_secret=<당신의 애플리케이션 마스터 비밀> |
도시 비행선 푸시 알림 기능을 사용하지 않으려면 UA 키를 임의의 값으로 설정하세요.
이제 서버를 실행할 수 있습니다.
1 |
npm 시작 |
브라우저를 열고 다음 위치로 이동합니다. localhost:8080
. 웹 콘솔이 표시되어야 합니다.
관련 동영상:
안드로이드 모바일 애플리케이션
열기 모바일/안드로이드/CBC헬스
를 사용하여 애플리케이션을 빌드합니다.
Android 모바일 앱은 푸시 알림에 도시 비행선을 사용합니다. 이 기능을 포함하려면 도시 비행선 구성을 직접 입력해야 합니다. 참조 모바일/안드로이드/CBC헬스/앱/src/main/자산/에어십컨피규어.속성.샘플
.
푸시 알림을 포함하지 않으려면 애플리케이션의 다음 줄을 제거하세요. AndroidManifest.xml
파일을 만듭니다.
1 2 3 |
<메타-데이터 안드로이드:이름="com.urbanairship.autopilot" 안드로이드:값="com.couchbase.mobile.notifications.Autopilot" /> |
기본적으로 Android 에뮬레이터와 함께 사용할 수 있는 애플리케이션 버전을 빌드합니다. 온도 판독값을 입력할 수 있는 소프트 입력 대화 상자가 있습니다.
실제 장치에서 실제 패치를 사용하려면 두 가지를 변경해야 합니다.
- In
모바일/안드로이드/CBC헬스/앱/build.gradle
변경def 매개변수 = ".EMULATOR"
에def 매개변수 = ".DEFAULT"
(참조모바일/안드로이드/CBCHealth/app/src/main/java/com/couchbase/mobile/app/launch/Parameters.java
를 참조하세요.) - In
모바일/안드로이드/CBC헬스/앱/src/main/자원/META-INF/services/com.couchbase.mobile.collectors.Collector
변경com.couchbase.mobile.collectors.temperature.ManualEntry
에com.couchbase.mobile.collectors.temperature.RF430_TMPSNS_EVM
관련 동영상:
마무리
여기에는 많은 일이 일어나고 있습니다. 이 게시물의 목적은 주로 Couchbase의 다양한 측면을 사용해 볼 수 있는 모든 기능을 갖춘 앱을 시작하고 실행하는 데 있습니다.
앞으로 코드와 구성에 대한 자세한 내용을 살펴보세요.
.