카우치베이스 서버

Node.js 및 Couchbase NoSQL과 함께 FaaS용 OpenWhisk 사용

제 콘텐츠를 꾸준히 읽어보셨다면 제가 제목의 글을 쓴 적이 있다는 것을 기억하실 것입니다, Node.js 및 Couchbase NoSQL과 함께 AWS Lambda 및 API 게이트웨이 사용. 이 문서에서는 Amazon의 서버리스 서비스를 사용하여 NoSQL 데이터베이스인 Couchbase와 상호 작용하는 Lambda 함수를 만드는 방법을 살펴봤습니다.

그러나 서버리스, 즉 서비스형 기능(FaaS)으로 알려진 기술은 람다만이 유일한 것은 아닙니다. Take Apache OpenWhisk 를 예로 들 수 있습니다. OpenWhisk를 사용하면 Lambda와 비슷한 방식으로 함수를 만들 수 있지만, 더 다양한 위치에 배포할 수 있으며, 가장 많이 사용되는 것은 IBM Bluemix입니다.

OpenWhisk를 사용하여 서버리스 함수를 만드는 방법을 살펴보겠습니다. 카우치베이스 서버 데이터베이스.

앞으로 몇 가지 주의해야 할 사항이 있습니다. 외부에서 액세스할 수 있는 곳에서 Couchbase Server를 호스팅해야 합니다. 즉, 로컬 컴퓨터는 작동하지 않습니다. OpenWhisk와 함께 작동하기 위한 종속성을 컴파일할 수 있도록 Docker가 필요합니다. 마지막으로, 적어도 이 예제에서는 블루믹스 계정이 필요합니다.

OpenWhisk용 블루믹스 CLI 도구 설치하기

앞서 언급했듯이 OpenWhisk는 Apache 재단 프로젝트입니다. 하지만 편의상 IBM의 Bluemix에서 사용하겠습니다.

계정을 만듭니다. IBM 클라우드 아직 설치하지 않으셨다면요.

서버리스와 같은 프레임워크 도구를 사용하는 대신 블루믹스 CLI를 사용하겠습니다. 다운로드 IBM 클라우드 기능 CLI 를 사용하여 IBM의 OpenWhisk와 상호 작용할 수 있습니다.

IBM Cloud 계정으로 작업을 시작하려면 먼저 CLI를 통해 로그인해야 합니다. 명령줄에서 다음을 실행합니다:

CLI를 다운로드할 때 정확한 명령어가 제공되지만 위에서 설명한 것과 비슷하게 보일 것입니다.

이제 프로젝트 생성을 시작할 수 있습니다.

프로젝트 구조 및 OpenWhisk 패키지 생성 프로세스 이해

FaaS를 사용해 본 적이 없다면 확장성이 거의 없는 독립형 애플리케이션을 구축하는 것과는 조금 다른 방식으로 작업이 진행됩니다.

예를 들어, FaaS 프로젝트의 각 엔드포인트는 별도의 함수가 됩니다. 이러한 함수를 결합하면 패키지라는 것이 만들어집니다. 이러한 함수는 애플리케이션의 변화하는 수요를 충족하기 위해 필요에 따라 확장됩니다.

이를 위해 다음을 생성합니다:

프로젝트에는 만들고자 하는 각 함수에 대한 디렉터리가 있어야 합니다. 각 함수에는 고유한 package.json 파일입니다. 각 package.json 파일은 각 디렉터리 내에서 다음을 실행하여 만들 수 있습니다:

각각의 package.json 파일을 열려면 어떤 파일이 함수 코드인지도 정의해야 합니다. 예를 들어 create/package.json 를 클릭하고 다음 줄을 추가하거나 변경합니다:

설정하여 메인 파일에 함수가 포함된 자바스크립트 파일을 명시합니다.

함수 배포를 시작하면 동일한 패키지의 일부가 되도록 배포할 것입니다.

데이터 생성을 위한 함수 설계

데이터베이스에 데이터를 생성하는 것으로 개발을 시작하겠습니다. 데이터베이스로 이동하여 create 디렉터리를 열고 명령줄에서 다음 명령을 실행합니다:

위의 명령은 함수 종속성을 설치합니다. 여기서는 Node.js용 Couchbase SDK, 고유 키 생성을 위한 UUID 라이브러리, 입력 유효성 검사를 위한 Joi 라이브러리를 사용할 것입니다.

종속성 설치는 다시 검토할 예정이지만 적어도 당분간은 계속 사용할 수 있을 것입니다.

이제 프로젝트의 create/create.js 파일을 열고 다음을 포함하세요:

위의 코드는 다소 복잡하기 때문에 무슨 일이 일어나고 있는지 파악해야 합니다. 함수 외부에 존재하는 변수부터 살펴봅시다:

