이 글은 루카 크리스티유가 작성한 게스트 게시물입니다. 루카는 독학 개발자로 다음과 같은 프로그램을 만든 사람입니다. Fluttercouch. 8살 때 처음으로 코드를 작성했으며, 그 이후로 개발에 대한 열정은 계속 커져만 갔습니다. 그는 Google 공인 안드로이드 개발자이며 풀스택 엔지니어로 풀타임으로 일하고 있습니다. 여가 시간의 대부분은 모바일 개발자로서 프리랜서로 일하고 있습니다.
루카는 다양한 솔루션으로 작업하고 평가해 본 경험이 있어 NoSQL 데이터베이스에 익숙합니다. 결국 그는 많은 모바일 앱의 주요 요구 사항이 '오프라인 우선' 기능이기 때문에 데이터 동기화 기능을 갖춘 Couchbase에 매료되었습니다.
초기에는 완전히 네이티브 앱을 만드는 데만 집중했습니다. 하지만 결국 크로스 플랫폼 솔루션이 필요한 고객을 만나게 되었고, 다양한 옵션을 조사한 끝에 다음을 사용하기로 결정했습니다. Flutter.
Flutter: 아름다운 앱 디자인
한 걸음 물러서서 생각해 보면 다음과 같은 의문이 들 수 있습니다. Flutter? 간단히 말해, Flutter는 오픈 소스 SDK입니다. 를 사용하여 iOS 및 Android용 고성능, 고충실도 모바일 앱을 제작할 수 있습니다. Flutter 프레임워크를 사용하면 앱에서 원활하게 반응하는 사용자 인터페이스를 쉽게 구축하는 동시에 앱의 보기를 동기화하고 업데이트하는 데 필요한 코드의 양을 줄일 수 있습니다.
다른 많은 개발 에코시스템과 마찬가지로 Flutter는 다음과 같은 컴포넌트화된 코드 프로젝트와 통합할 수 있는 기능을 제공합니다. Flutter 패키지. Flutter 패키지는 개발자가 복잡한 기능을 모바일 애플리케이션에 통합하는 데 도움이 됩니다. 패키지는 다음과 같이 무엇이든 될 수 있습니다. 다트-기반 라이브러리는 표준 Flutter 프레임워크 기능을 네이티브 레이어와 직접 상호 작용하는 솔루션으로 확장하고 Android 및 iOS의 SDK를 기반으로 새로운 기능을 구현합니다.
Fluttercouch 소개
Fluttercouch 를 원활하게 통합하는 패키지입니다. 카우치베이스 모바일 기능을 Flutter 앱에 추가하여 Android 및 iOS 네이티브 레이어를 관리할 수 있습니다. 이 패키지를 사용하면 데이터베이스 설정, 문서 사용 및 복제를 실행하기 위해 상용구 코드를 만들 필요가 없습니다. 궁극적으로 Fluttercouch를 사용하면 네이티브 Couchbase Mobile SDK로 플랫폼별 코드를 빌드하는 대신 Dart를 사용하여 애플리케이션 로직을 만드는 데 집중할 수 있습니다.
시작하기
사용 시작하기 Fluttercouch 에 의존성 지시어를 추가해야 합니다. pubspec.yaml 파일을 만듭니다.
1 2 |
종속성: fluttercouch: ^0.5.0 |
의존성 지시어를 추가한 후 다음을 사용할 수 있습니다. Fluttercouch 를 추가하거나 새 모델 클래스로 시작할 수 있습니다. InheritedWidget, 범위 지정 모델 또는 블록의 모델 클래스를 확장할 수 있습니다. 일단 확장되면 Fluttercouch 초능력이 잠금 해제됩니다!
1 2 3 4 5 6 7 |
클래스 카운터블록 확장 블록<카운터블록, int> 와 함께 Fluttercouch { 클래스 FrogColor 확장 상속된 위젯 와 함께 Fluttercouch { 클래스 카운터 모델 확장 모델 와 함께 Fluttercouch { 클래스 MyModel 확장 개체 와 함께 Fluttercouch { |
기본 작업
이 시점부터 이전에 생성한 데이터베이스의 인스턴스를 가져오거나 클래스에서 직접 새 데이터베이스를 인스턴스화할 수 있습니다. 데이터베이스가 초기화되면 기본 선택에 저장되며, 이후 메서드 호출은 이를 참조합니다. 데이터베이스 인스턴스를 생성한 후에는 Couchbase Lite 데이터베이스에서 기대할 수 있는 모든 CRUD 작업을 쉽게 수행할 수 있게 됩니다.
예를 들어 ID로 문서를 검색하고 속성에서 문자열을 가져올 수 있습니다. 내 프로퍼티
. 그런 다음 문서를 변경 가능한 문서로 변환하고 수정한 다음 다시 저장합니다.
1 2 3 4 5 6 7 |
헬로카우치베이스() 비동기 { 기다림 initDatabaseWithName('myDatabase'); 문서 내 문서 = 기다림 getDocumentWithId('hello::world'); 문자열 헬로월드 = 내 문서.getString('인사말'); 뮤터블 도큐먼트 내변환가능문서 = 내 문서.toMutable(); 내변환가능문서.setString('helloKey', 'worldValue'); 저장 문서(내변환가능문서); |
리플리케이터로 작업하기
데이터 복제는 Fluttercouch에서도 가능합니다. Dart를 사용하면 복제기를 쉽게 생성하고 구성할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
// 동기화 게이트웨이 서버에서 복제된 데이터베이스의 주소를 제공합니다. // SSL 암호화를 사용하려면 ws:// 대신 wss:// insted를 사용하세요. // 로컬 동기화 게이트웨이 인스턴스에 연결하려면 iOS 시뮬레이터의 경우 호스트 이름으로 localhost를 사용하고, Android 시뮬레이터의 경우 10.0.2.2를 사용합니다. setReplicatorEndpoint("ws://귀하의 서버 주소:4984/귀하의 복제 데이터베이스 이름"); // 복제 유형을 풀, 푸시 또는 푸시_및_풀로 설정합니다. setReplicatorType("push_and_pull"); // 복제를 연속으로 설정합니다. setReplicatorContinuous(true); // 복제를 위한 BasicAuthenticator를 설정합니다. 이 메서드는 Map 타입의 매개변수를 받습니다. //에 '사용자 이름'과 '비밀번호'라는 두 개의 키를 추가합니다. setReplicatorBasicAuthentication(<문자열, 문자열>{ "username": "yourUsername", "비밀번호": "yourPassword" }); // 복제를 위한 세션 인증자를 설정합니다. 동기화 게이트웨이의 공용 REST API를 쿼리하여 SessionID를 검색합니다. 복제기 세션 인증 설정(세션ID); // 복제를 시작하기 전에 리플리케이터 객체를 초기화해야 합니다. initReplicator(); // 복제를 시작합니다. 시작 복제기(); // 복제를 중지합니다. stopReplicator(); |
listenReplicatorEvents 메서드에 함수를 전달하여 리플리케이션 이벤트를 수신할 수도 있습니다. listenReplicatorEvents는 이벤트 유형이 포함된 매개변수를 사용하여 함수를 호출합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
듣기복제이벤트((동적 이벤트) { 스위치(이벤트) { case ("BUSY"): // 리플리케이터 상태가 BUSY로 변경되면 실행됩니다. case ("IDLE"): // 리플리케이터 상태가 IDLE로 변경될 때 실행됩니다. case ("오프라인"): // 리플리케이터 상태가 오프라인으로 변경되면 실행됩니다. case ("STOPPED"): // 리플리케이터 상태가 STOPPED로 변경되면 실행됩니다. case ("연결"): // 리플리케이터 상태가 연결 중으로 변경되면 실행됩니다. } } ); |
다음 단계
이제 다음 Flutter 애플리케이션에서 Couchbase의 잠재력을 발휘할 준비가 되었습니다! Fluttercouch를 다운로드하세요. 퍼브 리포지토리자세한 내용은 프로젝트 페이지에서 확인할 수 있습니다. GitHub 를 참조하여 데이터베이스와 상호 작용하는 방법에 대해 자세히 알아보세요.
Fluttercouch는 현재 제가 여가 시간에 유지 관리하고 추가하는 오픈 소스 프로젝트입니다. 가까운 시일 내에 Dart용 N1QL 쿼리 추상화 계층을 완성하고, Blob 및 하위 문서 작업 및 CouchbaseMobile SDK 내에 존재하는 다른 많은 기능들을 지원합니다. 이 프로젝트는 커뮤니티의 기여를 통해 큰 도움이 될 것이며, 의견, 문제 및/또는 풀 리퀘스트를 보내주시면 감사하겠습니다!
안녕하세요, 클라이언트 측 데이터베이스인가요 아니면 서버 측 데이터베이스인가요?
이것은 Couchbase Lite 임베디드 데이터베이스용입니다(Couchbase Server가 아님).
이것이 끊임없이 변화하는 라이브(CRUD) Couchbase Server DB와 어떻게 동기화될까요?
예를 들어, CB 서버에 1백만 개의 문서가 있고, 일부는 삭제되고, 일부는 업데이트되고, 새로운 문서가 생성되는 등 매분 또는 매초마다 수시로 변경되지만, 전체 서버 DB를 항상 클라이언트와 동기화하지 않고 관련 문서만(예를 들어, 한 번에 10개씩) 동기화하고 싶다고 가정해 보겠습니다... 이것이 가능할까요? 아니면 클라이언트에서 서버 DB에 직접 연결해야 할까요, 아니면 Dart를 통해 어떻게 작동할까요?