지난 며칠 동안 네이티브스크립트, 앵귤러, 카우치베이스를 사용하여 간단한 안드로이드 및 iOS 애플리케이션을 만드는 방법을 살펴봤습니다. 먼저 다음과 같은 방법을 살펴보았습니다. 기본 키-값 연산에 카우치베이스 사용 그리고 나서 우리는 카우치베이스를 문서 데이터베이스로 쿼리하는 방법. 마지막 장은 Couchbase 동기화 게이트웨이를 사용하여 네이티브스크립트 애플리케이션에 복제 지원을 추가하는 것입니다.

앞의 두 가지 예제를 확장하여 Couchbase 동기화 게이트웨이, NativeScript 및 Angular를 사용하여 플랫폼과 디바이스 간에 데이터를 동기화하겠습니다. 다음 애니메이션 이미지를 예로 들어보겠습니다:

Couchbase Sync with NativeScript and Angular

iOS 디바이스에 새 프로필이 추가되면 Android 디바이스와 반대 방향으로도 동기화됩니다. 이는 아주 적은 코드를 통해 가능합니다.

요구 사항

이 예제와 이전 두 예제 사이의 요구 사항이 약간 변경되었습니다. 성공하려면 다음이 필요합니다:

NativeScript, Angular 및 Couchbase Lite 플러그인은 모두 NativeScript CLI를 통해 얻을 수 있습니다. 이 예제에서는 데이터를 Couchbase Server에 동기화하지는 않겠지만 아주 약간의 변경만으로 쉽게 동기화할 수 있습니다.

중단한 부분부터 다시 시작하기

이 튜토리얼을 성공적으로 완료하려면 다음을 확인해야 합니다. 파트 2 를 본 적이 있다는 자체 종속성이 있습니다. 파트 1. 이전 가이드에 있는 대부분의 코드를 복사하여 프로젝트에 붙여넣을 수 있습니다.

계속하기 전에 모달 대화 상자가 있는 두 페이지의 네이티브 스크립트 애플리케이션이 작동해야 합니다. 이 애플리케이션의 데이터는 카우치베이스 를 사용하여 쿼리했습니다.

Couchbase용 Angular 서비스 만들기

데이터 복제가 포함되므로 애플리케이션에서 Couchbase 인스턴스가 하나만 실행되고 있는지 확인해야 합니다. 이전 예제에서는 페이지 단위로 새 인스턴스를 만들었습니다. 복제를 사용하면 여러 번 복제하게 되어 비효율적일 수 있으므로 그렇게 할 수 없습니다.

Couchbase의 싱글톤 인스턴스를 생성하려면 Angular 서비스를 생성해야 합니다. 프로젝트 내에서 다음 위치에 파일을 생성합니다. app/couchbase.service.ts 를 열고 다음 TypeScript 코드를 포함합니다:

이 서비스는 모든 페이지에 삽입할 수 있습니다. Couchbase의 단일 인스턴스는 다음과 같은 위치에 저장됩니다. 데이터베이스 변수에 저장되며 푸시 및 풀 리플리케이터에 대한 정보는 해당 변수에 저장됩니다.

생성자 메서드에는 다음과 같은 것이 있습니다:

새 Couchbase 인스턴스를 생성하기 전에 이미 인스턴스가 없는지 확인합니다. 그렇지 않은 경우 데이터베이스를 열고 이전 예제에서 이미 본 적이 있는 MapReduce 보기를 생성합니다.

이 인스턴스를 얻을 때가 되면 다음을 통해 반환할 수 있습니다. getDatabase 함수를 호출합니다. 이는 데이터 복제로 이어집니다.

이 예에서는 동기화 게이트웨이 인스턴스에 대해 양방향 동기화를 수행하겠습니다. 한 번만 동기화하거나 애플리케이션이 열려 있는 동안 지속적으로 동기화할 수 있습니다. 복제를 중지하고 싶을 때는 stopSync 함수입니다:

공유 서비스가 될 것이므로 프로젝트의 @NgModule 블록을 클릭합니다. 프로젝트의 앱/앱.모듈.ts 파일을 열고 다음 TypeScript를 포함합니다:

위는 이전에 보았던 내용이지만 이번에는 다음을 가져왔습니다. 카우치베이스 서비스 에 주입하여 공급자 배열의 @NgModule 블록.

이제 각 페이지가 새로운 Angular 서비스를 사용하도록 업그레이드할 수 있습니다.

네이티브스크립트 애플리케이션 페이지 업그레이드

Angular 서비스를 반영하기 위해 업데이트해야 하는 페이지가 두 개 있습니다. 프로젝트의 앱/컴포넌트/프로필 목록/프로필 목록.ts 파일에 있는 카우치베이스 코드를 제거하고 생성자 메서드를 사용해야 합니다. 대신 또는 파일은 다음과 같아야 합니다:

위 그림에서 다음을 가져온 것을 확인할 수 있습니다. 카우치베이스 서비스 에 주입하여 생성자 메서드와 함께 NgZone. 데이터베이스를 가져와서 뷰를 만드는 대신 getDatabase 기능을 제공합니다.

지금까지는 나쁘지 않죠?

이제 프로젝트의 앱/컴포넌트/프로필/프로필.ts 파일을 만듭니다. 이 파일에 다음 코드를 포함하세요:

다음을 제외하고 NgZone에서 이전 페이지에서와 동일하게 Couchbase를 변경했습니다. 이제 NgZone 가 곧 출시됩니다.

이 시점에서 데이터 동기화를 준비하기 위해 동기화 게이트웨이 구성을 진행할 수 있습니다.

동기화 게이트웨이 복제 구성 구축하기

이미 다운로드하셨을 것입니다. 카우치베이스 동기화 게이트웨이 를 설치했을 것입니다. 설치가 완료되면 프로젝트에 대한 구성 파일을 만들어야 합니다. 다음은 매우 간단한 구성의 예입니다:

위의 구성은 다음과 같은 파일에 저장할 수 있습니다. 동기화 게이트웨이-config.json 또는 이와 유사한 이름을 사용합니다. 기본적으로 다음과 같은 인메모리 스토리지를 사용합니다. 월러스: 데이터베이스 이름을 예제. 이 예에서는 읽기 또는 쓰기 권한이 없습니다. 모든 데이터는 모든 플랫폼과 장치에 동기화됩니다.

동기화 게이트웨이를 Couchbase Server에 연결하는 것은 다음과 같이 간단하게 변경할 수 있습니다. 월러스: 를 카우치베이스 서버 인스턴스의 호스트에 추가합니다.

명령줄에서 동기화 게이트웨이를 실행하려면 다음을 실행합니다:

http://localhost:4985/_admin/ 에서 액세스할 수 있는 대시보드가 시작됩니다. 애플리케이션 수준에서는 포트 4984를 사용합니다.

카우치베이스 및 네이티브스크립트용 동기화 로직 포함

애플리케이션에서 데이터 복제를 위한 모든 준비가 완료되었습니다. 데이터 복제를 통해 필요에 따라 변경 리스너를 사용하여 UI를 업데이트할 수 있습니다.

프로젝트의 앱/컴포넌트/프로필 목록/프로필 목록.ts 에 다음을 포함시켜야 합니다. ngOnInit 메서드를 사용합니다:

언제 ngOnInit 트리거가 발생하면 로컬에서 실행 중인 동기화 게이트웨이와 동기화를 시작합니다. 호스트 이름은 원하는 대로 자유롭게 설정하세요. 동기화를 시작한 후에는 변경 리스너를 설정하여 변경 사항을 우리의 프로필 배열이 필요합니다. 리스너이기 때문에, 우리는 NgZone 그렇지 않으면 UI에 반영되지 않습니다.

