모범 사례 및 튜토리얼

Electron, PouchDB, Ionic 2 및 Couchbase를 사용하여 동기화되는 데스크톱 앱 만들기

저는 자바스크립트 관련 일을 해왔고 카우치베이스. 지난 몇 주 동안 저는 Angular 2 프레임워크, 자바스크립트 라이브러리 PouchDB, 모바일용 Ionic 프레임워크를 중심으로 콘텐츠를 제작해 왔습니다. 아직 살펴보지 않은 것은 Angular 2로 구축된 데스크톱 애플리케이션의 Couchbase입니다.

2년 전에 저는 AngularJS 1.0 및 Electron을 사용하는 데스크톱 애플리케이션의 Couchbase하지만 기술 덕분에 그 시대에는 공룡이 존재했을지도 모릅니다. 많은 것이 변했고 한때 훌륭했던 게시물도 새로 고쳐야 할 필요가 있습니다.

다음을 사용하여 데스크톱 애플리케이션을 만드는 방법을 살펴보겠습니다. 전자 Angular 2, PouchDB, Ionic 2 및 Couchbase로 구동됩니다.

요구 사항

이 프로젝트를 성공으로 이끌기 위해 충족해야 할 요구 사항이 많이 있습니다. 그 요건은 다음과 같습니다:

이 튜토리얼의 초점과 요점은 Ionic 2가 아닙니다. 그러나 Ionic 2에는 부트스트랩이나 파운데이션과 같은 대체 솔루션보다 시간을 절약할 수 있는 강력한 미세 UI 레이어가 있습니다. 또한 Ionic 2에는 Angular 2가 내장되어 있습니다. 단, Ionic 2 CLI가 설치되어 있어야 합니다. 종속성을 수집하는 데 사용할 노드 패키지 관리자(NPM) 때문에 Node.js는 필수입니다.

이 예제에서는 Couchbase Server를 포함하지 않고 대신 Couchbase 동기화 게이트웨이와 인메모리 프로토타이핑 데이터베이스를 사용하겠습니다. 이 예제에서 Couchbase Server로 전환하는 데는 한 줄도 걸리지 않습니다. PouchDB는 데스크톱 애플리케이션에서 동기화 게이트웨이로 그리고 다른 방향으로도 통신합니다.

카우치베이스 동기화 게이트웨이 구성하기

동기화 게이트웨이는 모든 데이터 오케스트레이션을 처리하며 애플리케이션별로 구성해야 합니다. 이 특정 애플리케이션의 경우 모든 연결 장치가 데이터를 읽고 쓸 수 있도록 허용하겠습니다.

이러한 구성은 다음과 같습니다:

위의 샘플 구성에서는 다음과 같은 데이터베이스를 사용합니다. 예제라고 부르지만 실제로는 원하는 대로 불러도 됩니다. 예를 들어 구성은 파일에 저장해야 합니다, 동기화 게이트웨이-config.json.

카우치베이스 동기화 게이트웨이를 다운로드하여 설치한 후 다음과 같이 구성을 실행할 수 있습니다:

그런 다음 http://localhost:4985/_admin/ 에서 동기화 게이트웨이에 액세스할 수 있습니다.

PC용 Ionic 2 프로젝트 만들기

다음 주제에 대한 이전 가이드를 보셨다면 Ionic 2 및 PouchDB가 포함된 Couchbase에서 무엇이 달라질지 궁금하실 것입니다. 사실 달라지는 것은 없습니다. 기본 Android 및 iOS 기능을 사용하지 않는 Ionic 2 애플리케이션은 문제 없이 Electron 애플리케이션에 번들로 사용할 수 있습니다. 그러나 이 애플리케이션은 이전 애플리케이션과 비교하여 일부 최적화가 이루어졌습니다.

Electron with Couchbase and Ionic 2

위의 애니메이션에서 목록에 항목을 추가하고 Couchbase 동기화 게이트웨이 및 다른 장치 및 Couchbase 서버와 동기화할 수 있는 간단한 할 일 목록 Electron 애플리케이션을 볼 수 있습니다.

간단한 예제를 만들어 보겠습니다.

종속성으로 새 프로젝트 만들기

애플리케이션 개발을 시작하고 일렉트론에서 패키징하기 전에 각 종속성이 포함된 새 프로젝트를 만들어야 합니다.

명령 프롬프트 또는 터미널에서 다음을 실행합니다:

Ionic 2 프로젝트가 생성되면 Electron 및 PouchDB와 같은 몇 가지 종속성을 수집해야 합니다. 이를 위해 다음을 실행합니다:

이 Angular 2 애플리케이션은 타입스크립트를 사용할 것이므로 타입 정의가 있는 JavaScript 라이브러리를 사용하는 것이 가장 좋습니다. 그러나 PouchDB에는 공식적인 타입 정의 세트가 없기 때문에 구식이 됩니다. 다음 종속성을 포함하면 이 문제를 해결할 수 있습니다:

위의 종속성을 통해 우리는 require 키워드를 사용하여 자바스크립트 라이브러리를 프로젝트로 가져올 수 있습니다.