함수가 호출될 때마다 새 연결을 설정하는 것은 최선의 방법이 아닙니다. 대신, 오픈 카우치베이스 버킷의 글로벌 인스턴스를 유지하고 그것이 존재하는 한 계속 사용할 수 있습니다. 다만 잠시 동안 사용하지 않으면 OpenWhisk가 함수를 삭제하므로 항상 존재하지는 않습니다.

함수 내부에서 버킷이 이미 열려 있는지 확인합니다. 버킷이 열려 있지 않으면 함수에 전달된 매개변수를 사용하여 연결을 설정합니다. 때가 되면 이 연결 정보를 포함하는 기본 매개변수를 정의할 것입니다.

데이터를 생성하는 중이므로 입력이 올바른지 확인해야 합니다.

저희는 다음과 같이 예상하고 있습니다. 이름 그리고 가치가 존재할 것입니다. 또한 유형 가 존재하지 않도록 설정합니다. 다음을 통해 이를 확인할 수 있습니다:

그리고 stripUnknown 옵션을 사용하면 스키마에 정의되지 않은 데이터가 제거됩니다. 입력 및 연결 정보가 동일한 페이로드에 존재하므로 데이터를 제거해야 합니다. 연결 정보가 문서에 저장되는 것을 원하지 않습니다. 유효성 검사 오류가 있는 경우 반환됩니다. 유효성 검사 오류가 없으면 데이터 삽입을 계속 진행할 수 있습니다.

새 고유 키를 생성하고 유효성이 검사된 데이터를 문서로 저장할 수 있습니다. 데이터 자체는 응답으로 반환됩니다.

다른 기능도 어느 정도 동일한 전략을 따를 것입니다.

N1QL로 데이터 검색을 위한 함수 설계하기

이제 데이터를 확보했으니 함수 호출을 통해 데이터베이스에서 데이터를 검색해 보겠습니다. 데이터베이스의 검색 디렉토리를 열고 명령줄에서 다음을 실행합니다:

데이터를 생성하지 않으므로 고유 값을 생성하거나 사용자 데이터의 유효성을 검사할 필요가 없습니다. 따라서 이 기능에는 Couchbase SDK만 필요합니다.

프로젝트의 retrieve/retrieve.js 파일을 열고 다음을 포함하세요:

이전 함수에서 이미 살펴본 내용은 건너뛰고 새로운 기능으로 넘어가겠습니다. 열린 버킷에 연결되면 N1QL 쿼리를 만들 수 있습니다.

이 N1QL 쿼리는 SQL과 유사하며 특정 조건과 일치하는 모든 문서를 검색할 수 있습니다. 오류가 있으면 응답으로 반환하고, 그렇지 않으면 결과 집합을 반환합니다.

유효성 검사를 하지 않기 때문에 데이터를 검색하는 이 함수는 훨씬 더 간단합니다.

하위 문서 변경으로 데이터를 업데이트하는 함수 설계하기

이제 데이터베이스 내의 문서를 업데이트하고 싶다고 가정해 보겠습니다. 문서를 검색하고 변경한 다음 변경 사항을 저장하는 대신 데이터베이스에 직접 변경 사항을 제출하고 데이터베이스가 알아서 처리하도록 하려고 합니다.

프로젝트의 업데이트 디렉토리를 열고 명령줄에서 다음을 실행합니다:

사용자 데이터를 수락하는 것이므로 해당 데이터의 유효성을 검사해야 합니다. 데이터를 생성하는 것이 아니므로 고유 키를 생성할 필요가 없습니다.

프로젝트의 update/update.js 파일을 열고 다음을 포함하세요:

위의 코드가 익숙해 보이시나요? 동일한 전략을 따르고 있기 때문입니다.

이 예제에서는 유효성 검사 로직이 약간 다릅니다:

특정 문서를 편집하려면 키가 필요합니다. 사용자가 무엇을 업데이트하려는지 알 수 없으므로 속성을 선택 사항으로 설정합니다.

업데이트를 수행하기 위해 문서에서 하위 문서 작업을 수행할 것입니다. 이를 위해 변경 빌더를 사용할 수 있습니다.

변경할 문서와 프로퍼티가 존재하는 경로를 제공합니다. 경로는 여기에 사용된 예시보다 훨씬 더 복잡할 수 있습니다.

돌연변이 집합이 정의되면 데이터베이스에 대해 돌연변이를 실행할 수 있습니다.

결과에 따라 함수 호출에서 응답이 반환됩니다.

데이터 제거를 위한 함수 설계

CRUD 작업 패키지의 마지막 기능에 도달했습니다. 이제 데이터베이스에서 데이터를 삭제할 때가 되었습니다.

로 이동하여 삭제 디렉토리를 열고 다음 명령을 실행합니다:

삭제할 문서 키를 수락할 것이므로 입력의 유효성을 검사해야 합니다. 마찬가지로 데이터베이스와 함께 작동하려면 Couchbase SDK도 필요합니다.

