Node.js API 미터링 개발 가이드

Table of Contents

1. 개요

1.1 목적

본 문서(node.js API 서비스 미터링 애플리케이션 개발 가이드)는 파스-타 플랫폼 프로젝트의 미터링 플러그인과 Node.js API 애플리케이션을 연동시켜 API 서비스를 미터링하는 방법에 대해 기술 하였다.

1.2 범위

본 문서의 범위는 파스-타 플랫폼 프로젝트의 Node.js API 서비스 애플리케이션 개발과 CF-Abacus 연동에 대한 내용으로 한정되어 있다.

1.3 참고자료

https://docs.cloudfoundry.org/devguide/ https://docs.cloudfoundry.org/buildpacks/node/node-tips.html https://nodejs.org/ http://expressjs.com/ko/ https://github.com/cloudfoundry-incubator/cf-abacus

2. Node.js API 미터링 개발가이드

2.1 개요

API 서비스 및 해당 API 서비스를 사용하는 애플리케이션을 Node.js 언어로 작성 한다. API 서비스를 사용하는 애플리케이션과 API 서비스를 바인딩하고 해당 애플리케이션에 바인딩된 환경정보(VCAP_SERVICES)를 이용해 각 서비스별 접속정보를 획득하여 애플리케이션에 적용하여 API 서비스를 호출하는 애플리케이션을 작성 한다. 또한 API 서비스는 서비스 요청을 처리함과 동시에 API 사용 내역을 CF-ABACUS에 전송하는 애플리케이션을 작성 한다.

기능

설명

Runtime

미터링/등급/과금 정책

API 서비스 제공자가 제공하는 서비스에 대한 각종 정책 정의 정보. JSON 형식으로 되었으며, 해당 정책을 CF-ABACUS에 등록하면 정책에 정의한 내용에 따라 API 사용량을 집계 한다. 정책은 서비스 제공자가 정의해야 하며, JSON 스키마는 다음을 참조한다. https://github.com/cloudfoundry-incubator/cf-abacus/blob/master/doc/api.md

서비스 브로커 API

Cloud Controller와 Service Broker 사이의 규약으로써 서비스 브로커 API 개발에 대해서는 다음을 참조한다. https://github.com/OpenPaaSRnD/Documents/blob/master/Development-Guide/ServicePack_develope_guide.md#11

서비스 API

서비스 제공자가 제공하는 API 서비스 기능 및 API 사용량을 CF-ABACUS에 전송하는 기능으로 구성되었다.

대시보드

서비스를 제공하기 위한 인증, 서비스 모니터링 등을 위한 대시보드 기능으로 서비스 제공자가 개발해야 한다.

CF-ABACUS

CF-ABACUS 핵심 기능으로써 수집한 사용량 정보를 집계한다. CF-ABACUS은 CF 설치 후, CF에 마이크로 서비스 형태로 설치한다. 자세한 사항은 다음을 참조한다. https://github.com/cloudfoundry-incubator/cf-abacus

※ 본 개발 가이드는 API**서비스** 개발에 대해서만 기술하며, 다른 컴포넌트의 개발 또는 설치에 대해서 링크한 사이트를 참조한다.

2.2 개발환경 구성

Node.js 애플리케이션 개발을 위해 다음과 같은 환경으로 개발환경을 구성 한다.

  • CF release: v226 이상

  • nodejs_buildpack: nodejs_buildpack-cached-v1.5.18.zip 이상

  • Node.js: v5.11.1

  • npm: v3.8.6

2.2.1 Node.js 및 npm 설치

1. Node.js 및 npm 설치

※ Windows 용은 다음 사이트에서 Node.js를 다운 받는다. https://nodejs.org/ko/download/

※ 개발도구 Node.js는 javascript기반의 언어로 Notepad++, Sublim Text, EditPlus등 문서편집기를 개발도구로 사용할 수 있다. 또한 Eclipse의 플러그인 Nodeclipse를 설치하여 사용할 수 있다. 그리고 상용 개발 도구로써는 WebStome 등이 있다.

2.2.2 CF-Abacus 설치

별도 제공하는 Abacus 설치 가이드를 참고하여 CF-Abacus를 설치한다.

2.3 샘플 API 서비스 브로커 및 대시보드 개발