데스크톱 지원용 전자 추가

프로젝트가 생성되면 Electron 지원을 추가해야 합니다. 이는 일렉트론이 부팅 시 처리하는 특수 JavaScript 구성 파일을 추가하여 수행됩니다.

프로젝트의 루트에서 다음과 같은 파일을 만듭니다. electron.js 를 다음 자바스크립트 코드로 대체합니다:

위의 코드 대부분은 전자 스타터 템플릿이 줄을 제외한 나머지 줄은 제외됩니다:

위 줄에서는 애플리케이션이 시작될 때 어떤 Ionic 2 페이지를 로드할지 일렉트론에 알려주고 있습니다. 일렉트론 부트스트랩이 완료되는 동안 빌드 스크립트 내에 번들로 제공해야 합니다.

프로젝트의 package.json 파일에 이 줄을 포함하세요:

위의 줄은 Electron에게 어떤 파일이 구성 파일인지 알려줍니다. 파일 이름을 지정하지 않았을 수 있기 때문에 필요합니다. electron.js 를 추가해야 합니다. 또한 프로젝트를 빌드하고 Electron으로 실행할 특정 스크립트를 추가해야 합니다:

앱 스토어에 배포하기 위해 애플리케이션을 패키지화하지는 않지만 컴퓨터에서 Electron을 사용하여 올바르게 테스트할 수 있습니다.

이 시점에서는 이전에 보셨을 수도 있고 그렇지 않을 수도 있는 Angular 2 코드에 집중할 수 있습니다.

Angular 2용 PouchDB 공급자 개발하기

데이터 관련 코드를 페이지 로직과 분리하여 유지하는 것이 좋습니다. Angular 2에서는 공유 공급자를 사용하여 이러한 분리를 수행할 수 있습니다.

Ionic 2에서 공급자를 생성하려면 CLI에서 다음을 실행합니다:

다음과 같이 끝나야 합니다. src/providers/pouchdb-provider.ts 또는 이와 유사한 이름입니다. 이름이 무엇인지 기억하기만 하면 이름은 크게 중요하지 않습니다.

공급자 파일을 열고 다음 TypeScript를 포함합니다:

공급자는 다양한 페이지에 주입되어 변경 사항을 방출하므로 주사제 그리고 이벤트 이미터 가져오기. 또한 PouchDB JavaScript 라이브러리도 가져오고 있습니다.

공급자는 애플리케이션이 열려 있는 동안 하나의 데이터베이스 인스턴스가 열려 있는 싱글톤으로 작동합니다. 이 설정은 생성자 메서드를 사용합니다:

에서 생성자 메서드에서 데이터베이스가 아직 인스턴스화되지 않은 경우 데이터베이스를 인스턴스화하고, 열고, 변경 이벤트를 구성합니다. 데이터베이스에 대한 모든 변경 사항에 대해 변경 이벤트를 방출하고 결국 수신기를 구독하여 수신합니다.

특정 NoSQL 문서를 ID로 가져오고 싶다고 가정해 보겠습니다. 다음과 같은 함수를 만들 수 있습니다:

이 특정 애플리케이션의 경우, 문서를 업데이트하기 전에 문서가 있는지 확인해야 하므로 위의 방법이 문서 생성 방법에 더 유용합니다:

문서가 존재하지 않으면 업데이트되는 대신 문서가 만들어집니다.

여기서는 데스크톱 Electron 애플리케이션에서 Couchbase를 사용하는 것이 목표이므로 동기화 기능이 필요합니다:

그리고 동기화 메서드는 동기화 게이트웨이 호스트 이름과 데이터베이스를 가져와 로컬 데이터베이스와 원격 데이터베이스 간에 양방향 동기화를 수행합니다.

마지막으로 변경 리스너를 가져와 구독하는 방법을 제공합니다.

PouchDB 공급자는 완료되었지만 아직 사용할 준비가 되지 않았습니다. 각 페이지에서 사용하려면 애플리케이션의 @NgModule 프로젝트의 src/app/app.module.ts 파일을 만듭니다. 이 파일을 열고 다음을 포함합니다:

기본적으로 공급자를 가져와서 공급자를 공급자 배열의 @NgModule 블록을 추가합니다. 이제 애플리케이션 페이지에서 공급자를 사용할 수 있습니다.

함수형 애플리케이션을 위한 페이지 로직 추가하기

이 특정 애플리케이션은 화면이 하나뿐이며 그 화면은 다소 단순합니다. 데이터 목록을 표시하고 새 데이터를 입력할 수 있습니다.

타입스크립트 로직부터 시작해서, 프로젝트의 src/pages/home/home.ts 파일을 열고 다음을 포함하세요:

여러 Angular 2, Ionic 2 및 사용자 정의 컴포넌트를 페이지로 가져와서 많은 컴포넌트들을 생성자 메서드를 사용합니다. The 항목 배열에는 화면에 표시될 동기화된 데이터가 저장됩니다. 그리고 생성자 메서드는 변수만 초기화합니다.

