Rule Engine
easy rules를 알기 전에, Rule Engine에 대하여 먼저 알아야 한다. 필자는 rule engine에 대하여 수많은 조건문의 집합체라고도 생각한다. 특정 값에 대하여 유동적인 까닭으로 인해 동적인 결과 값을 도출해내야 할 때, Controller 혹은 Service 단에서 조건문을 잔뜩 생성하기도 한다. (필자는 spring framework 기반의 개발 환경에서 근무) 그러한 조건문들에 대하여 Common Module로 구현하여 사용하는 것이 rule engine이다.
Easy Rules 정의
easy rules : 말 그대로 '쉬운 규칙들'. easy rules은 비즈니스를 정의하기 위한 POJO(Plain Old Java Object, 간단히 POJO는 말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트) 기반의 framework를 제공하는, 간단한 java rule engine이다.
Easy Rules Maven 추가
<!-- Rule Engine / Easy Rules -->
<dependency>
<groupId>org.jeasy</groupId>
<artifactId>easy-rules-core</artifactId>
<version>4.1.0</version>
</dependency>
Easy Rules Class 생성
우선 규칙을 정의하는 class를 생성한다.
import org.jeasy.rules.annotation.Action;
import org.jeasy.rules.annotation.Condition;
import org.jeasy.rules.annotation.Rule;
@Rule(name = "EasyRulesController", description = "EasyRulesTest")
public class EasyRulesController {
@Condition
public boolean when() {
return true;
}
@Action
public void then() throws Exception {
System.out.println("┌────────── ────────── ──────────");
System.out.println("EasyRulesTest !!!");
System.out.println("└────────── ────────── ──────────");
}
}
해당 class 정의에 사용된 annotation들은 easy rules에 내장되어있다.
다음으로 메인이되는 class를 생성한다.
import org.jeasy.rules.api.Facts;
import org.jeasy.rules.api.Rules;
import org.jeasy.rules.api.RulesEngine;
import org.jeasy.rules.core.DefaultRulesEngine;
import easyRulesTest.controller.EasyRulesController;
public class Launcher {
public static void main(String... args) {
// facts 생성
Facts facts = new Facts();
// rules 생성
Rules rules = new Rules();
rules.register(new EasyRulesController());
// rules engine 생성
RulesEngine rulesEngine = new DefaultRulesEngine();
rulesEngine.fire(rules, facts);
}
}
현재 상태에서 project 실행 시, 다음과 같은 console 화면을 볼 수 있다.
앞서 생성한 규칙을 정의하는 class(EasyRulesController)가 정상적으로 처리되는 모습이다.
[ 출처 ]
POJO 정의 : https://ko.wikipedia.org/wiki/Plain_Old_Java_Object
Easy Rules 사용법 : https://www.baeldung.com/java-rule-engines
'Java > easy rules' 카테고리의 다른 글
easy rules 사용 [6] YML 예시 (0) | 2021.08.23 |
---|---|
easy rules 사용 [5] YML (0) | 2021.08.19 |
easy rules 사용 [4] jeasy API(Controller 추가 없음) (0) | 2021.08.19 |
easy rules 사용 [3] MVEL Rule (0) | 2021.08.19 |
easy rules 사용 [2] RuleBook (0) | 2021.08.19 |