이 글은 루카 크리스티유가 작성한 게스트 게시물입니다. 루카는 독학 개발자로 다음과 같은 프로그램을 만든 사람입니다. 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 |
dependencies: fluttercouch: ^0.5.0 |
의존성 지시어를 추가한 후 다음을 사용할 수 있습니다. Fluttercouch 를 추가하거나 새 모델 클래스로 시작할 수 있습니다. InheritedWidget, 범위 지정 모델 또는 블록의 모델 클래스를 확장할 수 있습니다. 일단 확장되면 Fluttercouch 초능력이 잠금 해제됩니다!
|
1 2 3 4 5 6 7 |
class CounterBlock extends Bloc<CounterBlock, int> with Fluttercouch { class FrogColor extends InheritedWidget with Fluttercouch { class CounterModel extends Model with Fluttercouch { class MyModel extends Object with Fluttercouch { |
기본 작업
이 시점부터 이전에 생성한 데이터베이스의 인스턴스를 가져오거나 클래스에서 직접 새 데이터베이스를 인스턴스화할 수 있습니다. 데이터베이스가 초기화되면 기본 선택에 저장되며, 이후 메서드 호출은 이를 참조합니다. 데이터베이스 인스턴스를 생성한 후에는 Couchbase Lite 데이터베이스에서 기대할 수 있는 모든 CRUD 작업을 쉽게 수행할 수 있게 됩니다.
예를 들어 ID로 문서를 검색하고 속성에서 문자열을 가져올 수 있습니다. 내 프로퍼티. 그런 다음 문서를 변경 가능한 문서로 변환하고 수정한 다음 다시 저장합니다.
|
1 2 3 4 5 6 7 |
helloCouchbase() async { await initDatabaseWithName('myDatabase'); Document myDocument = await getDocumentWithId('hello::world'); String helloWorld = myDocument.getString('greetings'); MutableDocument myMutableDocument = myDocument.toMutable(); myMutableDocument.setString('helloKey', 'worldValue'); saveDocument(myMutableDocument); |
리플리케이터로 작업하기
데이터 복제는 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 |
// Supplies the address of the database replicated by the Sync Gateway server. // In case you want to enable SSL encryption, use wss:// insted of ws://. // To connect to a local Sync Gateway instance, use localhost as hostname for iOs simulator, and 10.0.2.2 for Android simulator. setReplicatorEndpoint("ws://your-server-address:4984/yourReplicationDatabaseName"); // Sets the replication type as PULL, PUSH or PUSH_AND_PULL setReplicatorType("PUSH_AND_PULL"); // Sets the replication as continuous setReplicatorContinuous(true); // Sets a BasicAuthenticator for the replication. The methods accept a parameter of type Map<String, String> // with two keys named "username" and "password". setReplicatorBasicAuthentication(<String, String>{ "username": "yourUsername", "password": "yourPassword" }); // Sets a SessionAuthenticator for the replication. SessionID is retrieved querying the public REST API of your Sync Gateway setReplicatorSessionAuthentication(sessionID); // Before starting the replication, you must init the replicator object initReplicator(); // Starts the replication startReplicator(); // Stops the replication stopReplicator(); |
listenReplicatorEvents 메서드에 함수를 전달하여 리플리케이션 이벤트를 수신할 수도 있습니다. listenReplicatorEvents는 이벤트 유형이 포함된 매개변수를 사용하여 함수를 호출합니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
listenReplicationEvents((dynamic event) { switch(event) { case ("BUSY"): // executed when the replicator status changes to BUSY case ("IDLE"): // executed when the replicator status changes to IDLE case ("OFFLINE"): // executed when the replicator status changes to OFFLINE case ("STOPPED"): // executed when the replicator status changes to STOPPED case ("CONNECTING"): // executed when the replicator status changes to CONNECTING } } ); |
다음 단계
이제 다음 Flutter 애플리케이션에서 Couchbase의 잠재력을 발휘할 준비가 되었습니다! Fluttercouch를 다운로드하세요. 퍼브 리포지토리자세한 내용은 프로젝트 페이지에서 확인할 수 있습니다. GitHub 를 참조하여 데이터베이스와 상호 작용하는 방법에 대해 자세히 알아보세요.
Fluttercouch는 현재 제가 여가 시간에 유지 관리하고 추가하는 오픈 소스 프로젝트입니다. 가까운 시일 내에 Dart용 N1QL 쿼리 추상화 계층을 완성하고, Blob 및 하위 문서 작업 및 CouchbaseMobile SDK 내에 존재하는 다른 많은 기능들을 지원합니다. 이 프로젝트는 커뮤니티의 기여를 통해 큰 도움이 될 것이며, 의견, 문제 및/또는 풀 리퀘스트를 보내주시면 감사하겠습니다!
안녕하세요, 클라이언트 측 데이터베이스인가요 아니면 서버 측 데이터베이스인가요?
이것은 Couchbase Lite 임베디드 데이터베이스용입니다(Couchbase Server가 아님).
이것이 끊임없이 변화하는 라이브(CRUD) Couchbase Server DB와 어떻게 동기화될까요?
예를 들어, CB 서버에 1백만 개의 문서가 있고, 일부는 삭제되고, 일부는 업데이트되고, 새로운 문서가 생성되는 등 매분 또는 매초마다 수시로 변경되지만, 전체 서버 DB를 항상 클라이언트와 동기화하지 않고 관련 문서만(예를 들어, 한 번에 10개씩) 동기화하고 싶다고 가정해 보겠습니다... 이것이 가능할까요? 아니면 클라이언트에서 서버 DB에 직접 연결해야 할까요, 아니면 Dart를 통해 어떻게 작동할까요?