카우치베이스 라이트 는 2014년부터 iOS, Android 및 .NET 플랫폼을 대상으로 제공되어 왔으며, 이후 macOS와 Windows를 대상으로도 제공되었습니다. 이를 위해 해당 플랫폼에서 선호하는 언어로 API를 노출했습니다: Java, Objective-C, Swift 및 C#.
하지만 분명 다른 용도로도 임베디드 NoSQL 데이터베이스 동급 최고의 동기화 기능을 제공합니다! 새롭게 떠오르는 사물 인터넷에 이상적으로 적합하며, 개발자들은 라즈베리 파이와 같은 임베디드 Linux 보드에서 카우치베이스 라이트를 실행하고 싶다고 문의해 왔습니다. Python이나 Go와 같은 더 많은 언어에 대한 바인딩을 요청하는 분들도 있었습니다.

이러한 사용 사례를 위해 다음과 같은 조치를 취하고 있다고 말씀드리게 되어 기쁩니다. C++용 카우치베이스 라이트. 이것은 Couchbase Lite의 전체 구현입니다:
- ANSI C API의 함수 의 클래스 메서드와 대부분 일대일 호환됩니다. 카우치베이스 라이트 2.x API. C에는 자동 메모리 관리 또는 수집 데이터 구조가 제공되지 않기 때문에 일부 세부 사항은 반드시 다를 수 있지만 기존 API에 익숙하다면 다음과 같은 몇 가지 사항을 참조하세요. 간단한 코드 예제. C API를 감싸는 래퍼로 구현된 C++ API도 있습니다.
- .NET이나 JVM과 같은 하이레벨 런타임이나 Cocoa와 같은 대규모 독점 클래스 라이브러리에 의존하지 않습니다.
- OS 종속성 최소화. 파일 시스템, C++ 표준 라이브러리, 리플리케이터를 위한 TCP/IP 네트워킹만 있으면 모든 유닉스 계열 OS(또는 최신 MS Windows)에서 실행할 수 있습니다.
- 적당한 하드웨어 요구 사항: 라즈베리 파이(아두이노는 제외)를 생각하세요. 즉, 수십 메가바이트의 사용 가능한 RAM, 수백 MHz의 CPU, 데이터베이스를 위한 충분한 영구 스토리지가 필요합니다.
- 아래의 전체 소스 코드 Apache 2 라이선스의 다른 버전과 마찬가지로 Couchbase Lite를 사용할 수 있습니다. (엔터프라이즈 에디션 기능에서 사용할 수 있습니다. 상업용 라이선스를 클릭하고 소량의 비공개 소스를 추가합니다.)
무엇이 문제인가요? 아직 완성되지 않은 알파 수준의 프로젝트에 대한 초기 액세스 권한입니다. 자세한 내용은 아래의 '향후 계획' 섹션을 참조하세요.
...그리고 다른 언어의 경우
Couchbase Lite For C는 다른 언어 및 플랫폼에 Couchbase Lite를 제공하는 데 도움이 됩니다. C는 링구아 프랑카를 지원하므로 모든 언어에는 C API에 바인딩할 수 있는 도구가 있습니다. 따라서 Couchbase Lite를 호출하는 데 필요한 글루를 쉽게 작성한 다음 그 위에 관용적 API를 만들 수 있습니다. 개념 증명으로, 저희는 다음과 같이 Python 3 바인딩 를 동일한 Github 리포지토리에 저장합니다.
C API는 바인딩하기 쉽도록 제작되었습니다. 가능한 한 객체 지향적이며, '클래스'와 '메서드' 이름을 연결하는 일반 함수 이름을 사용합니다. '객체'는 가비지 수집 런타임에서 쉽게 관리할 수 있도록 참조 카운트됩니다. 사용 중인 언어의 JSON 파서를 사용하는 것이 더 간편하다면 선택적으로 문서의 속성을 JSON 문자열로 액세스할 수 있습니다. 클라이언트 코드에 알림 콜백이 호출되는 시기와 위치를 예약할 수 있는 기능도 제공되므로 언어(또는 OS)가 지원하는 동시성 모델에 맞게 조정할 수 있습니다.
아키텍처
카우치베이스 라이트용 C API는 2.x 아키텍처의 간단한 확장입니다. 2018년 2.0 릴리스에서는 C++로 작성된 플랫폼에 구애받지 않는 핵심 컴포넌트로 Couchbase Lite를 다시 구현했습니다. 이 코어는 Couchbase Lite의 다양한 구현이 바인딩하는 (비공개) C API를 제공하여 Java, C#, Swift 또는 Objective-C로 자체 공개 API를 노출합니다.
이 새로운 프로젝트를 위해 저희는 내부 C API를 더 명확하고 사용하기 쉬우며 크로스 플랫폼 API 사양에 맞게 재구성하는 어댑터(다시 C++로 작성)를 만들었습니다. 이 어댑터는 코어 라이브러리와 정적으로 연결되어 단일 바이너리를 생성합니다.

