몇 년 전만 해도 NoSQL은 외계 괴물처럼 들렸을지 모르지만, 기술의 발전과 최신 웹 및 모바일 애플리케이션이 데이터를 저장하고 액세스하는 방식을 고려할 때 오늘날 개발의 중요한 부분이 되었으며, 지금도 마찬가지입니다.
Couchbase는 최신 쿼리 기술을 추가하여 그 어느 때보다 쉽게 관계형 데이터베이스에서 NoSQL로 전환(또는 추가)할 수 있게 해줍니다.
SQL에 대해 이미 알고 있는 내용
아마도 MySQL, SQL Server, Oracle 또는 기타 여러 인기 있는 SQL 데이터베이스와 같은 관계형 데이터베이스 관리 시스템(RDBMS)을 사용하고 있을 것입니다. 이러한 모든 데이터베이스는 몇 가지 공통점을 공유합니다:
- 행과 열 안에 데이터가 포함된 테이블 사용
- 특정 데이터 유형으로 제한됨(대부분의 경우)
이 표의 데이터는 서로 연관되어 있을 수 있습니다.
테이블 간의 데이터 관계
RDBMS를 충분히 오래 사용했다면 많은 테이블이 서로 연관되어 있다는 것을 알 것입니다. 예를 들어 다음과 같은 두 개의 테이블이 있다고 가정해 보겠습니다:
사용자 테이블
이름 | 유형 |
---|---|
id | int |
사용자 이름 | varchar |
비밀번호 | varchar |
프로필 표
이름 | 유형 |
---|---|
id | int |
이름 | varchar |
user_id | int |
프로필 테이블의 user_id와 사용자 테이블의 id에 대해 이 두 테이블 간에 관계가 설정됩니다. 모든 사용자에게는 프로필이 있기 때문입니다. 물론 이 관계는 외래 키와 기본 키를 기반으로 합니다.
테이블 데이터 조인
두 테이블의 데이터를 조인하는 것은 RDBMS에서 일반적인 작업입니다. 위에 나열한 샘플을 계속 진행하면 다음과 같이 익숙하게 보일 것입니다:
1 2 3 |
선택 * FROM tblUser AS u JOIN tblProfile AS p 켜기 u.id = p.user_id |
꽤나 기본적인 내용이라 어디까지 설명해야 할지 궁금하실 겁니다. 곧 알게 되실 겁니다.
NoSQL에 대해 알고 있다고 생각하는 것
일반적으로 Couchbase 및 NoSQL 데이터베이스를 사용하면 데이터가 JSON으로 저장됩니다. 테이블과 행의 전체 개념이 창 밖으로 던져져 처음에는 조금 낯설게 느껴질 수 있습니다. 예를 들어 다음 두 개의 JSON 문서가 있다면 어떻게 될까요?
user_1
1 2 3 4 5 6 |
{ 사용자 이름: "nraboy", 비밀번호: "1234" } |
profile_1
1 2 3 4 5 6 |
{ 이름: "닉 라보이", user_id: "user_1" } |
이러한 문서의 데이터는 구조화되지 않은 상태로 유지되므로 테이블의 스키마에 얽매이지 않습니다. 콘텐츠를 추가하거나 제거하려는 경우 다른 문서를 건드리거나 허용된 구조를 변경하지 않고도 그렇게 할 수 있습니다.
이러한 문서를 쿼리하는 방법은 NoSQL 플랫폼마다 다르지만 한 가지는 일관되게 유지됩니다. 이 두 문서를 조인하려면 데이터베이스 서버 측에 두 번 호출하여 데이터를 하나의 문서로 재구성해야 합니다. 예를 들어 이 psuedocode를 살펴보겠습니다:
1 2 3 4 5 6 7 |
get 모두 문서 에서 프로필 보기 get 사용자 어디 사용자 id 는 프로필.user_id do 무언가 와 함께 프로필 그리고 사용자 문서 끝 끝 |
이런 방식으로 문서에 참여해야 하는 것은 그다지 재미있지 않으며, 두 개 이상의 문서에 참여해야 하는 경우 상당히 지저분해질 수 있습니다.
카우치베이스가 SQL과 NoSQL을 연결하는 방법
Couchbase 4.0을 사용하면 더 이상 RDBMS에서 일반적으로 볼 수 있는 간단한 쿼리를 수행하기 위해 복잡한 서버 측 로직을 설계할 필요가 없습니다.
Couchbase 4.0은 SQL의 확장이라고 할 수 있는 N1QL을 도입했습니다. 이것이 의미하는 바는 이미 알고 있고 좋아하는 SQL 언어를 NoSQL 데이터와 함께 사용할 수 있다는 것입니다. N1QL을 사용하면 앞서 언급한 문서에 대해 다음과 같은 쿼리를 만들 수 있습니다:
1 2 3 4 5 |
선택 * FROM `버킷-이름` AS u JOIN `버킷-이름` AS p 켜기 키 p.사용자_id |
그렇게 나쁘지 않죠? 물론 MySQL 등에 익숙한 것과 몇 가지 차이점이 있지만 이해하거나 배우기 복잡할 정도는 아닙니다.
그렇다면 Couchbase의 N1QL은 NoSQL의 세계에 어떤 다른 이점을 제공할까요? 여러 가지가 있지만 예를 들면 다음과 같습니다:
- 데이터를 가져오고 조작하는 모든 무거운 작업은 애플리케이션 서버가 아닌 Couchbase에서 이루어집니다.
- 즐겨 사용하는 모든 SQL 명령과 추가 기능을 사용할 수 있습니다.
- 빠릅니다.
그렇다면 이미 사용 중인 프로그래밍 언어에 포함될 수 있을까요?
SQL은 거의 모든 프로그래밍 언어에서 작동하지만 N1QL은 그럴까요?
대부분의 인기 프로그래밍 언어에 대한 Couchbase SDK가 있습니다. Java, Node.js 또는 .NET으로 개발하든, SQL을 사용하는 것처럼 애플리케이션에서 N1QL을 쉽게 사용할 수 있습니다.
결론
다음을 사용하는 데이터베이스에서 전환하기 SQL에서 NoSQL로 로의 전환이 두려운 것처럼 보일 수 있지만, Couchbase 4.0과 N1QL을 사용하면 두 플랫폼 간의 전환은 이미 알고 있는 것과 크게 다르지 않습니다. 전환에 어떤 변화가 수반되는지 자세히 알아보려면 다음과 같이 매우 상세하고 인터랙티브한 동영상을 확인하세요. N1QL 튜토리얼.