메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

클라우드 청구 서비스

클라우드 환경을 위한 SOA 사용 청구 서비스 모듈

Hans Dieter Wehle, 우수 IT전문가, IBM
Hans-Dieter Wehle
Hans-Dieter Wehle은 IBM에서 클라우드 컴퓨팅 분야의 탁월한 IT 전문가이다. 그는 독일 뵈블링겐의 IBM R&D Design Center 소속으로, 컴퓨터 업계에서 20년 이상 현장 지원부터 소프트웨어 개발 및 컨설팅까지 다양한 경력을 쌓았다. Wehle은 1999년에 IBM R&D에 입사했는데, 2006년 이후로 친환경 IT 및 클라우드 컴퓨팅 솔루션에 주력하면서 다양한 IBM 개발 프로젝트에 참여해왔다.

요약:  클라우드 청구는 미리 정의된 청구 정책 세트를 사용하여 자원 사용 데이터에서 청구서를 생성하는 프로세스입니다. 작성자는 견적 서비스, 변환 기능 및 정책, 지불 스킴 및 사용자 식별과 같은 기능적 요구사항과 보안, 확장성, 표준 및 내결함성과 같이 비기능적이지만 필수적인 요구사항을 모두 포괄하는 서비스 지향 아키텍처에 사용되는 클라우드 청구 서비스 모듈을 정의합니다.

기사 게재일:  2011 년 11 월 08 일
난이도: 초급 원문:  보기 PDF:  A4 and Letter (73KB | 9 pages)Get Adobe® Reader®
페이지뷰:  793 회
의견:  


컴포넌트를 클라우드에 최적화하는 목적은 사용 요금 청구서를 생성하기 위한 인터페이스를 제공할 수 있기 위함이다. 클라우드 청구는 미리 정의된 청구 정책 세트를 사용하여 자원 사용 데이터에서 청구서를 생성하는 프로세스이다. 개별적인 클라우드 컴퓨팅 일반 정책에 따라 실제로 돈을 청구하는 것일 수도 있고 더 추상적인 교환의 개념을 지칭하는 것일 수도 있지만, 청구 서비스에서는 특정한 경제 모델을 사용하도록 지정하지 않으므로 이는 중요하지 않다.

본 기사는 서비스 지향 아키텍처 환경에 적합하게 설계된 클라우드 청구 서비스 모듈을 정의하는 방법을 보여주는 간단한 안내서라 할 수 있다. 이 기사에서는 견적 서비스, 변환 기능 및 정책, 지불 방법 및 사용자 식별 문제와 같은 기능적 요구사항을 다룬다. 보안, 확장성, 표준 및 내결함성과 같이 필수적인 비기능적 요구사항도 다룬다.

클라우드 청구 서비스 모듈의 요소

우선, 클라우드를 위한 이런 청구 모듈의 아키텍처부터 살펴보자. 그런 다음, 청구 정책과 사용되는 언어 및 구문의 바탕이 된 사고를 설명하겠다. 또한, 규칙/추론 엔진과 이 엔진의 역할을 설명한 다음, 워크플로우 및 충돌 해결에 대해 간단히 논하는 것으로 이 섹션을 마무리하겠다.

효과적인 모듈: 기능이 양식보다 우선

일반적인 클라우드 청구 서비스 모듈은 다음과 같이 모든 기능적 요구사항을 지원하는 포트 유형을 제공해야 한다(다음 섹션에서 설명함).

  • 청구 서비스는 청구 정책 저장소(Billing Policies Repository)에서 검색되는 정책에 따라 청구서를 생성한다.
  • 청구서는 이후에 관리자가 사용할 수 있도록 청구서 저장소(Bills Repository)에 저장된다.

그림 1은 회계 및 청구 서비스의 일반적인 아키텍처를 나타낸 것이다.


그림 1. 모듈의 아키텍처
모듈의 아키텍처

청구서 생성 프로세스가 자동화되어 있지 않으므로 관리자가 이 프로세스를 시작해야 한다. 이 서비스의 모든 기능은 웹 서비스로 구현된다.

그림 2는 기술 관점에서 이 모듈을 나타낸 것으로, 다양한 서브컴포넌트와 이런 다양한 기술 간의 상호작용을 보여준다.


그림 2. 기술 관점에서 본 모듈
 기술 관점에서 본 모듈

청구 서비스에서는 PHP 인터페이스를 통해 웹 서버에 대한 연결을 설정하고 사용 레코드 저장소(UR(Usage Record) Repository)에서 레코드 문서를 가져온다.

청구 정책, 청구 구문, 언어

간단한 청구 정책의 예는 다음과 유사한 서술문이다.

  • 1 CPU/h(사용 시간)는 1개의 토큰과 같음
  • 20시간 이상의 CPU/h에 대해 20% 할인