변수에 데이터를 로드하려면 다음을 사용해야 합니다. ionViewDidEnter 메서드를 사용합니다:

에서 ionViewDidEnter 메서드를 사용하여 동기화 게이트웨이와 동기화를 시작하고 변경 이벤트를 구독합니다. 변경 사항이 들어오면 변경 사항이 항목 배열을 사용합니다. 우리는 NgZone 변경 리스너는 Angular 2에서 불확실하며 UI가 올바르게 업데이트되도록 보장하고 싶기 때문입니다.

그리고 삽입 메서드는 거의 모든 Ionic 2 로직입니다:

메서드를 호출하면 사용자가 입력할 수 있는 프롬프트가 표시됩니다. 저장되면 데이터는 PouchDB에 문서로 저장되고 Couchbase Server에 동기화됩니다.

사용자 인터페이스 디자인

타입스크립트 로직의 UI는 짧고 간결합니다. 프로젝트의 src/pages/home/home.html 파일을 열고 다음 HTML 마크업을 포함합니다:

UI에는 버튼이 있는 작업 표시줄이 있습니다. 삽입 메서드를 눌러야 합니다. 화면의 콘텐츠는 각 요소를 표시하는 목록입니다. 항목 배열을 행으로 저장합니다.

실제 프로젝트 보기

일렉트로닉 위드 카우치베이스 예제에서 많은 작업을 수행했습니다. 저는 작업 중인 프로젝트를 업로드했습니다. 를 직접 사용해보고 싶으시다면 GitHub로 이동하세요.

프로젝트를 다운로드하고 다음 명령을 실행합니다:

위의 명령은 모든 프로젝트 종속성을 복원합니다. 동기화 게이트웨이가 실행 중인 상태에서 다음을 실행하여 일렉트론으로 애플리케이션을 실행합니다:

동기화 게이트웨이 호스트를 변경해야 할 수도 있습니다. src/pages/home/home.ts 파일을 호스트 이름과 일치하도록 변경합니다.

결론

방금 다음과 동기화되는 데스크톱 애플리케이션을 만드는 방법을 살펴보셨습니다. 카우치베이스. 이 애플리케이션은 다음에 의해 구동됩니다. 전자를 사용하지만 Angular 2와 PouchDB를 사용합니다. UI 레이어는 Ionic 2를 사용했지만 반드시 그럴 필요는 없습니다. Bootstrap과 같은 자체 UI 프레임워크를 사용할 수도 있습니다. 이 가이드의 목표는 카우치베이스와 앵귤러 2로 일렉트론을 시연하는 것이었습니다. 이 가이드는 이전 주제에서 한 단계 더 발전한 것입니다. 카우치베이스와 일렉트로닉이 포함된 AngularJS 1.0.

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

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

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

댓글 하나

  1. 실행 중일 때 npm 실행 전자
    결과는 오류입니다:

    [19:46:53] ionic-app-scripts 0.0.47
    [19:46:53] ionic-app-script task: "build;"
    [19:46:53] 오류: '../dist/build;' 모듈을 찾을 수 없습니다.

    (그리고 이것은 직접 만든 깃허브 예제에서 다운로드하고, npm을 설치한 다음, npm을 실행한 것입니다.)

    아이디어가 있으신가요?

    고마워요 :)

    1. 앱마이스터리 3월 11, 2017에서 6:51 오전

      안녕하세요 마르틴과 닉입니다,

      Ionic 2.1.12를 사용하면서 동일한 오류가 발생하고 있습니다.
      [15:44:02] ionic-app-scripts 1.1.4
      [15:44:02] ionic-app-script task: "build;"
      [15:44:02] 오류: '../dist/build;' 모듈을 찾을 수 없습니다.

      여러분 중 한 명이 해결하셨나요?

      고마워요 :)

  2. 어떤 버전의 Ionic을 사용하고 있나요? Ionic은 현재 릴리스와 제가 게시한 시점 사이에 큰 변화가 있었다고 생각합니다.

    콘텐츠와 로직은 정확하게 유지되어야 하지만 빌드 명령은 약간 다를 수 있습니다.

  3. 안녕하세요,

    먼저, 이 포스팅을 작성해 주신 Nic님께 감사드립니다!

    동일한 오류("오류: '../dist/build;' 모듈을 찾을 수 없습니다.")가 발생했는데, "electron" 스크립트가 전자 npm 모듈이 전역적으로 설치되어 있다고 가정하기 때문인 것 같습니다.
    로컬에 일렉트로닉을 설치한 경우 이와 같은 것을 사용해야 합니다:
    "./node_modules/.bin/electron ."
    참조 https://electron.atom.io/docs/tutorial/quick-start/

    그래서 이걸로 전자 스크립트를 변경했습니다(저는 Windows OS를 사용 중입니다):

    "스크립트": {

    "electron": "ionic-app-scripts 빌드 && .\\node_modules\\.bin\\electron ."
    }

    마지막으로, "npm run electron"을 실행하면 작동합니다!

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.