별도 제공하는 서비스 브로커 개발 가이드를 참고하여 서비스 브로커 및 대시보드를 개발한다. https://github.com/OpenPaaSRnD/Documents/blob/master/Development-Guide/ServicePack_develope_guide.md#6

2.4 샘플 API 서비스 개발

샘플 api 서비스는 서비스 요청이 있는 경우, 해당 요청에 대한 응답 처리와 api 서비스 요청에 대한 미터링 정보를 CF-ABACUS에 전송하는 처리를 한다.

  1. 샘플 API 서비스 형상

파일/폴더

목적

.apprc

앱 실행 환경 설정 파일

.gitignore

Git을 통한 형상 관리 시, 형상 관리를 할 필요가 없는 파일 또는 디렉토리를 설정한다.

manifest.yml

애플리케이션을 파스-타 플랫폼에 배포 시 적용하는 애플리케이션에 대한 환경 설정 정보 애플리케이션의 이름, 배포 경로, 인스턴스 수 등을 정의할 수 있다.

.npmrc

Npm 실행 환경 설정 파일

package.json

node.js 어플리케이션에 필요한 npm의 의존성 정보를 기술하는데 사용 한다. npm install 명령을 실행시 install 뒤에 아무런 정보를 입력하지 않으면 이 파일의 정보를 이용하여 npm을 설치한다.

sampleApiService

서비스 앱 실행 스크립트

app.js

서비스 앱 서비스 요청에 대한 라우팅 정보와 미터링 정보 전송 처리를 정의한다.

test.js

서비스 앱 단위 테스트 모듈 mocha를 통한 서비스 앱의 단위 테스트를 정의한다.

2.4.1 샘플 API 서비스 애플리케이션 코드 구현

1. Package.json 샘플 애플리케이션의 코드 구성에 대해 기술한다.

2. Manifest.yml 앱을 CF에 배포할 때 필요한 설정 정보 및 앱 실행 환경에 필요한 설정 정보를 기술한다.

  • ENV 항목

    • 아래에 기술한 항목 이외에 서비스에 필요한 항목을 추가할 수 있다.

    ENV 항목

    설명

    DEBUG

    애플리케이션 디버그 로그 출력 대상 설정

    NODE_TLS_REJECT_UNAUTHORIZED

    -

    API

    CF API URL https://api.

    COLLECTOR

    Abacus Collector 앱의 사용량 수집 서비스 URL https:// /v1/metering/collected/usage

    SECURED

    Secured abacus를 운용할 경우, 반드시 true를 설정한다.

    AUTH_SERVER

    SECURED가 true인 경우 설정한다. - CF UAA를 Auth_server로 설정할 경우, https://api. - Abacus의 AuthServer를 Auth_server로 설정할 경우, abacus-authserver-plugin

    CLIENT_ID

    SECURED가 true인 경우 설정한다. Abacus.usage 권한 id

    CLIENT_SECRET

    SECURED가 true인 경우 설정한다. Abacus.usage 권한 비밀번호

    JWTKEY

    SECURED가 true인 경우 설정한다. - CF UAA를 Auth_server로 설정할 경우, CF 배포 manifest의 properties.jwt.verification_key 값을 설정 - Abacus의 AuthServer를 Auth_server로 설정할 경우, Key 값을 설정

    JWTALGO

    SECURED가 true인 경우 설정한다. - CF UAA를 Auth_server로 설정할 경우, RS256 - Abacus의 AuthServer를 Auth_server로 설정할 경우, HS256

3. App.js 애플리케이션의 기능 및 미터링 정보 전송 기능을 구현한다. 샘플 애플리케이션은 다음과 같이 기능을 구현하였다.

  • 의존 모듈 선언

  • 변수 선언

  • Secure Abacus 보안 구현

  • COR 설정

  • 서비스 API 구현

  • Abacus 전송 Json 생성

  • 기타

2.4.2 샘플 API 서비스 애플리케이션 미터링 연동 항목

1. 미터링 정보 전송 API 엔드포인

2. API 서비스 미터링 전송 항목

항목명

유형

설명

예시

start

UNIX Timestamp

API처리 시작 시각

1396421450000

end

UNIX Timestamp

API처리 응답 시각

