Node.js 및 Angular.js를 사용하여 Touchbase를 통한 Couchbase 및 N1QL 탐색 - 0부: 데이터 모델 만들기

0부: 데이터 모델 만들기

Touchbase를 구축하기 전에 데이터를 어떻게 저장할 것인지에 대한 구조를 정하는 것이 중요합니다. 가장 기본적인 형태로 저장해야 할 데이터는 실제로 세 가지입니다.

  1. 사용자 문서: 특정 사용자에 대한 모든 정보를 저장합니다.
  2. 게시물: 사용자가 작성한 모든 게시물은 표시를 위해 필요한 정보와 함께 저장되어야 합니다.
  3. 이미지: 모든 사용자 프로필 이미지는 바이너리 데이터(이 경우 base64)로 저장해야 합니다.

 

사용자 문서

먼저 사용자 문서부터 시작하겠습니다. 이 문서는 단순히 UUID(범용 고유 식별자)로 저장됩니다. 그 이유는 문서 ID가 사용자에 대한 어떤 정보도 제공해서는 안 되며, 모든 정보는 문서의 콘텐츠에서 나와야 하기 때문입니다. 예를 들어 사용자의 이메일 주소를 문서 ID로 사용하여 각 사용자 문서를 저장했다고 가정해 봅시다. 사용자가 이메일을 변경하려면 현재 문서를 저장한 다음 새 문서 ID로 다시 저장하고 이전 문서를 삭제해야 하므로 매우 번거로운 작업이 될 것입니다. UUID를 구현하면 N1QL UPDATE 문을 사용하여 사용자를 찾고 문서에서 해당 사용자의 'email' 속성을 변경할 수 있습니다. 이는 문서 콘텐츠와 독립적인 것을 사용해야 하는 이유를 설명합니다. 또한 문서 ID가 동일하지 않도록 하기 위해 알고리즘적으로 중복된 문서 ID가 사실상 불가능하도록 합니다. 아래에서 문서 ID로 사용되는 'uuid' 속성을 볼 수 있습니다.

사용자 문서 예시

(참고, 일부 필드는 숨겨져 있습니다!)

이 사용자 문서는 다른 문서와 다양한 방식으로 연결되지만 가장 중요한 것은 사용자가 등록할 때 입력하는 모든 정보를 보관하는 것입니다. 이러한 정보는 다음과 같은 세 가지 정보로 분류할 수 있습니다: 배열 속성 '', '문자열 속성'드롭다운 속성'을 클릭합니다;. 이는 일반적으로 사용자가 정보를 입력하는 세 가지 방법이며, 애플리케이션은 그에 따라 처리 방식을 변경합니다. 속성은 그에 따라 애플리케이션의 config.json 파일을 사용하여 사용자에게 다른 정보를 요청할 수 있습니다. 이는 데이터 모델에 대한 가장 직관적인 접근 방식이라고 할 수는 없지만 애플리케이션 개발을 크게 간소화합니다. 데이터 모델의 config.json 문서는 개발자가 데이터를 사용자 정의할 수 있지만(사용자에게 다른 정보를 요청할 수 있음) 애플리케이션에서는 여전히 동일하게 취급되는 방법을 보여줍니다. 이러한 속성의 사용자 지정은 'dataModel' 객체에서 이루어집니다.

config.json

 

문서 게시

다음으로 글을 저장해야 합니다. 이것도 간단한 JSON 문서이며 각 게시물에 대해 필요한 정보를 보관합니다. 이 역시 UUID로 저장되며, 다음과 같이 '_pub_' 추가되었습니다.

포스트 문서 예시

각 글은 제목, 링크, 문구의 세 가지 주요 부분으로 구성됩니다. 여기에는 게시물에 필요한 거의 모든 것이 포함되어 있지만 사용자가 직접 입력하지 않는 간단한 다른 항목은 백엔드에 저장합니다.