Couchbase Lite For C의 계층화를 보여주는 아키텍처 다이어그램
이 어댑터는 매우 간단합니다. 지금까지 헤더를 포함해 2,000줄 미만의 C/C++로 구성되어 있습니다. 대부분의 기능은 이미 두 개의 유닉스 기반 플랫폼(안드로이드와 다윈)과 Windows에서 1년간의 실전 테스트를 거친 Couchbase Lite Core에서 가져왔습니다. 따라서 C API 자체의 개발은 매우 간단하여 포팅에 더 많은 노력을 기울일 수 있습니다.
향후 계획
Couchbase Lite For C는 현재 활발하게 개발 중이지만 아직 완성된 것은 아닙니다. 알파 수준의 프로젝트에 대한 초기 액세스 권한을 제공합니다. API는 매우 견고하지만 일부 기능이 연결되지 않았고, 테스트가 거의 이루어지지 않았으며, 아직 macOS, Windows 및 Ubuntu 외에는 포팅되지 않았습니다. 아직 공식 제품이 아니며, 완성도가 높아질 때까지는 상업적 지원을 제공하지 않을 예정입니다.
수요가 있다는 것을 알고 있고(이미 몇몇 용감한 개발자들이 내부 C API를 탐색하고 있습니다!), 이 기능을 완성하는 데 도움이 될 수 있기 때문에 지금 제공하게 되었습니다:
- 임베디드 플랫폼 환경은 모바일, 데스크톱 또는 서버에 비해 현저하게 세분화되어 있습니다. 모든 IoT 개발 보드나 모든 임베디드 Linux 배포판이 있는 것은 아닙니다. 저수준 코드에 대한 멀티플랫폼 지원은 특히 여러 컴파일러(Clang, GCC, MSVC)가 혼재되어 있는 경우 까다로울 수 있습니다. 또한 일부 이색적인 비유닉스 운영 체제 임베디드 공간에서 VxWorks, QNX, RIOT와 같은...
- 리소스가 제한된 환경에서는 테스트하기가 어려울 수 있습니다. 메모리 부족 오류가 발생하기 쉽습니다! 전력 소비는 종종 매우 중요합니다. 그리고 소스 수준 디버거를 연결하는 것만으로도 까다로울 수 있습니다. 하지만 에릭 레이몬드의 말처럼 "눈만 충분하다면 모든 버그는 얕습니다."
기여하는 방법
개발 작업은 현재 진행 중이며 공개적으로 진행 중이며 커밋은 Github 리포지토리로 바로 이동합니다. 버그 보고, 제안, 풀 리퀘스트를 보내주시기 바랍니다. (기여하고 싶으시다면 저희의 가이드라인 먼저) 그 어느 때보다 더 많은 플랫폼과 언어로 Couchbase Lite를 제공하는 데 동참해 주시기 바랍니다.