Java API 서비스 미터링 개발 가이드
Table of Contents
1. 개요
1.1. 문서 개요
1.1.1. 목적
본 문서(Java API 서비스 미터링 적용개발 가이드)는 파스-타 플랫폼 프로젝트의 미터링 플러그인과 Java API 미터링 서비스 애플리케이션을 연동시켜 API 서비스를 미터링 하는 방법에 대해 기술 하였다.
1.1.2. 범위
본 문서의 범위는 파스-타 플랫폼 프로젝트의 JAVA API 서비스 애플리케이션에 대한 미터링 방법에 대한 개발과 CF-Abacus 연동에 대한 내용으로 한정되어 있다.
본 문서는 API 미터링 서비스 애플리케이션을 Java 언어로 작성 하는 것에 대해 기술 한다.
본 문서는 API 서비스 고유의 비즈니스 로직은 구현 하지 않으며, API 서비스 호출 시의 미터링을 하는 기능만 구현 한다.
본 문서에서 언급 하는 “API 서비스를 사용하는 애플리케이션”은 별도로 제공 하는 Node.js API 미터링 개발 가이드를 참고 하여 개발 한다.
1.1.3. 참고 자료
2. JAVA API 서비스 미터링 개발가이드
2.1 개요
API 서비스 애플리케이션을 Java 언어로 작성 한다. 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 개발환경 구성
Java 애플리케이션 개발을 위해 다음과 같은 환경으로 개발환경을 구성 한다.
CF release: v226 이상
java version "1.8.0_101"
springBootVersion : 1.3.0.BUILD-SNAPSHOT
gradle 2.14
Spring Tool Suite 혹은 Eclipse
2.2.1 CF-Abacus 설치
별도 제공하는 Abacus 설치 가이드를 참고하여 CF-Abacus를 설치한다.
2.3 샘플 API 서비스 개발
샘플 api 서비스는 서비스 요청이 있는 경우, 해당 요청에 대한 응답 처리와 api 서비스 요청에 대한 미터링 정보를 CF-ABACUS에 전송하는 처리를 한다.
2.3.1 gradle 프로젝트를 생성
프로젝트 디렉터리를 생성하고, gradle 프로젝트로 초기화 한다
2.3.2 샘플 API 서비스 형상