하지만, 청구 정책을 간단하게 만들든 복잡하게 만들든 상관없이, 자원 관리자가 정책을 수정하려고 할 때가 있을 것이다. 모든 경우를 포괄한다는 것은 절대로 불가능하며 정책을 새로 추가할 때마다 소스 코드를 변경하는 것도 물론 가능하지 않다.

최종 청구 금액을 계산하는 청구 논리와 청구서 생성 방법에 대한 지침을 설정하는 청구 정책을 분명히 구분하는 것이 중요하다. 청구 정책은 서비스에 포함되지 않고 청구 서비스에서 사용하는 외부 요소를 구성한다. 자원 관리자가 청구 정책을 작성하여 저장소에 저장한다. 청구 서비스는 이 저장소를 사용하여 최종 청구서를 생성하는 데 필요한 지침을 추출한다.

예제로 언급한 위 두 가지 정책을 형식화한다고 가정해보자. 그러면 CPU 시간을 x로 하는 (cpu_h(x)와 토큰 수를 x로 하는 token(x)를 사용하여 다음과 같이 작성할 수 있을 것이다.

(1)# bill = token(cpu_h(x));
(2)# if 
         cpu_h(x) > 20
     then
         bill = bill*.8;

이 표기법에서는 두 가지 정책을 모두 캡처했지만, 다음과 같은 두 가지 주요 문제점이 발생한다.

  • 자연어가 아니다.
  • 모든 경우를 포괄할 수는 없다.

청구 정책을 설정하는 사람이 반드시 프로그래머란 법이 없으므로 이런 표기법으로 작성했을 때 프로그래머가 아닌 사람은 이해하기가 정말 어려울 수 있다는 점을 기억하자. 이런 표기법보다는 좀 더 쉽게 이해할 수 있는 자연어로 청구 정책을 표현하는 것이 훨씬 더 쉽고 자연스럽다.

두 번째 문제점은 이 표기법을 사용하여 다양하고 복잡한 정책을 표현하기가 무척 어렵다는 점이다. 비즈니스 규칙은 상당히 빠른 속도로 변화할 수 있으며, 청구 규칙도 이런 변화를 따라가야 한다. 미래의 정책적 요구사항 예측은 강력한 규칙 구문을 통해서만 완료할 수 있다.

정책을 설명하기 위해 다른 유형의 언어도 사용되는데, 각 언어마다 고유의 장점과 단점이 있다.

자연어를 사용할 경우 다음과 같이 평이한 말로 규칙을 표현할 수 있다.
이벤트가 VM Assignment이고 클라이언트의 유형이 Platinum인 경우 초당 비용은 0.0002유로이다.

자연어는 사용하기 쉽고 배우기도 쉽다. 그리고 컴퓨터를 능숙하게 다루지 못하는 사용자에게 가장 전달력이 강하다.

(스펙 문서에 사용되는 것과 같은 구문과 시맨틱을 사용하는) DSL(Domain Specific Language)로 위와 동일한 정책을 설명하면 다음과 같은 형태가 된다.
EVENT = "VM Assignment", CLIENT_TYPE = "Platinum", RESOURCE_TYPE = "BLADE Type 4", RESOURCE_AGE > 240 * 60 * 60 (seconds), SERVICE_LEVEL = "Platinum", COST_PER_SECOND = 0.0002 (Euros, Pounds, etc.)

DSL은 자연어보다 더 구조적이고 더 쉽고 빠르게 편집하고 변경할 수 있다.

전향 연쇄 짓기(forward chaining)에 대한 추가 정보

(P이면 Q, P가 참이면 Q가 참과 같은 긍정식 추론 규칙을 바탕으로 하는) 데이터 중심의 추론(data-driven inference) 또는 전향 연쇄 짓기(Forward chaining)는 전제를 내세우고 결론을 반환하는 추론 규칙, 구문 규칙 또는 함수를 사용할 때의 두 가지 주요 추론 방법 중 하나다. 전향 연쇄 짓기는 사용 가능한 데이터에서 시작하여 어떤 목표에 도달할 때까지 앞으로 반복하면서 더 많은 (새로운) 데이터를 추출하는 방법이다. (다른 방법인 후향 연쇄 짓기에서는 목표에서 시작하여 역으로 작업하면서 세부 단위의 데이터가 목표를 뒷받침하는지 확인한다. 두 방법 모두 긍정식 규칙을 바탕으로 하지만, 후향 연쇄 짓기가 목표 중심의 추론으로 간주된다.)

후향 연쇄 짓기에 비해 전향 연쇄 짓기의 장점으로 꼽히는 것 중 하나는 새 데이터를 수신하여 새로운 추론을 트리거할 수 있다는 점이다. 이런 특징 덕분에 조건이 변할 가능성이 있는 동적인 상황에는 이 추론 엔진이 더 적합하다.

규칙/추론 엔진과 역할

규칙/추론 엔진은 시스템 상태나 사용자 입력을 바탕으로 규칙을 평가하는 시스템의 한 요소이다. 정책 구문이 있는 것으로는 충분치 않다. 정책의 유효성을 어설션하고 정책을 평가할 메커니즘도 있어야 한다. 이것이 바로 규칙 엔진의 설계 목적이다.

필자가 설명하려는 엔진은 Rete 알고리즘의 향상된 구현을 사용하는 전향 연쇄 짓기 규칙 엔진이다. 이 개발 단계에서 동료와 나는 여러 가지 규칙 엔진을 평가하는 프로세스를 진행하면서 다음 두 가지 사항에 주목했다.

  • IBM의 ACEL(Autonomic Computing Expression Language)은 원래 관리 시스템에 정책을 적용해야 할 때의 조건을 설명하기 위해 Autonomic Computing Policy Language의 일부로 개발되었다.
  • 산업 표준을 사용하려면 Java™ Rule Engine API(JSR94)를 프로그래밍 인터페이스로 사용해야 한다.

간단한 웹 프론트엔드를 통해 청구 규칙을 입력하고 수정한다. 규칙/추론 엔진의 구조를 살펴보자.


그림 3. 규칙/추론 엔진
규칙/추론 엔진

Rete 알고리즘과 패턴 일치에 대한 추가 정보

Rete(레이티 또는 리티로 발음함) 알고리즘은 프로덕션 규칙 시스템을 구현하기 위한 효율적인 패턴 일치 알고리즘으로서, 널리 사용되는 다수의 전문가 시스템 쉘의 기초로 발전했다. Rete는 영어로 net을 뜻하는 라틴어에서 따온 이름이다.

Rete 알고리즘은 메모리를 많이 사용하는 대신 속도를 높여준다. 이 알고리즘은 각각의 노드가 어떤 규칙의 조건부 "if" 파트에 있는 패턴에 상응하는 노드의 네트워크("Rete" 파트)를 만들어 규칙에 따른 데이터 검사(데이터가 규칙에 부합하는지 검사 > 부합하지 않으면 규칙을 버리고 부합하면 규칙을 유지함 > 다음 규칙으로 이동 > 규칙 시작으로 루프 동작/다시 반복)의 구현 속도가 느린 문제를 해결한다. Rete의 역할은 작동 중인 메모리에서 데이터-사실 정보를 저장하는 것이다. 그러면 시스템이 노드에 있는 데이터를 공유하여 중복을 제거하고, (변경될 때마다 시스템에서 모든 사실을 다시 평가하지 않아도 되도록 하는) 다른 사실 유형을 결합할 때 부분 일치 항목을 저장하고, 작동 중인 메모리에서 사실이 제거될 때 메모리 요소를 효율적으로 제거할 수 있다.

프로덕션 규칙에 맞춰 새로운 사실이나 기존 사실을 일치시키는 프로세스를 패턴 일치라 한다. 규칙 엔진은 패턴 일치를 위해 여러 가지 알고리즘을 사용한다. 규칙은 프로덕션 메모리에 저장되고 추론 엔진은 작동 중인 메모리의 데이터와 사실의 일치 여부를 검사한다.

사실이 수정되거나 취소된 작동 중인 메모리에 사실이 삽입된다. 규칙과 사실의 수가 많은 시스템에서는 동일한 사실 어설션에 대해 많은 규칙이 True가 되며, 이런 규칙은 충돌 상태에 있다고 말한다. 어젠더는 충돌 해결 전략을 사용하여 이렇듯 충돌하는 규칙의 실행 순서를 관리한다.

워크플로우 및 충돌 해결 전략

여기서 워크플로우란 규칙을 평가할 때의 규칙 우선 적용 순서(어떤 규칙을 먼저 평가해야 하는가?)를 의미한다. 충돌 해결이란 둘 이상의 규칙이 True로 평가되는 경우 어떤 규칙을 실행할지 정하는 것을 의미한다. 이 두 가지 사항 모두 중요하며 성공적인 청구 서비스 모듈에 있어야 할 사항이다.

다음으로, 기능적 요구사항을 간결하게 설명하는 단계로 바로 넘어가자.


청구 모듈의 기능적 요구사항

이제 클라우드 청구 모듈에서 고려할 기능적 요구사항을 간단 명료하게 정리하겠다.

견적 서비스

클라우드 브로커링 인스턴스는 사용자가 견적을 요구한 후 자원을 사용할 수 있도록 견적 서비스를 지원해야 한다. 예를 들어, "그 컴퓨팅 사이트에서 이런저런 것을 실행하려면 얼마나 드는가?"와 같은 것이다. 견적에 구속력을 부여하면 안 되고 견적은 짧은 시간 동안 유효할 뿐이다.

변환 함수 및 정책

클라우드 브로커링 인스턴스는 기본적인 변환 스킴(예: 1CPU/h의 비용 = 인스턴트당 토큰 1개)에 따라 사용 레코드에서 통화로 변환하는 변환 함수를 구현하고 경제 모델과 수요에 따라 토큰의 금전적 가치를 협상해야 한다. 클라우드 브로커링 인스턴스는 자원 소유자가 자신의 이익에 더욱 부합하도록 이 인스턴스에 사용자 정의 변환 모델을 제공하도록 허용해야 한다.

고객(엔티티) 식별 프로세스

클라우드 브로커링 인스턴스는 엔티티 식별이 자원 사용량에 맞춰 청구되도록 허용해야 한다. 사용자가 다른 가상 조직에 속해 있고 여러 작업을 실행할지도 모르며, 이 경우에는 각 작업에 대해 누가 요금을 지불해야 할지 식별하는 것이 중요하다. 인스턴스에 대해 돈을 쓸 수 있느냐에 따라 다른 예산 항목에서 작업 비용이 지불되는 일도 발생할 수 있다.

지불 스킴 함수 및 정책

클라우드 브로커링 인스턴스는 최소한 하나 이상의 지불 스킴을 지원해야 한다. 어떤 경우에는 사후 지불, 사전 지불(인스턴스 예약 시점에) 또는 계속 지불 스킴을 허용하고 있다.

클라우드 서비스는 (시간에 따라 변할 수 있는) 주제에 대한 가격 결정에 유연성이 있거나 사용 요금, 고정 요금, 일회성 요금 또는 할인과 같은 다양한 요금제가 있어야 한다. 예를 들어, 정책은 다음과 같은 형태일 수 있다.

EVENT = "VM Assignment", 
CLIENT_TYPE = "Platinum", 
RESOURCE_TYPE = "BLADE Type 4", 
RESOURCE_AGE < 240 * 60 * 60 (seconds), 
SERVICE_LEVEL = "Platinum", 
COST_PER_SECOND = 0.0002 (Euros)  

EVENT = "ONE_OFF SERVICE 1", 
RESOURCE_TYPE = "BLADE Type 4", 
ONE_OFF_COST = 1


비기능적이지만 필수적인 요구사항

클라우드 청구 모듈에 대한 비기능적이지만 필수적인 요구사항을 해결하려면 모듈에 최소한 다음과 같은 기능이 있어야 한다.

  • 트랜잭션을 안전하게 수행하는 능력
  • 역할 기반 인증
  • 활동을 분석하기 위한 감사 내역

특히, 권한 없는 클라이언트나 사기꾼이 정당한 인증 또는 권한 없이 이벤트를 보내거나 청구 프로세스를 트리거하지 못하도록 하기 위한 단계를 수행해야 한다.


결론

클라우드 환경 청구 모듈을 철저히 분석하여 그 세부사항을 살펴봄으로써, 고유의 클라우드 청구 모듈 개발을 계획할 때 숙고할 고려사항을 몇 가지 확인해보았다. 필자는 어떻게 회계 및 청구 서비스에 적합한 모듈을 개발하고 전체 클라우드 인프라에 맞춰 조정할지에 대한 비전을 제시했다. 청구 정책과 구문 및 언어에 대한 예제를 살펴보며 규칙/추론 엔진의 작동 방식을 심층적으로 파악해보았다. 필자는 청구 모듈에 대한 기능적 요구사항 외에도 역시 고려해야 할 비기능적이지만 필수적인 요구사항을 정리한 체크리스트도 제시했다.


참고자료

교육

제품 및 기술

  • IBM Smart Business Development and Test on the IBM Cloud에서 사용 가능한 제품 이미지를 확인하자.

토론

필자소개

Hans-Dieter Wehle

Hans-Dieter Wehle은 IBM에서 클라우드 컴퓨팅 분야의 탁월한 IT 전문가이다. 그는 독일 뵈블링겐의 IBM R&D Design Center 소속으로, 컴퓨터 업계에서 20년 이상 현장 지원부터 소프트웨어 개발 및 컨설팅까지 다양한 경력을 쌓았다. Wehle은 1999년에 IBM R&D에 입사했는데, 2006년 이후로 친환경 IT 및 클라우드 컴퓨팅 솔루션에 주력하면서 다양한 IBM 개발 프로젝트에 참여해왔다.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=클라우드 컴퓨팅, SOA와 웹서비스
ArticleID=769002
ArticleTitle=클라우드 청구 서비스
publish-date=11082011

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.