프로젝트의 delete/delete.js 파일을 열고 다음 자바스크립트 코드를 포함합니다:

이제 OpenWhisk와 Couchbase를 사용한 함수 생성에 대해 더 큰 그림을 보셨을 것이므로 위의 문서 삭제 기능에 대해서는 자세히 설명하지 않겠습니다.

Docker로 OpenWhisk에 함수 패키징 및 배포하기

일련의 기능이 준비되어 있지만 이를 패키징하여 블루믹스에 배포할 수는 없습니다. 그렇게 하면 수많은 오류가 발생할 것입니다. 블루믹스는 특정 아키텍처의 특수한 Linux 버전을 사용합니다. Mac에서 종속성을 다운로드했는데 일치하지 않습니다.

제가 얼마 전에 쓴 글 제목을 기억하시나요? AWS Lambda에 네이티브 Node.js 종속성 배포하기? Docker를 사용하는 OpenWhisk에 대해서도 비슷한 작업을 수행해야 합니다.

Docker가 설치되고 준비가 완료되면 CLI에서 다음을 실행합니다:

위의 명령은 Node.js에 적합한 OpenWhisk Docker 이미지를 다운로드합니다. 그런 다음 대화형 터미널 모드에서 해당 이미지가 포함된 컨테이너를 배포합니다. 이 컨테이너에는 매핑된 볼륨도 있습니다. 로컬 프로젝트 디렉토리를 컨테이너 내의 디렉토리에 매핑하고 있습니다.

명령이 실행되고 컨테이너가 배포된 후에는 컨테이너 내의 셸에 있어야 합니다.

각 기능에 대해 다음을 실행합니다:

호스트 머신에서 종속성을 설치하는 것만으로는 충분하지 않습니다. 블루믹스에 대한 종속성을 컴파일해야 합니다. Docker는 이러한 종속성을 컴파일하고 디렉터리가 매핑되어 있으므로 호스트 시스템에서 사용할 수 있습니다.

각 기능 패키지를 설치한 후 번들로 묶어 배포할 수 있습니다.

호스트 머신에서 각 기능의 ZIP 아카이브를 생성합니다. 아카이브에는 package.json 파일, 자바스크립트 파일, 그리고 node_modules 디렉터리로 이동합니다.

Mac 또는 ZIP CLI가 설치된 컴퓨터를 사용하는 경우 다음을 실행합니다:

각 함수의 ZIP이 있으면 다음을 실행하여 배포할 수 있습니다:

위의 명령에서 몇 가지 새로운 기능을 소개했습니다.

먼저, 다음과 같은 패키지를 만듭니다. 카우치베이스 그리고 이 패키지에는 삭제 함수를 기반으로 하는 delete.zip 파일을 만듭니다. 또한 몇 가지 기본 매개변수도 전달하고 있습니다. 이 매개변수는 연결 정보가 됩니다. 이 정보는 민감한 정보이므로 함수를 호출할 때 전달하지 않고 함수를 만들 때 전달합니다.

각 함수에 대해 위 명령의 변형을 실행합니다.

함수를 실행하려면 다음과 같이 실행해 보세요:

위의 명령은 유효성 검사를 통과하기 위해 몇 가지 매개변수를 전달해야 합니다. 이 함수는 차단 방식으로 호출되며, 성공하면 데이터가 데이터베이스에 저장되고 응답으로 반환됩니다.

결론

방금 NoSQL 데이터베이스와 통신하는 OpenWhisk용 서버리스 함수 패키지를 만드는 방법을 살펴보았습니다, 카우치베이스. OpenWhisk는 AWS Lambda의 대안으로 사용할 수 있지만, 이 두 가지가 유일한 옵션은 아닙니다. 어떤 것을 선택하든 서비스형 기능(FaaS)은 대규모 애플리케이션을 위한 확장성이 매우 뛰어난 솔루션입니다.

다른 OpenWhisk 예시를 보고 싶으신가요? 제가 작성한 튜토리얼을 확인해 보세요, OpenWhisk를 사용하여 Node.js RESTful API를 서버리스로 변환하기.

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

작성자

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

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

댓글 하나

  1. 안녕하세요 👋 Nick 좋은 게시물
    오늘 조이 패키지에 대해 새로운 것을 배웠습니다 👍🏼

    몇 가지 팁
    웹 액션을 웹 액션으로 만들고 -web true를 생성하면 공개 URL을 가질 수 있습니다.

    또한 JSON.stringify를 건너뛰고 body를 문자열화할 객체로 설정할 수도 있습니다.

    웹 작업의 공개 URL을 가져오려면 wsk 작업 get couchbase/delete -url을 실행하면 됩니다.

    여기 문서에서 웹 액션을 사용하는 방법에 대해 자세히 알아볼 수 있습니다. https://console.bluemix.net/docs/openwhisk/openwhisk_webactions.html

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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