
사진 제공 웨슬리 프라이어 라이선스에 따른 허가 CC BY-SA 2.0
tl;dr
카우치베이스 모바일 는 사용하기 쉽고 완전히 독립적으로 작동하지만 필요할 때 엔터프라이즈급 확장 기능을 제공합니다. 꼭 사용해 보세요.
처음에
이 글은 제가 이곳에 올리는 두 번째 공식 게시물입니다. 카우치베이스. 앞으로 좀 더 실용적인 문제에 대해 블로그에 포스팅할 예정입니다. 하지만 지금은 조금 더 높은 수준의 담론에 빠져보려고 합니다.
저는 오랫동안 프로그래밍을 해왔습니다. 지난 몇 년 동안 저는 모바일에 정말 빠져들었지만 다른 분야에서도 많은 일을 해왔습니다.
그래도 Couchbase에 입사하기 전에는 데이터베이스에 대해 평균 정도의 이해도를 가지고 있었습니다. 아니, 관계형 데이터베이스라고 해야 할까요. 6차 정규형을 달성하는 것이 왠지 멋져 보였지만 실제로 걱정할 필요는 없었습니다.
그럼에도 불구하고 개발을 위해서는 관계형 데이터베이스(따라서 모바일용 SQLite)가 가장 적합한 방법인 것처럼 보였습니다.
이 글에서는 제가 마음을 바꾼 이유와 여러분도 그렇게 해야 한다고 생각하는 이유에 대해 이야기해 보려고 합니다.
무대 설정
몇 년 전만 해도 관계형 데이터베이스는 다른 기술에 비해 거의 모든 면에서 우위를 점하고 있었습니다. 실제로 언어의 이름인 SQL이 데이터베이스와 거의 동의어가 될 정도로 말이죠.
웹과 모바일의 폭발적인 성장으로 세상은 많이 변했습니다. 여기에는 데이터의 종류와 데이터에 액세스하는 방법도 포함됩니다. 데이터베이스도 변화해야 했습니다. 이것이 바로 NoSQL의 탄생 배경입니다.
왜 카우치베이스 모바일인가?
Couchbase Mobile(또는 CBM)은 독립형 임베디드 데이터베이스를 포함한 완전한 패키지입니다. (독립형 부분은 실제로 Couchbase Lite라고 불립니다.) CBM의 핵심 아키텍처는 NoSQL 진영에 속합니다.
모바일 앱에 CBM을 가장 먼저 선택해야 한다고 생각하는 두 가지 강력한 이유, 즉 사용 편의성과 아키텍처 유연성에 대해 집중적으로 설명하고자 합니다. 프로젝트 시작부터 CBM을 사용하는 측면에 대해 자세히 설명하겠습니다. 성숙한 앱에서도 동일한 이유로 CBM으로 전환해야 하는 강력한 이유가 됩니다.
사용 편의성
iOS와 Android는 모두 표준 데이터베이스로 SQLite를 사용합니다. SQLite는 훌륭한 오픈 소스 관계형 데이터베이스입니다. 다만 사용하기가 쉽지 않을 뿐입니다.
Android 개발자 포털로 이동하여 SQLite 사용에 대한 최신 문서를 살펴봤습니다. 다음은 인트로 이후 첫 번째 단락의 시작 부분입니다:
다음은 데이터베이스를 만들기 위한 코드 예제입니다:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class DictionaryOpenHelper extends SQLiteOpenHelper { private static final int DATABASE_VERSION = 2; private static final String DICTIONARY_TABLE_NAME = "dictionary"; private static final String DICTIONARY_TABLE_CREATE = "CREATE TABLE " + DICTIONARY_TABLE_NAME + " (" + KEY_WORD + " TEXT, " + KEY_DEFINITION + " TEXT);"; DictionaryOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(DICTIONARY_TABLE_CREATE); } } |
재미있죠?
오해하지 마세요. Android는 멋진 기술 번들입니다. SQLite는 동급 최강의 기술입니다. 하지만 앱은 데이터를 저장해야 합니다. 그리고 프로젝트를 시작하려고 할 때 스키마 설계에 대해 고민하고 SQL 문을 문자열에 채우는 데 시간을 보내고 싶지 않습니다.
이와는 대조적으로, Couchbase Mobile을 시작하려면 대략 이렇게 해야 합니다:
|
1 2 |
manager = new Manager(new AndroidContext(this), Manager.DEFAULT_OPTIONS); database = manager.getDatabase("crud"); |
다음은 몇 가지 새로운 데이터를 저장하는 코드(상용구 제외)입니다:
|
1 2 3 4 5 6 7 8 |
Document document = database.createDocument(); String documentId = document.getId(); Map<String, Object> profile = new HashMap<>(); profile.put("firstName", "Hod"); profile.put("lastName", "Greeley"); document.putProperties(profile); |
완전히 공정한 비교는 아닙니다. Google 샘플에는 작업을 제대로 수행하는 데 필요한 몇 가지 추가 비트가 있습니다. 반면에 Couchbase 샘플에는 이미 데이터베이스에 데이터가 들어 있습니다!
진짜 요점은 이 모든 것이 얼마나 간단한지와 관련이 있습니다. 코드의 자연 구조(이 경우 Java 객체)를 데이터베이스에 필요한 구조에 매핑하는 것이 훨씬 더 쉽습니다. 매핑이 쉽기 때문에 CBM이 다른 많은 세부 사항도 대신 처리해 줍니다. 위의 코드 스니펫은 Java 객체를 파일로 직렬화하는 데 필요한 것보다 훨씬 더 많은 시간이 걸리지 않습니다!
카우치베이스는 문서 데이터베이스로, 완전한 반정형 객체를 기본 데이터 청크로 저장합니다(테이블의 행이 아닌 반정형 객체). 더 정확히 말하면, Couchbase는 JSON 객체를 저장합니다. JSON은 가볍고 유연합니다. 배열을 처리합니다. 아무것도 깨뜨리지 않고 개체를 확장할 수 있습니다. 그냥 더 좋습니다.
유연하지 않은 테이블을 서로 붙여서 복잡한 객체에 매핑하려고 하는 것과 대조해 보세요. SQL로 직접 하든, 라이브러리를 가져와 도움을 받든, 보기 좋은 모습은 아닙니다.
유연성
카우치베이스 모바일은 구조와 확장성이라는 두 가지 중요한 측면에서 유연성을 제공합니다.
구조
CBM은 "스키마가 없습니다." 이는 사용 편의성에서도 잘 드러납니다. 코드 샘플에서 문서 구조가 암시적으로 생성되는 것을 볼 수 있습니다. 테이블을 정의하거나 열 이름을 지정할 필요가 없습니다.
스키마가 없다는 것은 마이그레이션의 번거로움 없이 데이터 구조를 쉽게 변경할 수 있다는 의미이기도 합니다.
이러한 점을 설명하기 위해 각 사람마다 하나의 전화번호가 포함된 사용자 프로필로 시작한다고 가정해 보겠습니다. 두 그림은 이 프로필이 SQLite 테이블과 JSON 문서로 어떻게 보이는지 보여줍니다.



