어제 카우치베이스의 쿼리 팀에서 오랫동안 기다려온 N1QL 개발자 프리뷰 4(N1QL Developer Preview 4)를 출시했습니다! N1QL을 아직 들어보지 못하셨다면, 카우치베이스와 같은 비관계형 데이터 저장소를 쿼리하기 위해 카우치베이스에서 개발 중인 완전히 새로운 SQL 유사 쿼리 언어입니다. 목표는 SQL의 익숙함을 유연하고 스키마가 없는 JSON의 세계로 가져오는 것입니다. 오늘 저희는 카우치베이스 .NET SDK 2.0에서 제공하는 N1QL DP4 지원에 대한 “프리뷰”를 출시합니다.
제가 다시 한 번 말씀드리겠습니다: N1QL DP4에서 제공하는 기능의 대부분을 포함하고 있으나, 아직 정식 출시되지 않았고 테스트를 거치지 않았으며 프로덕션 환경에서는 절대 실행해서는 안 되는 프리릴레이션 버전의 SDK를 제공하고 있다는 뜻입니다! 프로덕션 환경에서 절대 사용하지 마세요!!!! 이제 재미를 쫓는 사람들이 할 말을 다 하고 파티를 망쳐놓았으니, N1QL DP4에 무엇이 들어 있는지, 그리고 이 SDK의 미리 보기 릴리스에서 현재 지원하는 기능이 무엇인지 알아보겠습니다!
N1QL 개발자 미리보기 4에는 무엇이 포함되어 있나요?
N1QL DP4는 DP 1~3에서 이루어진 훌륭한 성과를 바탕으로, 완전하고 완전한 N1QL 구문 및 요소 언어를 제공합니다. 또한, 서브쿼리, INSERT, UPDATE, UPSERT, DELETE와 같은 데이터 조작 언어(DML) 구문에 대한 실험적 지원, 그리고 SDK에 매우 중요한 완전히 새로운 REST API를 제공합니다!
REST API가 대대적으로 개편되었으며 정식 출시(상용화)에 훨씬 가까워졌습니다. 새로운 REST API가 지원하는 기능의 일부 목록은 다음과 같습니다:
- 프리페어드 스테이트먼트 지원(쿼리 계획 캐싱과 유사함)
- 위치 및 키워드 매개변수
- 더 개선되고 강력해진 오류 API
- 쿼리 지표
- 쿼리 시간 초과
마침내 문서가 개편 및 업데이트되었으며 다음 링크에서 확인할 수 있습니다 여기.
DP4 설치 중
안타깝게도 N1QL DP4는 Couchbase Server와 거의 완전히 통합되어 있지만, 아직 패키지에 포함되지는 않았습니다. 즉, DP4를 사용하려면 파일을 다운로드하여 서비스를 시작하고 Couchbase Server 인스턴스와 연결해야 합니다. 다행히도 이 작업은 비교적 쉽습니다:
- 먼저 N1QL DP4를 다운로드하십시오 여기.
- 그런 다음 하드 드라이브의 디렉터리에 압축을 푸세요.
- 마지막으로, 다음 명령을 실행하여 서비스를 시작하고 Couchbase Server 인스턴스와 연결합니다: .cbq-engine -datastore=https://[server_name]:8091/
이렇게 하고 나면([server name]을 Couchbase 인스턴스의 IP로 변경해야 합니다), 사용하고자 하는 각 버킷에 대해 인덱스를 생성해야 합니다. 이를 위해 대화형 쿼리 명령줄 도구를 실행하여 인덱스를 생성하거나, N1QL DP4 “preview”가 포함된 Couchbase .NET 2.0 SDK를 다운로드할 수 있습니다. 먼저 대화형 쉘을 사용하는 방법을 보여 주고, 나중에 SDK를 사용하여 프로그래밍 방식으로 수행하는 방법을 보여 주겠습니다.
- N1QL DP4의 압축을 해제한 디렉터리로 이동하여 다음을 입력하고 변경하세요.
Couchbase 서버 인스턴스 사용: .cbq -engine=https:// :8093/ - 다음 내용을 입력하세요: CREATE PRIMARY INDEX ON [bucket name]
- Enter를 누르세요 ([bucket name]을 Couchbase 서버 인스턴스의 유효한 버킷 이름으로 변경해야 합니다).
나중에 Couchbase에 기본 설치되어 오는 “beer sample” 샘플 버킷을 사용할 것이므로, 따라오고 싶으시다면 여러분도 그렇게 하시는 것이 좋습니다. N1QL DP4를 다운로드하고 설치하고 나면, Couchbase .NET SDK 2.0을 사용하여 인덱스를 만들고 쿼리를 실행할 수 있습니다.
N1QL DP4와 함께 SDK 사용하기
SDK를 사용하려면 .NET Framework 4.5 이상과 함께 Visual Studio가 설치되어 있어야 합니다. Mono를 사용하는 경우 테스트해 보지는 않았지만, .NET Framework 4.5와 기능적으로 동등한 버전의 Mono를 사용하고 있다면 따라갈 수 있을 것입니다. 구체적으로는 async/await, dynamic 키워드, 그리고 일부 새로운 .NET 라이브러리에 대한 지원이 필요합니다.
비트를 다운로드하고 참조하기
SDK를 빠르게 설정하고 시작하려면 다음 단계를 따르세요.
- SDK의 특별 미리보기 버전은 다음 위치에서 확인할 수 있습니다. 여기. 하드 드라이브의 적당한 곳에 다운로드하여 압축을 푸세요.
- VS를 열고 새 “콘솔 응용 프로그램” 프로젝트를 만든 다음, 이름을 N1QL-DP4-Preview 또는 적절한 이름으로 지정하세요.
- 오른쪽에 있는 “솔루션 탐색기”에서 참조 폴더를 마우스 우클릭한 후 “참조 추가”를 클릭하세요.”
- “찾아보기” 버튼을 사용하여 첫 번째 단계에서 다운로드하고 압축을 해제한 DLL을 찾고 Couchbase.NetClient.dll, Common.Logging.dll 및 Newtonsoft.Json.dll에 대한 참조를 추가합니다.
여기까지 진행하셨다면 코드 작성을 시작하실 수 있습니다. Couchbase 서버 인스턴스가 로컬호스트(localhost)에서 실행되고 있다고 가정하겠습니다. 그렇지 않다면 원격 설치 환경을 가리키도록 클라이언트를 설정해야 합니다.
새로운 QueryRequest API
N1QL 개발자 미리보기 3(DP3)에 대한 SDK 지원은 매우 미미했습니다. 애드혹(ad-hoc) 문자열 리터럴 쿼리만 지원되었습니다. 새로운 REST API와 함께 새로운 QueryClient 클래스가 생성되었고 CouchbaseBucket 클래스와 통합되었습니다. 이 클래스는 새로운 REST API 기능의 대부분을 위한 래퍼(wrapper) API를 제공합니다. 일부 기능이 아직 완료되지 않았기 때문에 “대부분'이라고 표현했습니다.
이 새 API에는 플루언트(fluent) 방식의 인터페이스를 사용하여 쿼리를 생성하기 위한 클래스가 포함되어 있습니다. 이는 클라이언트가 지원하며 뷰 쿼리를 위해 SDK GA의 일부로 출시되었던 ViewQuery 클래스/API와 매우 유사합니다. 시그니처는 다음과 같습니다:
[이미지]
N1QL문을 사용하여 쿼리 요청을 구성하는 다양한 REST API 매개변수를 연결할 수 있습니다. N1QL문 자체는 여전히 리터럴 문자열이지만, 쿼리 서비스가 쿼리를 처리하는 방식을 제어할 수 있는 옵션을 제공할 수 있습니다. 이 게시물에서는 이러한 각 매개변수에 대해 자세히 다루지 않으며, 그것은 다른 블로그 게시물에서 다루도록 하겠습니다.
QueryRequest가 글쎄요, N1QL 언어와는 실제로 아무런 관련이 없다는 점에 주목하세요? 그것은 의도된 것입니다. N1QL 쿼리 생성을 다루는 또 다른 프로젝트가 진행 중입니다. 바로 N1QL용 언어 통합 쿼리(LINQ) 제공자인데, 개발 단계로는 아직 먼 이야기입니다.
이 객체의 역할은 IDE의 인텔리센스와 마침표(.) 연산자를 사용하여 수동으로 작성할 필요 없이 쿼리 요청을 쉽게 작성할 수 있도록 하는 것입니다. 예를 들면:
인덱스 생성
다음 예제에서는 위에서 설명한 QueryRequest와 Couchbase .NET SDK 2.0 N1QL DP4 Preview를 사용하여 실시간으로 인덱스를 생성하고 제거하는 방법을 보여드리겠습니다.
static void CreateIndex(IBucket bucket)
{
IQueryResult result;
var indexQuery = new QueryRequest().Statement("SELECT name FROM system:keyspaces");
if (bucket.Query(indexQuery).Rows.Any(index => index.name == "beer-sample"))
{
var deleteIndexQuery = new QueryRequest().Statement("DROP PRIMARY INDEX ON `beer-sample`");
result = bucket.Query(deleteIndexQuery);
Console.WriteLine("PRIMARY Index on `beer-sample` was deleted: {0}", result.Success);
}
var createIndexQuery = new QueryRequest().Statement("CREATE PRIMARY INDEX ON `beer-sample`");
result = bucket.Query(createIndexQuery);
Console.WriteLine("PRIMARY Index on `beer-sample` was created: {0}", result.Success);
}
여기서 우리는 먼저 인덱스가 있는 버킷을 확인하기 위해 시스템 “카탈로그”(라 부를 수 있는 것)에 쿼리를 수행합니다. 인덱스가 있는 버킷이 이 목록에 반환됩니다. 인덱스가 존재하면, (편의상 다시 생성하기 위해) 이를 삭제합니다. 마지막으로, 인덱스를 다시 생성합니다. 프로덕션 환경에서는 보통 이렇게 하지 않지만, 여기서는 N1QL과 SDK가 제공하는 기능을 설명하기 위해 이를 수행한다는 점에 유의하세요.
이름 지정 매개변수와 위치 매개변수 사용하기
N1QL DP4는 매개변수화된 쿼리를 생성하는 기능을 도입합니다. 이름/값 쌍과 같은 이름 매개변수 기능과, 매개변수의 위치가 순서 번호와 일치하는 위치 매개변수 기능이 존재합니다.
위치 매개변수를 사용하는 쿼리의 예는 다음과 같습니다:
static void PositionalParameters(IBucket bucket)
{
var queryRequest = new QueryRequest()
.Statement(“SELECT * FROM `beer-sample` WHERE type=$1 LIMIT $2”)
.AddPositionalParameter(“beer”)
.AddPositionalParameter(10);
var result = bucket.Query
foreach (var row in result.Rows)
{
Console.WriteLine(row);
}
}
이 시점에서 위치 매개변수의 인덱스가 0부터 시작하지 않는다는 점에 유의하십시오! 따라서 $1과 $2를 $0과 $1로 대체하면 오류 메시지가 표시됩니다.
이것도 마찬가지로 이름/값 쌍과 같으며, 위치 매개변수와 달리 순서가 중요하지 않습니다. 다음은 이름/값 쌍을 사용하여 위의 쿼리를 다시 작성한 것입니다.
static void NamedParameters(IBucket bucket)
{
var queryRequest = new QueryRequest()
.Statement(“SELECT * FROM `beer-sample` WHERE type=$type LIMIT $limit”)
.AddNamedParameter(“limit”, 10)
.AddNamedParameter(“type”, “beer”);
var result = bucket.Query
foreach (var row in result.Rows)
{
Console.WriteLine(row);
}
}
이것은 이전과 동일한 문장이지만, 순서가 중요하지 않다는 것을 보여주기 위해 QueryRequest를 생성할 때 매개변수의 순서를 재조정했습니다.
준비된 문장
프리페어드 스테이트먼트는 관계형 데이터베이스의 캐시된 쿼리 플랜과 다소 유사합니다. 이들이 하는 일은 쿼리 구문 분석 비용을 단 한 번만 발생시키고, 이후에 프리페어드 스테이트먼트를 반복해서 사용할 수 있도록 하는 것입니다. 이 기능은 N1QL DP4에 포함되어 있지만, 이 기능에 대한 SDK 지원은 불완전합니다(아직 제대로 작동하지 않습니다). 프리뷰 코드가 SDK의 마스터 브랜치와 병합되면 향후 릴리스에서 정상적으로 작동할 것으로 예상됩니다.
결론적으로
자, 이것으로 Couchbase .NET SDK 2.0 N1QL DP4 미리보기를 마칩니다! 앞으로 다룰 내용이 훨씬 더 많으며, 개발이 진전되고 N1QL GA에 가까워짐에 따라 더 많은 블로그 게시물을 올릴 예정입니다!
피드백이 있거나 문제나 버그가 발생하면 여기에 댓글을 남기거나 Jira에 버그를 게시해 주세요. 또한, 이 블로그에 포함된 코드는 깃허브에서 확인할 수 있습니다. 여기.
작가
4개의 응답
-
여기는 맥도날드! (나는 이 맛이 좋아!)
-
N1QL의 상용화 출시에 대한 소식이 있나요?
-
프로덕션에 사용할 수 없다면 왜 이걸 작성하고 계신가요????
상용 버전은 언제 출시되나요?-
카우치베이스는 인터페이스를 확정하고 프로덕션 단계로 넘어가기 전에 기능 개발 방향을 잡는 데 도움을 주고자 하는 이들로부터 피드백을 받기 위해 개발자 미리보기(DP)를 출시합니다. 그것이 바로 그 취지입니다.
이번 릴리스와 관련해서 지난주에 꽤 이야기가 있었습니다. 곧 Couchbase Server 4.0의 DP(개발자 미리보기)가 나오고, 그 뒤를 이어 베타와 GA(정식 출시)가 예정되어 있습니다. 이 내용 중 하나를 확인해 보세요: https://www.couchbase.com/press...
-

댓글 남기기
댓글을 달기 위해서는 로그인해야합니다.