다양한 개발자가 사용하는 소프트웨어를 작성할 때 어려운 점 중 하나는 안정적이고 상호 호환되는 API를 유지하는 것입니다. 때로는 이러한 호환성 요구로 인해 흥미로운 새 기능을 구현하는 데 제약이 따르기도 합니다. 그런 점에서 곧 출시될 Node.js 3.0 SDK의 알파 버전 출시를 발표하게 되어 매우 기쁩니다. 이번 주요 버전 업그레이드를 통해 저희는 ECMAScript 6의 새로운 기능을 강력하게 활용하는 강력한 API를 구축하는 데 다시 집중할 수 있게 되었고, Couchbase의 광범위한 기능 세트를 Node.js에 보다 직관적으로 통합할 수 있게 되었습니다. 또한 지난 4년간의 SDK 2.0을 통해 얻은 교훈을 바탕으로 차세대 SDK의 수명 기간 동안 언어 및 서버 기능과 함께 발전할 수 있는 미래 지향적인 API를 구축할 수 있는 기회도 가졌습니다. 이제 저희의 목표가 무엇인지 알았으니, 그 결과 어떤 변화가 있었는지 조금 더 자세히 알아보겠습니다!
프로미스 및 비동기/대기 소개
3.0 버전의 Node.js SDK는 API 전반에 걸쳐 Promise에 대한 기본 지원을 도입하여 ECMAScript 6에 도입된 새로운 비동기/대기 기능을 사용하여 비차단 연속적으로 작성된 코드를 작성하는 데 적합합니다. 이제 모든 메서드는 Promise와 이전 자바스크립트 코드의 기본 콜백 패턴을 모두 지원합니다. 이 외에도 모든 이벤트 이미터는 프로미스 지원으로 개선되었습니다. SDK 내의 다양한 쿼리 인터페이스의 경우, 데이터를 즉시 처리할지 아니면 단순히 대기하고 전체 결과 집합을 한 번에 처리할지 여부를 케이스별로 선택할 수 있습니다.
SDK 3.0에서 클러스터 및 버킷 초기화하기
SDK 2.0과 마찬가지로, 클러스터와 버킷 객체는 각각 서버와 동등한 서버를 나타내는 SDK 3.0에서 다시 등장합니다. 클러스터 연결은 SDK 2.0과 비슷한 방식으로 이루어지지만, 인증에 대한 매개변수와 패턴이 약간 개선되었습니다:
1 2 3 4 5 6 7 8 |
const 카우치베이스 = require('couchbase'); var 클러스터 = new 카우치베이스.클러스터('couchbase://localhost', { 사용자 이름: '관리자', 비밀번호: 'password', }); var 버킷 = 클러스터.버킷('default'); |
SDK 2.0과 마찬가지로 클러스터 개체는 일반적으로 애플리케이션이 시작될 때부터 애플리케이션이 종료될 때까지 수명이 긴 리소스 관리 개체입니다. 이 차세대 SDK에서는 나머지 오브젝트의 수명이 짧거나 성능 저하 없이 유지될 수 있습니다. SDK는 사용자를 대신하여 버킷 객체, 컬렉션 객체 등을 내부적으로 캐시합니다.
카우치베이스 서버 6.5용 새로운 KV API
이제 모든 키/값 작업은 컬렉션 수준에 존재하며, 항상 정확히 하나의 범위의 멤버가 됩니다. 컬렉션을 지원하지 않는 Server 버전의 경우, 과거 버킷과 똑같이 작동하는 기본 컬렉션에 액세스할 수 있습니다. 다음은 기본 컬렉션에 액세스한 다음 이를 통해 일부 데이터를 쓰고 읽는 예제입니다.
1 2 3 4 5 |
var coll = 버킷.기본 컬렉션(); var res = 기다림 coll.업서트('test', { x: 14 }); var res = 기다림 coll.get('테스트'); |
개발자 미리 보기 모드의 범위 및 컬렉션
곧 출시될 Server 6.5 릴리즈의 일부로, 아직 개발 중인 일부 기능을 노출하는 개발자 미리 보기 모드를 활성화하는 기능을 도입했습니다. 컬렉션 기능을 켜면 Couchbase Server 6.5에서 데이터 액세스의 미래를 대표하는 기능을 사용해 볼 수 있습니다. 컬렉션을 사용하면 버킷을 여러 논리적 범위 및 컬렉션으로 분할할 수 있습니다. 이것은 초기 버전의 Couchbase Server에서 이름별로 일종의 문서 그룹을 지정하는 특수한 "유형" 필드를 추가해야 했던 요구 사항을 대체하여 버킷 내에서 독립적으로 쿼리할 수 있게 해줍니다. 훨씬 더 직관적인 프로그래밍 모델이며 데이터를 더 잘 정리할 수 있게 해준다고 생각합니다. 여기 한 가지 예가 있습니다:
1 2 3 4 |
var 범위 = 버킷.범위('app1'); var coll = 범위.컬렉션('사용자'); var res = 기다림 coll.업서트('test', { x: 14 }); |
새로운 쿼리 API
쿼리가 여러 버킷을 참조할 수 있다는 점에서 N1QL은 Analytics 및 FTS와 마찬가지로 "전역" 범위로 간주됩니다. SDK 2.0에서는 처음에 N1QL 쿼리가 버킷으로 범위가 지정되었고 나중에 클러스터에 추가되었습니다. SDK 3.0에서는 현재 클러스터 개체에서만 쿼리할 수 있습니다.
1 |
var res = 기다림 클러스터.쿼리('SELECT * FROM default WHERE x=14'); |
전반적으로 모든 서비스(쿼리, FTS, 애널리틱스)는 SDK 2.0과 매우 유사한 공개 API를 사용하지만, 일관성을 위해 모든 필수 필드는 왼쪽에 매개변수로 추가되었고 선택적 매개변수는 이제 오른쪽의 '옵션' 블록 또는 구조로 통합되었습니다. 이는 전체 SDK에 걸쳐 계속 적용되며 API의 일관성을 크게 개선합니다.
1 2 3 4 |
var res = 기다림 클러스터.쿼리('SELECT * FROM default', { adhoc: false, 읽기 전용: true, }); |
릴리스 받기
Node.js 3.0 SDK의 알파 릴리스를 설치하는 경우, 평소와 같이 npm을 사용하면서 설치를 수행할 때 특정 버전을 지정하면 됩니다.
1 |
> npm 설치 카우치베이스@3.0.0-알파.1 |
이 게시물을 작성해 주신 Nice Brett에게 감사드립니다. NodeJS에서 약속 및 비동기/대기 지원을 찾고 있습니다. 이 기능을 언제 프로덕션에 사용할 수 있게 될 예정인가요?