의존성 및 프로퍼티 형상 설명
파일
목적
build.gradle
애플리케이션에 필요한 의존성 정보를 기술
.gitignore
Git을 통한 형상 관리 시, 형상 관리를 할 필요가 없는 파일 또는 디렉토리를 설정한다.
manifest.yml
애플리케이션을 파스-타 플랫폼에 배포 시 적용하는 애플리케이션에 대한 환경 설정 정보 애플리케이션의 이름, 배포 경로, 인스턴스 수 등을 정의할 수 있다.
gradlew
Linux 환경에서 사용하는 gradlew 빌드 실행 파일 gradle 초기화 시 자동 생성 된다.
gradlew.bat
Window 환경에서 사용하는 gradle 빌드 실행 파일 gradle 초기화 시 자동 생성 된다.
settings.gradle
gradlew 실행 시 적용하는 환경 설정 파일 gradle 초기화 시 자동 생성 된다.
Java 파일 형상 설명
파일
목적
MeteringConfig
애플리케이션 구동 시 metering.properties를 로드 한다
MeteringAuthService
파스-타 플랫폼 상의 UAA 서버에서 abacus-usage-collector 에 대한 접근 권한 토큰을 취득하여 리턴 한다.
MeteringService
API 서비스 사용 요청 이 SampleApiJavaServiceController 에서 처리 될 때 API 서비스 처리에 대해 미터링이 적용된 사용량 보고서를 abacus-usage-collector 에 리포팅 한다.
SampleApiJavaServiceApplication
SpringBoot이 구동할 때, SpringBoot애플리케이션에 필요한 context 객체 들을 로드 한다.
SampleApiJavaServiceController
API 서비스 사용 요청을 처리하는 REST Controller. 본 샘플 애플리케이션에서는 API 서비스 고유의 비즈니스 로직은 구현 하지 않았으며, API 사용량을 abacus-collector에 전송하는 기능만 수행 한다.
application.properties
SpringBoot이 구동할 때, spring 에 필요한 property
metering.properties
API 사용량을 abacus-collector 전송 시에 설정 할 property 들이 정의 되어 있다.
2.3.3 의존성 및 프로퍼티의 설정
build.gradle
샘플 Api 서비스 애플리케이션이 사용하는 의존성에 대해 기술한다.
manifest.yml
앱을 CF에 배포할 때 필요한 설정 정보 및 앱 실행 환경에 필요한 설정 정보를 기술 한다.
```yml applications:
name: sample-api-node-service # 애플리케이션 이름
memory: 512M # 애플리케이션 메모리 사이즈
instances: 1 # 애플리케이션 인스턴스 개수
host: sample-api-java-service
path: ./build/libs/sample_api_java_service.jar # 배포될 애플리케이션의 위치
env:
SPRING_PROFILES_ACTIVE : cloud
```
metering.properties
API 서비스의 사용량 정보를 abacus-collector에 전송 할 때, 필요한 설정 정보 및 계정 정보를 기술 한다.
2.3.4 MeteringAuthService 클래스
UAA 서버 URL 및 계정 정보를 참조 하여, UAA token 을 취득하여 리턴 한다.
metering.properties 에서 취득한 계정 정보를 BASE64 로 인코딩 한다.
UAA SEVER 에서 리턴 받은 JSON 오브젝트 에서 access_token 을 추출한다.
2.3.5 MeteringService 클래스
abacus-collector의 Auth 설정 정보에 따라, 전송 방식에 대한 분기 처리를 한다.
API 사용량을 Abacus-collector에 전송하기 위해, CF 또는 인증 서버로부터 토큰을 취득하여 HTTP header에 설정하고 HTTPS Connection을 생성 한다.
API 사용량을 Abacus-collector에 전송하기 위한 HTTP header를 설정하고 HTTP Connection을 생성 한다.
Abacus-collector에 전송 할 API 서비스 사용량 JSON을 생성 한다.
API 서비스 미터링 전송 항목 (전송 리포트 JSON 상세)
항목명
유형
설명
예시
start
UNIX
Timestamp
API처리 시작 시각
1396421450000
end
UNIX
Timestamp
API처리 응답 시각
1396421451000
space_id
String
API를 호출한 앱의 영역 ID
d98b5916-3c77-44b9-ac12-04456df23eae
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
※ JSON 변환 예제
2.3.6 SampleApiJavaServiceController 클래스
서비스 사용 요청을 처리하는 REST Controller. 본 샘플 애플리케이션에서는 미터링을 하는 기능만 수행 한다.
2.4 API 서비스 연동 샘플 애플리케이션
본 가이드에서는 API 서비스를 호출하는 애플리케이션의 개발에 대해서는 기술하지 않는다. 샘플 애플리케이션의 개발에 대해서는 Node.js API**미터링 개발 가이드의Api서비스 연동 애플리케이션 개발**을 참고 한다.
2.4.1 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, ... }
3. API 서비스 미터링 전송 항목 예제
2.5. 미터링/등급/과금 정책
서비스, 그리고 서비스 제공자 마다 미터링/등급/과금 정책 다르기 때문에 본 가이드에서는 정책의 개발 예제를 다루지는 않는다. 다만 CF-ABACUS에 적용할 수 있는 형식에 대해 설명한다.
2.5.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.5.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.5.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.5.4. 정책 등록
정책은 2가지 방식 중 하나의 방법으로 CF-ABACUS에 등록할 수 있다.
1. js 파일을 등록하는 방식
작성한 정책을 다음의 디렉토리에 저장한 후, CF에 CF-ABACUS를 배포 또는 재 배포 한다.
미터링 정책의 경우
등급 정책의 경우
과금 정책의 경우
2. DB에 등록하는 방식
작성한 정책을 curl 등을 이용해 DB에 저장하는 방식으로 CF-ABACUS를 재배포할 필요는 없다. 정책 등록 시, 정책 ID는 고유해야 한다.
미터링 정책의 경우
>
등급 정책의 경우
>
과금 정책의 경우
>
2.6. 배포
파스-타 플랫폼에 애플리케이션을 배포하면 배포한 애플리케이션과 파스-타 플랫폼이 제공하는 서비스를 연결하여 사용할 수 있다. 파스-타 플랫폼상에서 실행을 해야만 파스-타 플랫폼의 애플리케이션 환경변수에 접근하여 서비스에 접속할 수 있다.
2.6.1 파스-타 플랫폼 로그인
아래의 과정을 수행하기 위해서 파스-타 플랫폼에 로그인
$ cf api --skip-ssl-validationhttps://api.<파스-타 도메인>#파스-타 플랫폼TARGET지정
$ cf login -u <user name> -o <org name> -s <space name>#로그인 요청
2.6.2. API 서비스 브로커 생성
애플리케이션에서 사용할 서비스를 파스-타 플랫폼을 통하여 생성한다. 별도의 서비스 설치과정 없이 생성할 수 있으며, 애플리케이션과 바인딩과정을 통해 접속정보를 얻을 수 있다.
서비스 생성 (cf marketplace 명령을 통해 서비스 목록과 각 서비스의 플랜을 조회할 수 있다.)
2.6.3. API 서비스 애플리케이션 배포 및 서비스 등록
API 서비스 애플리케이션을 파스-타 플랫폼에 배포한다. 서비스 등록한 API는 다른 애플리케이션과 바인다 하여 API 서비스를 할 수 있다.
애플리케이션 배포
gradle build -x test 명령으로 빌드 한다.
cf push 명령으로 배포한다. 별도의 값을 넣지않으면 manifest.yml의 설정을 사용한다
API 서비스 배포
$ cd <샘플api서비스 경로>/sample_api_java_service
BUILD SUCCESSFUL
Total time: 13.426 secs $ cf push
서비스 생성
name service plan bound apps last operation sampleNodejslightCallApi standard_obejct_storage_light_api_calls standard create succeeded
2.6.4. API 서비스 연동 샘플 애플리케이션 배포 및 서비스 연결
애플리케이션과 서비스를 연결하는 과정을 '바인드(bind)라고 하며, 이 과정을 통해 서비스에 접근할 수 있는 접속정보를 생성한다.
애플리케이션과 서비스 연결
2.7. API 및 CF-Abacus 연동 테스트
API 연동 샘플 애플리케이션의 url을 통해 웹 브라우저에서 접속하면 API 연동 및 API 사용량에 대한 CF-Abacus 연동 테스트를 진행 할 수 있다.
CF-Abacus 연동 확인
2.8. 샘플코드
샘플코드는 아래의 사이트에 다운로드 할 수 있다.
Last updated
Was this helpful?