그 전환을 관리하는 것에 대해 잠시 생각해 보세요. 코드가 어떻게 보일지 보여드리려고 하지도 않겠습니다.
이와 대조적으로 JSON을 사용하면 다음과 같은 다이어그램이 나타납니다:

전화번호 입력란을 배열로 덮어쓰기만 하면 됩니다. 이전 버전과의 호환성도 쉽게 처리할 수 있습니다. 전화번호 입력이 단일 값인지 배열인지 런타임에 간단히 확인할 수 있습니다.
확장성
지금까지 말씀드린 모든 기능은 기기에서 완전히 독립적으로 작동합니다. 이는 강력하고 많은 용도로 사용할 수 있습니다. 일부 모바일 데이터베이스는 여기서 멈춥니다. 독립형으로만 작동합니다.
데이터베이스를 사용한다면 백엔드가 있으면 좋을 것 같습니다. 아니면 성공에 결정적인 역할을 할 수도 있습니다. 장치를 쉽게 전환할 수 있도록 백업을 제공하는 것만으로도 충분합니다.
백엔드가 필요해지기 시작하면 몇 가지 새로운 문제에 대해 걱정해야 합니다. 마지막으로 카우치베이스 모바일에 대한 요점을 말씀드리겠습니다. CBM에는 기기 외부 사용을 위한 많은 기능이 있습니다.
제가 가장 매력적이라고 생각하는 부분으로 돌아가서, 여기서 가장 눈에 띄는 우려는 확장성입니다. 10,000명의 사용자를 처리하는 데 비용이 얼마나 들까요, 아니면 10만 명이나 100만 명까지 처리하는 데 비용이 얼마나 들까요? 아키텍처가 많은 재작업 없이 오프디바이스 작업도 지원할 수 있을까요?
CBM에는 동기화 게이트웨이라는 것이 포함되어 있습니다. 동기화 게이트웨이(SG)는 카우치베이스 라이트와 함께 사용하는 것만으로도 몇 가지 멋진 용도가 있습니다. 정말 빛을 발하는 곳은 다음과 같은 복제 엔드포인트입니다. 카우치베이스 서버. Couchbase Server는 이미 주요 설치에 사용되고 있는 엔터프라이즈급 고강도 NoSQL 패키지입니다. 동기화 게이트웨이에 대해 자세히 알아보세요. 여기. 다음 이미지를 통해 구성 요소가 어떻게 결합되는지 알 수 있습니다.

결론부터 말하자면, CBM은 당신을 구석에 몰아넣지 않습니다. 시작은 쉬우며, 진행 상황에 따라 유연하게 대처할 수 있는 CBM을 사용하면 됩니다.
마무리
CBM은 문서 기반의 확장성이 뛰어난 최신 모바일용 NoSQL 솔루션입니다.
-
CBM은 디바이스 내에서 독립적으로 잘 작동합니다.
-
카우치베이스는 원하는 경우 완전한 백엔드를 제공합니다.
-
데이터 형식은 기본 표현에 쉽게 매핑됩니다.
이를 통해 거의 모든 프로젝트에 더 쉽게 사용할 수 있는 솔루션을 제공합니다. 사용자 환경설정을 위한 편리한 저장소로 활용하세요. 앱과 함께 정적 데이터 번들을 제공하는 데 사용하세요. 또는 수백만 명의 활성 사용자를 대상으로 촬영하고 싶을 때 사용하세요. 단순함을 즐기면서 필요에 따라 유연하게 조정하고 확장할 수 있습니다.