최근에 다음과 같은 기사를 읽었습니다. Scotch.io Mongoose와 MongoDB를 사용하는 것에 대해 질문했습니다. 몽구스 대신 오트만을 사용한다면 Couchbase도 같은 기능을 할 수 있겠다는 생각이 들었습니다.
이 글에서는 Scotch.io 글과 동일한 비교를 진행하되, 몽구스 및 몽고DB 대신 오스만 및 카우치베이스를 사용합니다.
오스만이란?
Couchbase용 Ottoman은 객체 모델과 관련된 모든 상용구 로직을 자동으로 생성하는 객체 문서 매퍼(ODM)로, 객체 모델을 구축할 수 있습니다.
Ottoman을 사용하면 Node.js를 사용하여 Couchbase Server의 CRUD 명령에 쉽게 액세스할 수 있습니다. Ottoman을 사용하려면 다음 명령을 사용하여 Node.js 프로젝트에 추가해야 합니다:
1 2 3 |
npm 설치 오스만 --저장 |
이제 프로젝트에 라이브러리를 다운로드했으므로 소스 코드에 라이브러리를 포함시켜야 합니다. JavaScript 파일 중 하나에 다음을 추가하면 됩니다:
1 2 3 |
var 오스만 = require("ottoman"); |
프로젝트에 Ottoman 라이브러리가 포함되었으므로 이제 Ottoman에게 버킷 중 하나에 대한 액세스 권한을 부여해야 합니다.
1 2 3 |
오스만.버킷 = (new 카우치베이스.클러스터("http://localhost:8091")).오픈버킷("버킷 이름-여기"); |
이전에 Couchbase용 Node.js SDK를 사용해 본 적이 있다면 위의 내용이 익숙하게 보일 것입니다. 클러스터에 연결하고 버킷을 연 다음 Ottoman에 할당하기만 하면 됩니다.
이 시점에서 Ottoman을 사용하여 개발 프로세스를 가속화할 수 있습니다.
모델 정의하기
Couchbase에 대한 CRUD 작업을 시작하기 전에 먼저 Ottoman 모델을 정의해야 합니다. 이 모델은 데이터베이스의 문서를 나타냅니다.
Ottoman으로 만드는 모델에는 프로퍼티와 메서드가 있을 수 있습니다. 메소드 부분은 곧 다루겠지만 지금은 프로퍼티가 있는 간단한 모델을 살펴보겠습니다.
사용자를 위한 샘플 모델
애플리케이션의 신규 사용자를 위한 다음 모델을 예로 들어 보겠습니다(이 예에서는 간단합니다).
1 2 3 4 5 6 7 8 |
var 사용자 모델 = 오스만.모델("사용자", { 이름: {유형: "문자열"}, 성: {유형: "문자열"}, 이메일: {유형: "문자열"}, created_at: {유형: "날짜", 기본값: 날짜.지금} }); |
이제 이렇게 사용할 수 있는 모델이 생겼습니다:
1 2 3 4 5 6 7 |
var myUser = new 사용자 모델({ 이름: "Nic", 성: "라보이", 이메일: "test@example.com" }); |
우리는 이름, 성및 이메일를 설정할 필요는 없지만 created_at 값을 설정해야 합니다. 기본적으로 이 값을 설정하지 않으면 현재 타임스탬프로 설정되기 때문입니다.
사용자 지정 방법
모델 내에서 일관된 작업을 수행하는 메서드를 만들고 싶다고 가정해 봅시다. 간단한 UserModel 객체를 이미 생성했다고 가정하고 다음을 예로 들어보겠습니다.
1 2 3 4 5 |
사용자 모델.프로토타입.printWhoDaBoss = 함수() { 콘솔.로그(이.이름 + " " + 이.성 + "다 보스"); } |
이론상으로는 특정 오스만 모델의 이름과 성이 인쇄됩니다.
사용자 지정 메서드에 대한 샘플 사용법
사용자 지정 방법을 사용하려면 printWhoDaBoss 를 클릭하고 다음과 같은 작업을 수행합니다:
1 2 3 4 5 6 7 8 9 |
var myUser = new 사용자 모델({ 이름: "Nic", 성: "라보이", 이메일: "test@example.com" }); myUser.printWhoDaBoss(); |
위의 내용은 다음과 같이 출력됩니다. 닉 라보이는 다 보스. 물론 이 특정 기능은 쓸모가 없지만 상상력을 발휘하여 더 나은 컨셉을 만들 수 있습니다.
저장하기 전에 함수 실행
문서가 카우치베이스에 저장되기 전에 작업을 실행하려면 어떻게 해야 할까요? 이 작업은 pre 예약 메서드를 사용할 수 있습니다. 예를 들어 모든 사람의 성을 저장하기 전에 변경하고 싶다고 가정해 보겠습니다:
1 2 3 4 5 6 |
사용자 모델.pre("저장", 함수(다음) { 이.성 = "다 보스 " + 이.성; 다음(); }); |
이제 다음 섹션에서 설명할 문서를 저장하려고 할 때 성 앞에 접두사가 붙습니다. 예를 들어 Raboy 가 될 것입니다. 다 보스 라보이. 이 경우 특별히 유용하지는 않지만 대략적인 개념은 이해하실 수 있을 것입니다.
문서 만들기
문서를 만들려면 기본 제공 기능을 사용해야 합니다. 저장 메서드를 사용합니다. 우리 모델을 사용하면 다음과 같은 작업을 수행할 수 있습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var myUser = new 사용자 모델({ 이름: "Nic", 성: "라보이", 이메일: "test@example.com" }); myUser.저장(함수(오류) { 만약(오류) { 콘솔.로그("오류가 발생했습니다 -> " + JSON.문자열화(오류)); } 콘솔.로그("저장 성공!"); }); |
키가 생성되고 문서가 데이터베이스에 저장됩니다.
NoSQL 문서 읽기
Ottoman으로 문서를 읽는 것은 우리가 할 수 있는 읽기 유형이 다양하기 때문에 조금 다릅니다. 몇 가지 사용 시나리오를 분석해 보겠습니다.
모든 문서 찾기
NoSQL에서는 문서 ID를 모를 때 문서를 가져오는 것이 어려운 경우가 많습니다. 뷰를 만들거나 Couchbase의 N1QL 기술을 사용하지 않으면 거의 운이 없을 것입니다. 여기에 대안이 있습니다.
1 2 3 4 5 6 7 8 |
사용자 모델.찾기({}, 함수(오류, 결과) { 만약(오류) { 콘솔.로그("오류가 발생했습니다 -> " + JSON.문자열화(오류)); } // 결과 오스만 모델로 작업하기 }); |
위에서는 Ottoman UserModel을 사용하여 생성된 모든 문서를 찾을 수 있습니다.
특정 문서 찾기
다른 시나리오가 있습니다. 모든 문서를 원하지 않고 문서 ID를 모른다고 가정해 보겠습니다. Ottoman을 사용하여 쿼리를 수행할 수 있습니다. 찾기 명령을 사용합니다.
1 2 3 4 5 6 7 8 |
사용자 모델.찾기({성: "라보이"}, 함수(오류, 결과) { 만약(오류) { 콘솔.로그("오류가 발생했습니다 -> " + JSON.문자열화(오류)); } // 결과 오스만 모델로 작업하기 }); |
ID로 문서 찾기
원하는 문서의 ID를 알고 있다고 가정해 보겠습니다. 실행하여 오스만 모델을 가져올 수 있습니다:
1 2 3 4 5 6 7 8 |
사용자 모델.getById("document-id-here", 함수(오류, 결과) { 만약(오류) { 콘솔.로그("오류가 발생했습니다 -> " + JSON.문자열화(오류)); } // 결과 오스만 모델로 작업하기 }); |
이것은 그냥 get 메서드를 호출하면 JSON 데이터 대신 완전한 기능을 갖춘 오스만 모델이 남게 됩니다.
기존 문서 업데이트하기
Ottoman으로 문서를 업데이트하려면 먼저 문서를 로드한 후 조작을 시도해야 하므로 약간 까다로울 수 있습니다. ID로 특정 문서를 찾은 다음 다음과 같이 저장 명령을 수행하면 됩니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
사용자 모델.getById("document-id-here", 함수(오류, 결과) { 만약(오류) { 콘솔.로그("오류가 발생했습니다 -> " + JSON.문자열화(오류)); } 결과.이름 = "Nicolas", 결과.저장(함수(오류) { 만약(오류) { 콘솔.로그("오류가 발생했습니다 -> " + JSON.문자열화(오류)); } }); }); |
위의 예에서는 먼저 특정 모델을 가져와서 이름만 변경한 다음 저장을 호출했을 것입니다. 그리고 저장 명령으로 생성하거나 업데이트할 수 있지만, 그 시점까지 이어지는 것은 사용자의 몫입니다.
문서 제거하기
문서를 삭제하는 것은 Ottoman으로 문서를 업데이트하는 것과 비슷한 방식으로 작동합니다. 먼저 조회를 수행하여 문서를 로드한 다음 제거 함수를 사용할 수 있습니다. 이에 대한 간단한 예는 아래에서 확인할 수 있습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
사용자 모델.getById("document-id-here", 함수(오류, 결과) { 만약(오류) { 콘솔.로그("오류가 발생했습니다 -> " + JSON.문자열화(오류)); } 결과.제거(함수(오류) { 만약(오류) { 콘솔.로그("오류가 발생했습니다 -> " + JSON.문자열화(오류)); } 콘솔.로그("문서가 삭제되었습니다!"); }); }); |
결론
Ottoman은 개체를 모델링하고 CRUD 유형 작업에 훌륭하게 작동하는 Couchbase를 위한 훌륭한 ODM 도구입니다. 몽고DB용 몽구스는 다음 문서에서 설명한 대로 Ottoman과 비슷해지려고 노력합니다. Scotch.io 에 대해 설명했습니다. 이 글은 오스만도 마찬가지로 사용하기 쉽다는 것을 보여드리기 위해 작성되었습니다.