룰 엔진으로 선언적 프로그래밍 – Drools 6.0
Drools 6.0을 통한 룰 엔진으로 선언적 프로그래밍의 기초를 배워보세요.
초보자를 위한 룰엔진 프로그램밍
Drools 6.0 룰 엔진에서 선언적 프로그래밍 형태의 간단한 룰 애플리케이션을 작성해 봅니다.
선언적 프로그래밍은 ‘어떻게 해야 하는가’(How to do it) 아닌 무엇을 해야 하는가 ’What to do’에 집중하여 프로그래밍하는 방법입니다.
예를 들자면 “최댓값 구하기”를 절차적 프로그래밍 언어로 구현한다면 루프를 이용하여 값의 집합에서 각 값을 반복적으로 비교하고 최종적으로 최댓값을 구하는 코드로 작성할 것입니다.
만약 이 문제를 룰 시스템을 이용하여 해결한다면 최댓값은 값의 집합 중에 가장 큰 값이 될 것입니다. 즉 “값의 집합에서 그 값보다 큰 값이 존재하지 않는 값” 이라고 할 수 있습니다.
아래의 룰에 선언되어 있는 것처럼 HR 이라는 부서에 height 가 maxheight 보다 큰 값이 존재 하지 않는 것입니다.
when
memMaxHeight: Member( section == "HR", maxheight : height )
not Member( section == "HR", height > maxheight)
선언적 프로그래밍은 최댓값이 필요한 경우 위와 같이 최댓값의 정의 그대로 프로그램에 적용하는 것입니다.
1. 샘플 애플리케이션 작성
이제부터 HR 부서에서 가장 키가 큰 사람을 찾아내는 프로그램을 룰 엔진을 이용해 작성합니다.
앞으로 작성하는 프로젝트는 다음과 같은 형태이니 참조합니다.
2. pom.xml을 다음과 같이 작성하여 프로젝트 Dependency를 정의
Drools 6.0.0.Final 을 기반으로 Eclipse 프로젝트를 생성합니다. 로깅을 위하여 org.slf4j 도 dependency 에 함께 포함합니다.
4.0.0 drools.sample3 drools.sample3 0.0.1-SNAPSHOT 6.0.0.Final org.drools drools-compiler ${droolsVersion} org.slf4j slf4j-simple 1.7.2 runtime
3. 회사의 개별 직원을 나타내는 Member 클래스를 정의
package com.sample; public class Member { private String name; private String section; private int height; public Member(String name, String section, int height) { super(); this.name = name; this.section = section; this.height = height; } public String getSection() { return section; } public void setSection(String name) { this.section = name; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
4. 마지막으로는 앞서도 간단히 언급한 룰에 대한 정의 파일
sample.drl 의 파일 내용은 다음과 같습니다.
package com.sample import com.sample.Member; rule "maxHeight" when memMaxHeight: Member( section == "HR", maxheight : height ) not Member( section == "HR", height > maxheight) then System.out.println("가장 키가 큰 사람의 키는?、"+maxheight+"cm 입니다."); System.out.println("가장 키가 큰 사람은 " +memMaxHeight.getName() +"이며, 키는 " +memMaxHeight.getHeight() +"cm 입니다."); end
when 절에서 “maxheight 보다 큰 값을 가진 멤버는 없다는 룰” 이 적용된 결과 입니다.
when 절의 첫 번째 룰은 ‘section ==”HR” 전체 멤버이며, 두 번째 룰은 HR 멤버 중 자신의 키보다 큰 키를 가지는 멤버는 존재하지 않는 다는 것입니다.
5. Java Application 실행 결과는 다음과 같습니다.
앞에서 작성한 룰 애플리케이션은 Java Application 으로 실행하며 결과는 다음과 같이 출력됩니다.
가장 키가 큰 사람의 키는?、172cm 입니다. 가장 키가 큰 사람은 사용자2이며, 키는 172cm 입니다.
Drools 6.0 룰 엔진에서 선언적 프로그래밍 형태로 룰을 사용하는 간단한 샘플을 작성해 보았습니다.
거침없이 배우는 JBoss – 전준식 엮음/지&선(지앤선) |
클라우드 네이티브 가상화 – 가상화도 클라우드 네이티브 시대
/in Cloud, Tech Talk/by 오픈마루 마케팅3OpenShift Virtualization 소개: 가상화도 클라우드 네이티브로
/in OPENMARU, Red Hat, Tech Talk/by 오픈마루 마케팅1이제는 클라우드 네이티브 (Cloud Native) 기반 온프레미스 2.0 시대
/in Cloud, Tech Talk/by 오픈마루 마케팅3