얼마 전까지만 해도 Node.js 및 Couchbase N1QL로 URL 단축기 만들기. 아직 읽어보지 않으셨다면, 이 글은 Couchbase와 RESTful API 만들기에 대한 훌륭한 소개입니다. Node.js 사용 및 Express 프레임워크에 대해 설명합니다. 이 글의 핵심은 NoSQL 데이터를 관리하려면 SQL 쿼리를 작성하는 것을 선호해야 한다는 것입니다.

쿼리를 작성하는 대신 ODM(객체 문서 모델)을 사용하려면 어떻게 해야 하나요?

이번에는 오스만 ODM, 카우치베이스 서버, Node.js를 사용하는 URL 단축기를 만드는 개발 프로세스를 살펴보겠습니다.

요구 사항

이 애플리케이션의 성공에 필요한 요구 사항은 많지 않습니다. 예를 들어 설치 및 구성에 필요한 사항은 다음과 같습니다:

  • 카우치베이스 서버 4.1+
  • Node.js 4.0+

이 애플리케이션은 Node.js 애플리케이션이므로 설치가 필요하며 모든 프로젝트 종속성을 수집하기 위해 Node 패키지 관리자(NPM)를 사용할 것입니다. Ottoman을 최대한 활용하려면 Couchbase 4.1 이상을 사용하는 것이 좋습니다.

데이터 모델 이해 및 카우치베이스 데이터베이스 준비하기

이 예제에서는 다음과 같은 버킷을 만들겠습니다. 예제 를 사용합니다. 굳이 이렇게 부르지 않아도 되지만 이 글에서는 그렇게 부를 것입니다. 버킷을 생성하는 것 외에 클러스터에서 인덱스나 추가 설정이 필요하지 않습니다.

데이터 측면에서 보면, 축소하려는 URL 하나당 하나의 문서를 저장하는 것이 계획입니다. 각 문서는 다음과 같이 보일 수 있습니다:

그리고 _유형 속성은 오스만 모델에 의해 정의된 것이지만 나머지 세 개는 우리가 정의할 속성입니다. 해시는 값의 고유한 해시를 나타냅니다. 이 해시는 각각의 짧은 URL에서 식별자 역할을 하게 됩니다.

Node.js URL 단축기 애플리케이션 개발하기

데이터베이스가 준비되고 데이터 모델에 대한 기본적인 이해가 완료되었으므로 이제 Node.js URL 단축기 애플리케이션을 만들 수 있습니다. 이 애플리케이션은 Express 프레임워크와 다음과 같은 라이브러리에 크게 의존하게 됩니다. 해시드. 해시드를 사용하면 직접 짧은 해싱 알고리즘을 작성해야 하는 수고를 덜 수 있습니다.

종속성이 있는 프로젝트 만들기

먼저 새 Node.js 프로젝트를 만들고 필요한 모든 프로젝트 종속성을 설치해 보겠습니다. 터미널(Mac 및 Linux) 또는 명령 프롬프트(Windows)에서 다음을 실행합니다:

위의 명령은 새 package.json 파일을 만듭니다. 이 파일에는 모든 종속성 정보와 다른 것들이 저장됩니다.

이제 프로젝트에 필요한 각 종속 요소를 설치해야 합니다:

위의 명령은 HTTP 요청에서 본문 데이터를 받아들이기 위한 Couchbase SDK, Express 프레임워크, Ottoman, 해시드 및 본문 파서 라이브러리를 설치합니다.

이 시점에서 애플리케이션 부트스트랩을 시작하여 무거운 작업을 수행할 수 있도록 준비할 수 있습니다.

애플리케이션 부트스트랩

간단하게 하기 위해 모든 애플리케이션 코드는 프로젝트 내 다음과 같은 단일 파일에 저장됩니다. index.js. 프로덕션 환경에서는 유지 관리 편의성을 위해 분할하는 것이 좋겠지만 이 간단한 예제에서는 괜찮을 것입니다.

열기 index.js 파일을 열고 설치한 각 종속성에 대한 가져오기를 포함하세요:

종속성을 가져온 후에는 이제 애플리케이션 내에서 사용할 수 있도록 종속성을 초기화할 수 있습니다:

위에서는 기본적으로 Express 프레임워크를 초기화하고 요청에서 JSON 및 URL로 인코딩된 본문 데이터를 받아들이고 싶다고 말하고 있습니다.

이 시점에서 Couchbase 클러스터에 연결을 설정하고 애플리케이션 버킷을 열 수 있습니다:

Ottoman을 사용하려면 특정 인덱스가 존재해야 합니다. 다행히도 이러한 인덱스가 아직 존재하지 않는 경우 Ottoman에서 생성하도록 할 수 있습니다. 인덱스가 존재한다는 것이 확인되면 애플리케이션 서비스를 시작할 수 있습니다.

이 예제에서는 애플리케이션이 포트 3000에서 로컬로 서비스됩니다.

지금까지는 URL 단축기 애플리케이션을 위한 기본 프레임워크만 실행하고 있었습니다. 실제로 CRUD 또는 쿼리 작업과 관련하여 축소 로직이나 데이터베이스와의 상호 작용이 없습니다.

데이터 모델 만들기