먼저 사용자의 아이디를 사용하여 게시물과 함께 저장합니다. 또한 게시물이 작성된 시간도 저장됩니다. 또한 'pubType' 속성은 게시된 글의 유형이며, 이는 프런트엔드에서 글이 작성된 위치에서 가져온 것입니다.

예를 들어, 게시물을 만든 경우 'Github 프로젝트' 섹션에서 'pubType' 저장된 것은 'Github 프로젝트'. 또한 '이미지 경로' 이와 관련된 'pubType' 에서 config.json 문서에 해당하는 이미지를 가져올 수 있습니다. 'pubType' 에서 아이콘 폴더로 이동합니다.

마지막으로, 포스트 문서를 가져올 때 이러한 문서를 조작하는 함수를 사용하여 적절하다고 판단되는 대로 프런트엔드로 보냅니다. 현재 구현에서는 N1QL 쿼리를 실행하여 사용자의 화면이 켜져 있는 'pubType' 의 각 문서를 찾습니다(예: 사용자가 'Github 프로젝트' 에 있는 경우, 'pubType' 의 'Github 프로젝트' 문서만 가져옵니다). 그러면 문서가 게시된 시간 순으로 정렬되어 최신 문서가 먼저 표시됩니다. 또한 작성자 이름이 아닌 작성자 ID만 저장되는 것을 눈치챘을 수도 있습니다. 글을 가져오는 함수는 네트워크에서 작성자가 이름을 변경할 경우를 대비하여 'authorID'에 따라 각 작성자의 이름도 조회합니다. 글 저장 및 검색에 대해서는 나중에 블로그 시리즈에서 자세히 살펴보겠습니다.

 

그림 문서

마지막으로 이미지를 저장해야 합니다. 현재 이 작업은 다음을 사용하여 수행됩니다. Multer라는 Node.js 미들웨어의 일부입니다. 이에 대해서는 블로그 시리즈의 뒷부분에서 더 자세히 설명하겠습니다. 이미지 저장의 중요한 기능 중 하나는 이 이미지를 동일한 사용자에 대한 사용자 문서와 연결해야 한다는 것입니다. 현재 이 작업이 수행되는 방식은 그림의 문서 ID를 통해 이루어지며, 문서 ID는 사용자 문서와 동일한 ID로 저장됩니다. '_picMulterNode' 를 ID에 추가합니다.

사진 문서 ID

 

결론

향후 블로그 : 이 블로그 시리즈는 이 애플리케이션의 백엔드 측면에 초점을 맞출 것이며, 특히 REST 원칙을 따르기 때문입니다. 설명은 Express 프레임워크를 사용하는 Node.js 코드를 중심으로 하되, REST API 구현에 필요한 경우 일부 HTML 및 Angular.js 코드도 보여드릴 것입니다. 프런트엔드가 포함된 전체 코드를 보려면 https://github.com/couchbaselabs/touchbase 으로 이동하세요. 프런트엔드의 경우 Angular.js, HTML5, Angular UI 라우터, Angular 머티리얼 디자인 등이 사용됩니다. 모든 Angular.js 코드는 다음에서 볼 수 있습니다. TouchbaseModular/public/js. HTML은 다음에서 볼 수 있습니다. 터치베이스모듈형/공개index.html (사용 signUp.js) 및 nav.html (사용 touchbase.js). 모든 Angular UI 라우터 HTML 부분은 다음에서 볼 수 있습니다. TouchbaseModular/public/html. 보다 심층적인 디자인 문서는 문서 폴더로 이동합니다.

이것으로 데이터 모델 블로그를 마칩니다. 여러분 모두에게 도움이 되었기를 바랍니다. 질문, 우려 사항 또는 피드백이 있으시면 아래에 댓글을 남겨 주세요.

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 프라나브 마유람

프라나브 마유람은 N1QL 쿼리 언어 인턴, Couchbase입니다. Couchbase Server, Node.js, Express 및 Angular.js를 사용하여 소셜 네트워크 플랫폼인 Touchbase를 구축했습니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.