위는 모든 변경 사항을 추가한 간단한 예일 뿐입니다. 실제로는 데이터가 변경되었는지, 생성되었는지, 삭제되었는지 확인해야 합니다. 모든 시나리오는 데이터베이스 변경 리스너 추가.

애플리케이션이 중지되면 동기화를 우아하게 중지하려고 합니다. 애플리케이션의 ngOnDestroy 메서드에 다음을 포함하세요:

위의 Angular 메서드가 호출되면 Couchbase 동기화 게이트웨이로의 복제가 중지됩니다.

결론

이 튜토리얼에서는 네이티브스크립트 앵귤러 모바일 애플리케이션에 동기화 지원을 추가하는 방법을 살펴봤습니다. 튜토리얼 시리즈 3부 중 3부입니다. 이전에는 다음을 수행하는 방법을 살펴봤습니다. 데이터 저장 및 로드를 위한 기본 카우치베이스 작업 뿐만 아니라 문서 쿼리. 다음과 같은 프레임워크를 사용하는 모바일 애플리케이션 개발의 데이터 네이티브 스크립트 와 Angular를 쉽게 사용할 수 있습니다. JavaScript 객체와 JSON 데이터를 NoSQL 데이터베이스에 저장하고 동기화할 수 있다는 것은 개발자의 부담을 크게 덜어줍니다.

작성자

게시자 Nic Raboy, 개발자 옹호자, Couchbase

닉 라보이는 최신 웹 및 모바일 개발 기술을 옹호하는 사람입니다. 그는 Java, JavaScript, Golang 및 Angular, NativeScript, Apache Cordova와 같은 다양한 프레임워크에 대한 경험이 있습니다. Nic은 웹 및 모바일 개발을 보다 쉽게 이해할 수 있도록 자신의 개발 경험에 대해 글을 쓰고 있습니다.

댓글 하나

  1. 이 튜토리얼 시리즈에 감사드립니다. 정말 깔끔합니다. 안드로이드와 iOS 기기 사이에서 작동하도록 할 수 있었고 매우 매끄럽게 작동했습니다. 이 예제에서는 기본적으로 네트워크의 다른 디바이스가 동기화할 수 있는 중개자 역할을 하는 Mac의 동기화 게이트웨이를 사용했습니다.

    동일한 네트워크에 여러 디바이스가 있는 모바일 애플리케이션에 이 동기화 기능을 사용하고 싶고 오프라인 모드에서 작동하도록 하고 싶기 때문에 여러 네트워크에 대해 별도의 기능이 있어야 할 것입니다. 네트워크의 컴퓨터에서 동기화 게이트웨이를 설정할 필요 없이 네트워크의 모바일 장치 간에만 동기화 게이트웨이를 설정할 수 있는 방법이 있나요? 아니면 모든 네트워크에 제가 제공하는 동기화 게이트웨이 구성 파일을 사용하여 자체 동기화 게이트웨이를 설치하고 설정해야 하나요?

    1. 기본 Android 및 iOS API에는 P2P 지원이 있지만 NativeScript 플러그인에는 추가되지 않았습니다.

      Couchbase Lite 2.0이 곧 출시될 예정이니 많은 변화가 있을 것입니다. 가능하다면 그 내용을 읽어보시고 조금만 기다려주세요.

  2. 빠른 답변 감사합니다, Nic. 이 새로운 P2P 기능 중 궁극적으로 NativeScript 플러그인에 포함될 수 있는 기능이 있는지 알고 있나요?

  3. 안녕하세요 닉, 질문이 있습니다. 제가 구축중인 프로젝트에서 네이티브 스크립트가있는 카우치베이스 라이트를 사용하여 문서를 저장하려고하는데 어떻게 든 내 논리가 작동하지 않습니다. 제 코드를 살펴보고 제가 뭔가 잘못하고 있는지 알려주실 수 있는지 궁금합니다. 제 코드에 대한 링크입니다: https://i.gyazo.com/99914e2c1c54b37ea7486ff050bc6dd0.png미리 감사드립니다.

댓글 남기기