데이터가 데이터베이스에서 어떻게 보일지는 알지만 아직 어떻게 생성할지는 모릅니다. N1QL 쿼리가 아닌 ODM을 사용하므로 코드 내에서 모델을 정의해야 합니다.

이 특정 프로젝트에서 모델은 매우 단순합니다. 다음과 같이 보일 것입니다:

위의 데이터 모델에서 우리는 Url에는 세 가지 속성이 있습니다. The 해시 속성은 문서 ID를 나타냅니다. 문서 ID를 수동으로 설정할 필요는 없지만 이 프로젝트에서는 수동으로 설정하는 것이 좋습니다. 문서 ID를 수동으로 설정하려면 해당 프로퍼티가 읽기 전용이어야 합니다. 나머지 두 속성은 표준 문자열 값입니다.

이 모델은 필요에 따라 무한히 더 복잡해질 수 있습니다.

일련의 RESTful 엔드포인트 메서드에서 데이터 모델 적용하기

우리가 구축하는 애플리케이션은 RESTful 웹 서비스이므로 몇 가지 엔드포인트 함수를 만들어야 합니다. 애플리케이션에는 다음 세 가지 공용 엔드포인트가 포함됩니다:

언제 root 엔드포인트에 도달하면 애플리케이션이 Couchbase에 저장된 긴 URL로 이동합니다. 이 때 /생성 엔드포인트에 도달하면 이전에 저장된 짧은 URL을 찾거나 존재하지 않는 경우 새로 만들려고 시도합니다. 이렇게 하는 이유는 긴 URL의 복사본을 여러 개 저장하고 싶지 않기 때문입니다. 마지막으로 /확장 엔드포인트를 추가하여 짧은 URL이 어디로 이동하는지 확인할 수 있습니다.

부터 시작하여 /생성 엔드포인트에서 가장 복잡한 부분인 다음과 같은 메서드가 있습니다:

위의 엔드포인트는 본문을 기대하는 POST 요청 엔드포인트입니다. 본문에서 긴 URL을 찾을 수 없으면 오류가 반환됩니다. 그렇지 않으면 제공된 긴 URL을 기반으로 Ottoman 조회가 수행됩니다. 조회에서 데이터가 발견되면 해당 데이터가 사용자에게 반환되고, 그렇지 않으면 새 항목 생성을 위한 프로세스가 시작됩니다.

새 항목을 만드는 동안 타임스탬프를 기반으로 고유한 해시가 생성됩니다. 이 해시는 짧은 호스트 이름에 추가되고 해시 자체 및 긴 URL과 함께 데이터베이스에 저장됩니다. 저장에 성공하면 개체가 반환됩니다.

다음과 같은 경우 /확장 엔드포인트에는 다음이 있습니다:

이 방법은 다음과 유사합니다. /생성 엔드포인트와 비슷하지만 완전히 동일하지는 않습니다. 대신 제공된 짧은 URL을 기반으로 조회를 수행합니다. 찾으면 긴 URL이 포함된 문서를 반환하고, 그렇지 않으면 빈 객체를 반환합니다.

마지막으로 root 엔드포인트. 이 엔드포인트는 긴 URL로의 리디렉션을 담당하며 실제로는 해시인 ID가 필요합니다. 동일한 서버에서 API와 짧은 URL을 호스팅하고 있다는 점을 기억하세요.

따라서 다음과 같이 이동한다고 가정해 보겠습니다. http://localhost:3000/2xmx9qpyj 를 클릭합니다. 브라우저의 2xmx9qpyj 는 해시값이기도 한 ID입니다. 이 ID를 기반으로 문서를 조회하고 문서가 있는지 탐색할 수 있습니다.

나쁘지 않죠?

전체 애플리케이션 소스 코드

전체 애플리케이션을 한 눈에 보고 싶다면 아래에서 확인할 수 있습니다.

위의 코드를 다음과 같이 실행하면 npm index.js 에 있는 각 API 엔드포인트를 사용할 수 있습니다. http://localhost:3000.

결론

방금 Ottoman, Couchbase Server 및 Node.js라는 객체 문서 모델(ODM)을 사용하여 URL 단축기 애플리케이션을 만드는 방법을 살펴봤습니다. ODM을 좋아하지 않거나 SQL 쿼리를 사용하여 이 작업을 수행하는 방법을 확인하려는 경우 이전 튜토리얼 이 주제에 대해 글을 썼습니다.

이 튜토리얼을 한 단계 더 발전시키고 싶으신가요? 짧은 URL을 사용하려는 사람들로부터 분석 정보를 수집해 보세요. 탐색 전에 문서 내부에 히트 카운터를 유지하거나 브라우저 사용자 에이전트와 같은 정보를 저장할 수도 있습니다.

작성자

게시자 Nic Raboy, 개발자 옹호자, Couchbase

닉 라보이는 최신 웹 및 모바일 개발 기술을 옹호하는 사람입니다. 그는 Java, JavaScript, Golang 및 Angular, NativeScript, Apache Cordova와 같은 다양한 프레임워크에 대한 경험이 있습니다. Nic은 웹 및 모바일 개발을 보다 쉽게 이해할 수 있도록 자신의 개발 경험에 대해 글을 쓰고 있습니다.

댓글 남기기