카우치베이스 카펠라에는 새로운 데이터 API가 있습니다. 이미 SDK가 있는데 이것이 왜 중요한지 궁금하다면 다음과 같이 답할 수 있습니다. 문서에서 다루고 있습니다. - 하지만 간단한 비교를 해보겠습니다:
- 데이터 API: HTTP, 언어, 런타임에 구애받지 않고, 종속성이 없는 간편한 통합, 지연 시간, 처리량, 복원력 기능의 절충점을 제공합니다.
- SDK: 네이티브 라이브러리, 더 풍부한 기능, 더 나은 성능, 확장성과 복원력이 중요한 워크로드에 더 적합합니다.
몇 가지 사용 사례:
- FaaS/서버리스용 기능: AWS 람다, 구글 클라우드 함수, 애저 함수, 넷플라이 함수
- SaaS 통합: Zapier, IFTTT, 릴레이, 메이크, N8N, 플로우와이즈, 노드-RED
- 스크립팅: 젠킨스 파이프라인 또는 GitHub 액션
- 내부 도구: 대시보드, Grafana
이러한 모든 사용 사례는 구현할 수 있지만, 자체 Couchbase SDK 지원 API를 배포 및 관리하거나 코드가 실행되는 곳에서 SDK를 사용할 수 있는지 확인해야 합니다. - 어떤 경우에는 불가능합니다.
이제 사용 사례 예시를 통해 이 모든 것이 실제로 어떻게 작동하는지 살펴보겠습니다.
Node-RED 예
Node-RED를 사용하면 이벤트 중심 애플리케이션을 위한 로우코드 프로그래밍이 가능합니다. 시각적이고 간단하며 가볍고 다양한 하드웨어 플랫폼에서 실행됩니다. 하지만 외부 모듈의 사용을 지원하지만, 일부 - 특히 노드 SDK와 같이 네이티브 라이브러리에 의존하는 라이브러리는 사용하기 어려울 수 있습니다. 이는 새로운 데이터 API를 사용해 볼 완벽한 핑계가 됩니다.
아래는 파리에서 무슨 일이 일어나고 있는지 알아보기 위해 루마에서 데이터를 스크랩하는 간단한 사용 사례입니다. 아래에서 결과를 확인할 수 있습니다. 최상위 흐름은 수집이고, 두 번째 흐름은 디버깅 쿼리입니다.

수집 흐름
- 시작: 72시간마다 이를 트리거하는 수집 노드입니다.
- 루마 쿼리: 다음 주소로 보내는 HTTP 요청 https://luma.com/paris.
- 이벤트를 추출합니다: 이벤트 목록을 문자열로 검색하는 HTML 파서입니다.
- JSON으로 변환합니다: 이 문자열을 JSON 객체로 변환하는 JSON 파서입니다.
- Parse_to_events: 이 객체를 가져와 필요한 데이터만으로 새 객체를 생성하는 함수입니다.
코드는 다음과 같습니다:
|
1 2 |
var newMsg = { payload: msg.payload[0].content.props.pageProps.initialData.data.events }; return newMsg; |
- forEach: 이전 단계의 이벤트 JSON 개체를 분할하는 분할 작업입니다.
- 카우치베이스에서 이벤트를 만듭니다: HTTP 요청은 카펠라 데이터 API. 이전 단계의 페이로드에 있는 내용이 요청의 본문이 됩니다. URL 필드에 Mustache 템플릿을 사용할 수 있습니다. 다음은 실제 단계의 스크린샷입니다. 이 curl 명령을 실행하는 것과 같습니다:
|
1 2 3 |
curl -X PUT --user api:**** -H 'Content-Type: application/json' -d '{"event":"data",...}' https://snzd9hz3unnntl7.data.cloud.couchbase.com/v1/buckets/events/scopes/paris/collections/luma/documents/fd5hds83 |

- Debug1: 모든 요청의 결과를 확인할 수 있는 디버그 단계입니다.
디버그 흐름
- 시작: 수동으로 트리거해야 하는 수집 노드입니다.
- SQL_Query: 실행할 쿼리를 나타내는 JSON 객체를 반환하는 함수입니다.
|
1 2 3 |
var query = { statement: "SELECT * FROM events.paris.luma ;" } var newMsg = { payload: query }; return newMsg |

- 카우치베이스에서 이벤트를 쿼리합니다: 주어진 쿼리를 실행하는 HTTP 요청입니다. 다음 curl 명령과 같은 형태입니다:
|
1 2 3 |
curl -X POST --user api:**** -H 'Content-Type: application/json' -d '{ statement: "SELECT * FROM events.paris.luma ;" }' https://snzd9hz3unnntl7.data.cloud.couchbase.com/_p/query/query/service |