1396421451000

organization_id

String

API를 호출한 앱의 조직 ID

us-south:54257f98-83f0-4eca-ae04-9ea35277a538

space_id

String

API를 호출한 앱의 영역 ID

d98b5916-3c77-44b9-ac12-04456df23eae

consumer_id

String

API를 호출한 앱 ID

App: d98b5916-3c77-44b9-ac12-04d61c7a4eae

resource_id

String

API 자원 ID

sample_api

plan_id

String

API 미터링 Plan ID

basic

resource_instance_id

String

API를 호출한 앱 ID

d98b5916-3c77-44b9-ac12-04d61c7a4eae

measured_usage

Array

미터링 항목

-

measure

String

미터링 대상 명

api_calls

quantity

Number

해당 API 요청에 대한 API 처리 횟수

10

3. API 서비스 미터링 전송 항목 예제

참고: https://github.com/cloudfoundry-incubator/cf-abacus/blob/master/doc/api.md

2.5 API 서비스 연동 샘플 애플리케이션 개발

Api 서비스를 이용하는 애플리케이션으로 본 샘플은 웹 화면을 통행 단순히 api 서비스를 요청하는 기능만을 구현 하였다.

1. API 서비스 연동 샘플 애플리케이션 형상

파일/폴더

목적

.apprc

앱 실행 환경 설정 파일

cfpush.sh

Manifest의 org_id를 현재 target 설정된 org의 guid로 수정하고 패키지한 앱을 cf에 push 한다.

.eslintignore

Eslint 실행 시, 체크 제외 대상의 파일 및 디렉토리를 설정한다.

.gitignore

Git을 통한 형상 관리 시, 형상 관리를 할 필요가 없는 파일 또는 디렉토리를 설정한다.

manifest.yml

파스-타 플랫폼에 배포시 애플리케이션에 대한 설정이다. 애플리케이션의 이름, 배포 경로, 인스턴스 수 등을 정의할 수 있다.

.npmrc

Npm 실행 환경 설정 파일

package.json

node.js 어플리케이션에 필요한 npm의 의존성 정보를 기술하는데 사용 한다. npm install 명령을 실행시 install 뒤에 아무런 정보를 입력하지 않으면 이 파일의 정보를 이용하여 npm을 설치한다.

sampleApiCaller

서비스 호출 앱 실행 스크립트

app.js

서비스 호출 앱 웹 서비스 및 bind 한 api 서비스 호출에 대한 라우팅 정보를 정의한다.

bower_components

프론트엔드 라이브러리 디렉토리

test.js

서비스 앱 단위 테스트 모듈 mocha를 통한 서비스 앱의 단위 테스트를 정의한다.

views

샘플 API 서비스 호출 데모 화면

2.5.1 API 서비스 연동 샘플 애플리케이션 코드

1. Package.json

샘플 애플리케이션의 코드 구성에 대해 기술한다.

2. Manifest.yml

앱을 CF에 배포할 때 필요한 설정 정보 및 앱 실행 환경에 필요한 설정 정보를 기술한다.

  • ENV 항목

    • 아래에 기술한 항목 이외에 서비스에 필요한 항목을 추가할 수 있다.

    ENV 항목

    설명

    DEBUG

    애플리케이션 디버그 로그 출력 대상 설정

    ORG_ID

    Caller 애플리케이션을 배포할 조직 ID

    SECURED

    API 서비스를 Secured로 운용할 경우, 반드시 true를 설정한다.

    AUTH_SERVER

    SECURED가 true인 경우 설정한다. - CF UAA를 Auth_server로 설정할 경우, https://api. - Abacus의 AuthServer를 Auth_server로 설정할 경우, abacus-authserver-plugin

    CLIENT_ID

    SECURED가 true인 경우 설정한다. Abacus.usage 권한 id

    CLIENT_SECRET

    SECURED가 true인 경우 설정한다.Abacus.usage 권한 비밀번호

3. App.js

Api 서비스를 요청하는 애플리케이션을 구현한다.

  • 의존 모듈 선언

  • 변수 선언

  • Secure Abacus 보안 구현

  • COR 설정

  • 서비스 API 구현

  • Abacus 전송 Json 생성

  • 기타

