소개
이번 글은 '카우치베이스 모바일에 익숙해지기' 시리즈(#5 포스트)를 이어갑니다. 이번에는 동기화 게이트웨이 명령줄에서 실행할 수 있습니다. 이는 이해와 테스트/디버깅 모두에 매우 유용할 수 있습니다. (시리즈의 다른 게시물 링크는 마지막에 제공됩니다.)

배경
전체에 익숙해지려면 카우치베이스 모바일 스택을 사용하면 하나의 컴퓨터에서 모든 것을 설치하고 실행할 수 있습니다. 이 시리즈 게시물에서는 각 구성 요소를 시작하는 단계를 안내해 드리겠습니다. 그 과정에서 약간의 추가 탐색을 하는 방법도 보여드리겠습니다.
최소한의 구성만 하겠습니다. 이 글은 프로덕션 환경에 필요한 사항을 설명하기 위한 것이 아닙니다. NoSQL의 몇 가지 기본 사항에 익숙하고, Couchbase에 대해 어느 정도 이해하고 있으며, Java, Android 또는 iOS 등의 앱 빌드 방법을 알고 있다고 가정합니다. NoSQL 데이터베이스 또는 Couchbase에 대해 자세히 알아보려면 다음에서 많은 리소스를 찾을 수 있습니다. 카우치베이스 사이트.
카우치베이스는 오픈소스입니다. 여기서 사용하는 모든 기능은 무료로 사용해 볼 수 있습니다. 도움이 필요하면 게시물 끝부분에서 더 많은 리소스를 참조하세요.
동기화 게이트웨이
동기화 게이트웨이는 웹을 통해 데이터에 액세스하고 동기화하기 위한 동기화, REST, 스트림, 배치 및 이벤트 API를 갖춘 안전한 웹 게이트웨이 애플리케이션입니다. 동기화 게이트웨이는 무엇보다도 Couchbase Server와 Couchbase Lite 간의 안전한 데이터 복제를 가능하게 합니다.
동기화 게이트웨이는 종속성이 거의 없으며, 대부분의 Linux 배포판(라즈베리 파이 포함), Windows, OSX/macOS에서 실행할 수 있습니다. 구체적인 설치 단계는 플랫폼에 따라 다릅니다. 자세한 내용은 다운로드 사이트에서 사용 가능한 모든 패키지를 확인하세요. 지원되는 배포판 이외의 Linux 배포판에 설치하려면 다음을 참조하세요. 이 게시물.
구성 및 실행
동기화 게이트웨이를 설치했으면 명령줄 셸을 엽니다.
다음으로 두 가지 구성이 나열되어 있습니다. 이 구성은 예제 폴더로 이동하거나 여기에 있는 텍스트를 복사하여 붙여넣으세요.
다음과 같은 경우 먼저 사용할 수 있습니다. 카우치베이스 서버 를 실행해야 합니다. 다음에서 찾을 수 있는 구성은 다음과 같습니다. 예제/기본-카우치베이스-버킷.json.
|
1 2 3 4 5 6 7 8 9 10 |
{ "log": ["*"], "databases": { "db": { "server": "https://localhost:8091", "bucket": "default", "users": { "GUEST": { "disabled": false, "admin_channels": ["*"] } } } } } |
또는 동기화 게이트웨이 독립형만 사용하려면(일반적으로 테스트용으로만 사용) 다음 구성을 사용하세요( 예제/기본-왈루스-버킷.json):
|
1 2 3 4 5 6 7 8 9 10 |
{ "log": ["*"], "databases": { "db": { "server": "walrus:", "users": { "GUEST": { "disabled": false, "admin_channels": ["*"] } }, "allow_empty_password": true } } } |
문서 만들기
명령줄에서 동기화 게이트웨이를 실행하고 구성 파일의 경로를 입력합니다.
|
1 |
$ /path/to/sync_gateway your_config.json |
이 시점에서 특수 GUEST 사용자가 활성화됩니다. 이제 문서를 만들 수 있습니다.
|
1 |
$ curl -s -g -X PUT -H 'Content-Type: application/json' -d '{ "test": "entry" }' localhost:4984/db/a_doc |
응답은 쓰기가 성공했음을 보여줍니다. 동기화 게이트웨이 로그 출력에서도 확인할 수 있으며, 백업 버킷의 카우치베이스 서버 웹 콘솔.
명령줄에 표시되는 응답은 다음과 같습니다.
|
1 |
{"id":"a_doc","ok":true,"rev":"1-93996db139ad4024d0c7c982d4f69122"} |
문서 업데이트하기
다음으로 문서에서 변경을 시도해 보겠습니다.
|
1 |
$ curl -s -g -X PUT -H 'Content-Type: application/json' -d '{ "test": "changed" }' localhost:4984/db/a_doc |
출력에 실패한 것으로 표시됩니다.
|
1 |
{"error":"conflict","reason":"Document exists"} |
왜 그럴까요? 이 블로그 시리즈의 다른 부분에서 기억하시겠지만, 카우치베이스 모바일은 멀티버젼 동시성 제어라는 것을 사용하여 수정본을 추적합니다. 즉, 문서를 변경할 때 "상위" 문서가 무엇인지 표시해야 합니다.
이번에는 상위 수정본을 지정하여 다시 시도해 보겠습니다.
|
1 |
$ curl -s -g -X PUT -H 'Content-Type: application/json' -d '{ "test": "changed" }' 'localhost:4984/db/a_doc?rev=1-93996db139ad4024d0c7c982d4f69122' |
작동합니다. 응답은 다음과 같습니다.
|
1 |
{"id":"a_doc","ok":true,"rev":"2-8d7051e4510c47c5e0aa74aed1fbd788"} |
변경 사항 피드 모니터링
변경사항 피드는 데이터베이스를 추적할 수 있는 좋은 방법을 제공합니다. 이를 사용하여 이벤트 기반 서버 측 로직을 작성하거나 자동화된 충돌 해결 시스템을 구현할 수 있습니다.
피드가 계속 열려 있는 버전을 보여드리겠습니다. 다른 명령줄 창을 열어 출력을 볼 수 있습니다.
|
1 |
$ curl -X GET 'localhost:4984/db/_changes?feed=continuous&heartbeat=26000&since=0' |
여기서는 피드 유형을 연속으로 설정했습니다. 네트워크 경로의 다양한 요소로 인해 유휴 상태로 표시되는 연결이 닫힐 수 있습니다. 동기화 게이트웨이는 이를 방지하기 위해 하트비트를 보낼 수 있습니다. 타임아웃은 26000밀리초로 설정했습니다.
마지막 매개변수입니다, 이후는 전체 변경 시퀀스에서 동기화 게이트웨이가 시작할 위치를 알려줍니다. 일반적으로 이 값은 불투명한 값으로 취급해야 합니다. 일반적으로 앱은 이 매개변수를 지정하지 않고 시작한 다음(모든 변경 사항을 가져오기), 전송된 값을 추적하여 향후 요청에 사용합니다.
일련의 변경 사항은 다음과 같습니다.
|
1 2 |
{"seq":1,"id":"_user/","changes":[{"rev":""}]} {"seq":3,"id":"a_doc","changes":[{"rev":"2-8d7051e4510c47c5e0aa74aed1fbd788"}]} |
사용자 추가하기
이제 새 사용자를 추가해 보겠습니다, jdoe. 이 기능은 관리자 기능이므로 요청은 관리자 포트를 통해 이루어져야 합니다. (나열된 구성 중 하나를 사용하는 경우 포트 4985).
|
1 |
$ curl -s -g -X PUT -H 'Content-Type: application/json' -d '{ "password": "pass", "admin_channels": [ "ch9" ] }' localhost:4985/db/_user/jdoe |
익명(GUEST) 액세스도 비활성화합니다.
|
1 |
$ curl -s -g -X PUT -H 'Content-Type: application/json' -d '{ "disabled": true }' localhost:4985/db/_user/GUEST |
사용자 이름과 비밀번호를 제공하지 않으면 더 이상 공용 포트(4984)에서 동기화 게이트웨이에 액세스할 수 없습니다.
채널
특수 필드가 있는 문서를 추가해 보겠습니다, 채널.
|
1 |
$ curl -s -g -u 'jdoe:pass' -X PUT -H 'Content-Type: application/json' -d '{ "my": "doc", "channels":"abc" }' localhost:4984/db/jd_doc |
반환된 것을 확인해야 합니다.
|
1 |
{"id":"jd_doc","ok":true,"rev":"1-4407b06b44eccdf1a9ef8cbe6f5dbe7f"} |
동기화 게이트웨이는 문서가 업데이트될 때마다 동기화 함수라는 특수 함수를 통해 모든 문서를 전달합니다. 동기화 함수를 지정하지 않았으므로 기본값이 자동으로 사용됩니다.
기본 함수는 다음을 찾습니다. 채널 를 검색하세요. 문서가 발견되면 해당 채널에 문서가 할당됩니다.
사용자는 해당 채널에 할당된 문서를 받으려면 채널에 대한 액세스 권한이 있어야 합니다. 채널에 대해 자세히 알아보세요. 여기. 곧 그 영향력을 확인할 수 있을 것입니다.
인증하지 않을 때 어떤 일이 발생하는지 확인하려면 다음 명령을 사용해 보세요. 요청이 거부됩니다.
|
1 |
$ curl -X GET localhost:4984/db/jd_doc |
예상되는 응답과 함께.
|
1 |
{"error":"Unauthorized","reason":"Login required"} |
올바른 사용자 아이디와 비밀번호를 입력하여 다시 시도해 보면 어떨까요?
|
1 |
$ curl -u 'jdoe:pass' -X GET localhost:4984/db/jd_doc |
때때로 사람들을 놀라게 하기도 합니다. 또다시 거절당하지만 다른 이유로 거절당합니다.
|
1 |
{"error":"Forbidden","reason":"forbidden"} |
무슨 일이 있었나요? 문서를 작성할 때 채널에 할당했던 것을 기억하십니까? abc. 사용자 jdoe 문서에 대한 액세스 권한을 부여하지 않았습니다. abc 채널. 그게 없으면, jdoe 는 문서를 다시 읽을 수 없습니다.
채널 변경 jdoe 에 액세스 할 수 있습니다.
|
1 |
$ curl -s -g -X PUT -H 'Content-Type: application/json' -d '{ "admin_channels": [ "abc" ] }' localhost:4985/db/_user/jdoe |
를 클릭하고 사용자가 이제 문서에 액세스할 수 있는지 확인합니다.
|
1 |
$ curl -u 'jdoe:pass' -X GET localhost:4984/db/jd_doc |
성공!
|
1 |
{"_id":"jd_doc","_rev":"1-4407b06b44eccdf1a9ef8cbe6f5dbe7f","channels":"abc","my":"doc"} |
마무리
동기화 게이트웨이에 대한 인사이트를 얻으셨기를 바랍니다. 동기화 게이트웨이에 대한 자세한 내용은 REST API 더 자세히 알아보세요. 동기화 게이트웨이 기본 제공 웹 관리자 유틸리티(https://localhost:4985/_admin/)와 Couchbase Server 웹 콘솔을 살펴보면 더 흥미로운 정보를 찾을 수 있습니다.
동기화 게이트웨이 독립형 사용의 흥미로운 예는 CouchBase Connect 2016의 강연을 참조하세요: https://www.youtube.com/watch?v=6Ra4NeY7TNA
[buttongroup][button style="btn-link btn-lg" icon="fa fa-arrow-left" align="left" iconcolor="#dd3333″ type="link" target="false" title="이전: 동기화 게이트웨이 설치하기" link="https://www.couchbase.com/blog/편리한 카우치베이스 모바일 동기화 게이트웨이 설치하기/" linkrel=""][button style="btn-link btn-lg" icon="fa fa-arrow-right" align="왼쪽" iconcolor="#dd3333″ type="link" target="false" title="다음: 미정" link="" linkrel=""][/buttongroup]
포스트 스크립트
더 많은 리소스를 확인하세요. 개발자 포털 트위터에서 팔로우하세요 카우치베이스 개발.
질문에 대한 답변을 게시할 수 있습니다. 포럼. 그리고 다음에도 적극적으로 참여합니다. 스택 오버플로.
다음 주소에서 저를 개인적으로 팔로우할 수 있습니다. 호드그릴리
[...]를 사용해 볼 수 있습니다. 명령줄 도구 및 동기화 게이트웨이 관리자 인터페이스를 사용할 수도 있습니다. 자세한 내용은 [...]에서 확인하세요.
[...] 이전: 명령줄을 통한 카우치베이스 서버 다음: 명령줄을 통한 동기화 게이트웨이 [...]