직접 체험해 보기
Node-RED는 다음을 통해 머신에서 쉽게 실행할 수 있습니다. 도커 실행 -it -p 1880:1880 --이름 내노더 노더/노드-레드
그런 다음 다음으로 이동합니다. http://127.0.0.1:1880/ 를 클릭하고 지침을 따릅니다. 노드를 직접 만들거나 이 JSON 내보내기를 사용하여 이 플로우를 가져올 수 있습니다:
|
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 |
[ { "id":"f6f2187d.f17ca8", "type":"tab", "label":"Event Ingestion", "disabled":false, "info":"" }, { "id":"5039574f789798bf", "type":"inject", "z":"f6f2187d.f17ca8", "name":"Start", "props":[ { "p":"payload" }, { "p":"topic", "vt":"str" } ], "repeat":"259200", "crontab":"", "once":false, "onceDelay":0.1, "topic":"", "payload":"", "payloadType":"date", "x":90, "y":60, "wires":[ [ "a7e82076addaf2bf" ] ] }, { "id":"65dcb4aeead12a54", "type":"debug", "z":"f6f2187d.f17ca8", "name":"debug 1", "active":true, "tosidebar":true, "console":false, "tostatus":false, "complete":"payload", "targetType":"msg", "statusVal":"", "statusType":"auto", "x":580, "y":120, "wires":[ ] }, { "id":"a7e82076addaf2bf", "type":"http request", "z":"f6f2187d.f17ca8", "name":"Query Luma", "method":"GET", "ret":"txt", "paytoqs":"ignore", "url":"https://luma.com/paris", "tls":"", "persist":false, "proxy":"", "insecureHTTPParser":false, "authType":"", "senderr":false, "headers":[ ], "x":290, "y":60, "wires":[ [ "c463b094ea88ec73" ] ] }, { "id":"c463b094ea88ec73", "type":"html", "z":"f6f2187d.f17ca8", "name":"Extract Events", "property":"payload", "outproperty":"payload", "tag":"#__NEXT_DATA__", "ret":"compl", "as":"single", "chr":"content", "x":480, "y":60, "wires":[ [ "3be4c6d9e4554672" ] ] }, { "id":"3be4c6d9e4554672", "type":"json", "z":"f6f2187d.f17ca8", "name":"Convert to JSON", "property":"payload[0].content", "action":"obj", "pretty":true, "x":690, "y":60, "wires":[ [ "9b66605f179021d0" ] ] }, { "id":"9b66605f179021d0", "type":"function", "z":"f6f2187d.f17ca8", "name":"parse_to_events", "func":"var newMsg = { payload: msg.payload[0].content.props.pageProps.initialData.data.events };\nreturn newMsg;", "outputs":1, "timeout":0, "noerr":0, "initialize":"", "finalize":"", "libs":[ ], "x":900, "y":60, "wires":[ [ "1924a3c26b9520bd" ] ] }, { "id":"1924a3c26b9520bd", "type":"split", "z":"f6f2187d.f17ca8", "name":"foreach", "splt":"1", "spltType":"len", "arraySplt":1, "arraySpltType":"len", "stream":true, "addname":"", "property":"payload", "x":120, "y":120, "wires":[ [ "7e3a02b180875fed" ] ] }, { "id":"7e3a02b180875fed", "type":"http request", "z":"f6f2187d.f17ca8", "name":"create event in couchbase", "method":"PUT", "ret":"txt", "paytoqs":"query", "url":"https://snzd9hz3unnntl7.data.cloud.couchbase.com/v1/buckets/events/scopes/paris/collections/luma/documents/{{{payload.event.url}}}", "tls":"", "persist":true, "proxy":"", "insecureHTTPParser":false, "authType":"basic", "senderr":false, "headers":[ ], "x":370, "y":120, "wires":[ [ "65dcb4aeead12a54" ] ] }, { "id":"f309559bde533ab6", "type":"inject", "z":"f6f2187d.f17ca8", "name":"Start", "props":[ { "p":"payload" }, { "p":"topic", "vt":"str" } ], "repeat":"", "crontab":"", "once":false, "onceDelay":0.1, "topic":"", "payload":"", "payloadType":"date", "x":90, "y":200, "wires":[ [ "49244e9d100517aa" ] ] }, { "id":"7945b9a86fa49919", "type":"http request", "z":"f6f2187d.f17ca8", "name":"query events in couchbase", "method":"POST", "ret":"txt", "paytoqs":"query", "url":"https://snzd9hz3unnntl7.data.cloud.couchbase.com/_p/query/query/service", "tls":"", "persist":true, "proxy":"", "insecureHTTPParser":false, "authType":"basic", "senderr":false, "headers":[ { "keyType":"other", "keyValue":"Accept", "valueType":"other", "valueValue":"application/json" } ], "x":520, "y":200, "wires":[ [ "24b1dd899b6d2ef1" ] ] }, { "id":"24b1dd899b6d2ef1", "type":"debug", "z":"f6f2187d.f17ca8", "name":"debug 2", "active":true, "tosidebar":true, "console":false, "tostatus":false, "complete":"payload", "targetType":"msg", "statusVal":"", "statusType":"auto", "x":740, "y":200, "wires":[ ] }, { "id":"49244e9d100517aa", "type":"function", "z":"f6f2187d.f17ca8", "name":"SQL Query", "func":"var query = { statement: \"SELECT * FROM events.paris.luma ;\" }\nvar newMsg = { payload: query };\nreturn newMsg", "outputs":1, "timeout":0, "noerr":0, "initialize":"", "finalize":"", "libs":[ ], "x":270, "y":200, "wires":[ [ "7945b9a86fa49919" ] ] } ] |
데이터 API가 활성화된 Capella 인스턴스가 필요합니다. 무료 티어에서 사용할 수 있으며 쉽게 테스트할 수 있습니다. 다음 주소로 이동하세요. cloud.couchbase.com, 를 클릭하고 클러스터를 연 다음 연결 탭으로 이동합니다. 그런 다음 데이터 API 사용. 준비되는 데 최대 20분 정도 소요될 수 있으므로 그 동안 IP 주소 및 자격 증명에 대한 지침을 따를 수 있습니다.
이제 데이터 API, 특히 API의 URL 엔드포인트를 사용하는 데 필요한 모든 것을 갖추게 되었습니다. 또한 참조 문서 에서 자세한 내용을 확인하세요.
이 새로운 아카펠라 기능과 이제 사용할 수 있는 모든 사용 사례를 즐겨보시기 바랍니다.