4. Views/apiCaller.handlebars

Api 서비스를 요청하는 웹 화면

2.5.2 API 서비스 연동 샘플 애플리케이션 인터페이스 항목

1. API 서비스 엔드포인트

2. API 서비스 미터링 전송 항목

항목명

유형

설명

예시

org_id

String

API 서비스를 요청한 앱의 조직 ID

54257f98-83f0-4eca-ae04-9ea35277a538

space_id

String

API 서비스를 요청한 앱의 영역 ID

d98b5916-3c77-44b9-ac12-04456df23eae

consumer_id

String

API 서비스를 요청한 앱 ID

d98b5916-3c77-44b9-ac12-045678edabae

instance_id

String

API 서비스를 요청한 앱의 자원 인스턴스 ID

d98b5916-3c77-44b9-ac12-045678edabad

plan_id

String

앱의 요청한 API 서비스의 plan ID

basic

credentials

JSON

서비스 요청에 필요한 credential 항목을 설정한다.

credentials: { key: value, … }

inputs

JSON

서비스 요청에 필요한 입력 정보를 설정한다.

inputs: { key: value,s ... }

3. API 서비스 미터링 전송 항목 예제

2.5.3 VCAP_SERVICES 환경설정 정보

파스-타 플랫폼에 배포되는 애플리케이션이 바인딩된 서비스별 접속 정보를 얻기 위해서는 애플리케이션별로 등록되어있는 VCAP_SERVICES 환경설정 정보를 읽어들여 정보를 획득 할 수 있다.

1. 파스-타 플랫폼의 애플리케이션 환경정보

  • 서비스를 바인딩하면 JSON 형태로 환경설정 정보가 애플리케이션 별로 등록된다.

2. Node.js에서 파스-타 플랫폼의 애플리케이션 환경정보에 접근하는 방법

  • 시스템 환경변수의 VCAP_SERVICES값을 읽어서 접근 할 수 있다.

2.6 미터링/등급/과금 정책

서비스, 그리고 서비스 제공자 마다 미터링/등급/과금 정책 다르기 때문에 본 가이드에서는 정책의 개발 예제를 다루지는 않는다. 다만 CF-ABACUS에 적용할 수 있는 형식에 대해 설명한다.

2.6.1 미터링 정책

미터링 정책이란 수집한 미터링 정보에서 미터링 대상의 지정 및 집계 방식을 정의한 JSON 형식의 오브젝트이다. 서비스 제공자는 미터링 정책 스키마에 맞춰 서비스에 대한 정책을 개발한다.

1. 미터링 정책 스키마

항목명

유형

필수

설명

plan_id

String

O

API 미터링 Plan ID

measures

Array

최소 하나

API 미터링 정보 수집 대상 정의

name

String

O

미터링 정보 수집 대상 명

unit

String

O

미터링 정보 수집 대상 단위

metrics

Array

최소 하나

API 미터링 집계 방식 정의

name

String

O

미터링 정보 수집 대상 명

unit

String

O

미터링 정보 수집 대상 단위

meter

String

X

미터링 정보에 대해서 수집 단계에 적용하는 계산식 또는 변환식

accumulate

String

X

미터링 정보에 대해서 누적 단계에 적용하는 계산식 또는 변환식

aggregate

String

X

미터링 정보에 대해서 집계 단계에 적용하는 계산식 또는 변환식

summarize

String

X

미터링 정보를 보고할 때 적용하는 계산식 또는 변환식

title

String

X

API 미터링 제목

2. 미터링 정책 예제

2.6.2 등급 정책

등급 정책이란 각 서비스의 사용 가중치를 정의한 JSON 형식의 오브젝트이다. 서비스 제공자는 등급 정책 스키마에 맞춰 서비스에 대한 정책을 개발한다.

1. 등급 정책 스키마

항목명

유형

필수

설명

plan_id

String

O

API 등급 Plan ID

metrics

Array

최소 하나

등급 정책 목록

name

String

O

등급 정의 대상 명

rate

String

X

가중치 계산식 또는 변환식

charge

String

X

사용량에 대한 과금 계산식 또는 변환식

title

String

X

등급 정책 명

2. 등급 정책 예제

2.6.3 과금 정책

과금 정책이란 각 서비스에 대한 사용 단가를 정의한 JSON 형식의 오브젝트이다. 서비스 제공자는 과금 정책 스키마에 맞춰 서비스에 대한 정책을 개발한다.

1. 과금 정책 스키마

항목명

유형

필수

설명

plan_id

String

O

API 과금 Plan ID

metrics

Array

최소 하나

과금 정책 목록

name

String

O

과금 대상 명

price

Array

최소 하나

과금 정책 상세

country

String

O

서비스 사용 단가에 적용할 통화

price

Number

O

서비스 사용 단가

title

String

X

과금 정책 제목

2. 과금 정책 예제

2.6.4 정책 등록

정책은 2가지 방식 중 하나의 방법으로 CF-ABACUS에 등록할 수 있다.

1. js 파일을 등록하는 방식

작성한 정책을 다음의 디렉토리에 저장한 후, CF에 CF-ABACUS를 배포 또는 재배포 한다.

  • 미터링 정책의 경우

  • 등급 정책의 경우

  • 과금 정책의 경우

2. DB에 등록하는 방식

작성한 정책을 curl 등을 이용해 DB에 저장하는 방식으로 CF-ABACUS를 재배포할 필요는 없다. 정책 등록 시, 정책 ID는 고유해야 한다.

  • 미터링 정책의 경우

    >

  • 등급 정책의 경우

    >

  • 과금 정책의 경우

    >

2.7 배포

파스-타 플랫폼에 애플리케이션을 배포하면 배포한 애플리케이션과 파스-타 플랫폼이 제공하는 서비스를 연결하여 사용할 수 있다. 파스-타 플랫폼상에서 실행을 해야만 파스-타 플랫폼의 애플리케이션 환경변수에 접근하여 서비스에 접속할 수 있다.

2.7.1 파스-타 플랫폼 로그인

아래의 과정을 수행하기 위해서 파스-타 플랫폼에 로그인

2.7.2 API 서비스 브로커 생성

애플리케이션에서 사용할 서비스를 파스-타 플랫폼을 통하여 생성한다. 별도의 서비스 설치과정 없이 생성할 수 있으며, 애플리케이션과 바인딩과정을 통해 접속정보를 얻을 수있다.

  • 서비스 생성 (cf marketplace 명령을 통해 서비스 목록과 각 서비스의 플랜을 조회할 수 있다.)

  • Gradle 버전: 2.2

2.7.3 API 서비스 애플리케이션 배포 및 서비스 등록

API 서비스 애플리케이션을 파스-타 플랫폼에 배포한다. 서비스 등록한 API는 다른 애플리케이션과 바인드하여 API 서비스를 할 수 있다.

1. 애플리케이션 배포

  • cf push 명령으로 배포한다. 별도의 값을 넣지않으면 manifest.yml의 설정을 사용한다.

2.7.4 API 서비스 연동 샘플 애플리케이션 배포 및 서비스 연결

애플리케이션과 서비스를 연결하는 과정을 '바인드(bind)라고 하며, 이 과정을 통해 서비스에 접근할 수 있는 접속정보를 생성한다.

  • 애플리케이션과 서비스 연결

2.8 테스트

샘플 애플리케이션은 REST 서비스로 구현되어 있으며, 코드 체크, 테스트 및 커버리스 체크를 위해서 eslint/mocha/Istanbul 모듈을 사용하였다. 테스트를 진행하기 위해서는 mocha 모듈을 포함한 package.json 안의 devDependencies모듈이 설치 되어 있어야한다. (npm install)

1. 코드 테스트를 위한 개발 환경 구성

  • 테스트를 위한 형상

  • 테스트를 위한 package.json 구성

  • Eslint 설정

2. 테스트 실행

  • Test 디렉토리 아래에 있는 모듈을 테스트 한다.

2.9 API 및 CF-Abacus 연동 테스트

API 연동 샘플 애플리케이션의 url을 통해 웹 브라우저에서 접속하면 API 연동 및 API 사용량에 대한 CF-Abacus 연동 테스트를 진행 할 수 있다.

1. CF-Abacus 연동 확인

2.10. 샘플코드

샘플코드는 아래의 사이트에 다운로드 할 수 있다.

다운로드

Last updated

Was this helpful?