easy rules 사용 [6] YML 예시

YML 예시 [1] 단일 조건

이전에 작성한 easy rules 사용 [5] YML 게시물의 예시를 작성해보겠다. YML 방식을 사용할 경우, controller class 파일에 대한 수정이 크게 없다는 장점이 존재한다. 메인이 되는 class 파일 및 yml 파일을 다음과 같이 수정하도록 하겠다.

// (구) 메인이 되는 class 파일 내 소스코드
// facts 정의
Facts facts = new Facts();
facts.put("rain", true);

	↓

// (신) 메인이 되는 class 파일 내 소스코드
// facts 정의
Facts facts = new Facts();
facts.put("position", true);
// (구) rule yml 파일 소스 코드
name: "weather rule"
description: "if it rains then take an umbrella"
condition: "rain == true"
actions:
  - "System.out.println(\"It rains, take an umbrella!\");"

	↓

// (신) rule yml 파일 소스 코드
name: "position rule"
description: "position check rule"
priority: 1
condition: "position == true"
actions:
  - "System.out.println(\"직급이 일치합니다. 문서 결재에 대한 승인 권한이 부여됩니다.\");"

 

이제 해당 project를 구동하면, 다음과 같은 console 화면을 확인할 수 있다.

yml 파일에 설정한 condition(조건) 및 actions(결과 행동)이 정상적으로 실행되고 있음을 알 수 있다.

 


 

 

YML 예시 [2] 다중 조건

메인이 되는 class 파일 및 yml 파일을 다음과 같이 수정하도록 하겠다. yml 파일명을 rule.yml에서 rule1.yml로 수정하는 것도 잊지말자.

// (구) 메인이 되는 class 파일 내 소스코드
// Local path
String path = "C:\\test\\workspace\\ruleTest\\src\\main\\resources\\rule\\rule.yml";

// facts 정의
Facts facts = new Facts();
facts.put("rain", true);

// rules 정의
MVELRuleFactory ruleFactory = new MVELRuleFactory(new YamlRuleDefinitionReader());
Rule testRule = ruleFactory.createRule(new FileReader(pathRe));
Rules rules = new Rules();
rules.register(testRule);

	↓

// (신) 메인이 되는 class 파일 내 소스코드
// Local path
String path_1 = "C:\\test\\workspace\\ruleTest\\src\\main\\resources\\rule\\rule1.yml";
String path_2 = "C:\\test\\workspace\\ruleTest\\src\\main\\resources\\rule\\rule2.yml";

// facts 정의
Facts facts = new Facts();
facts.put("position", true);
facts.put("authLevel", 4);

// rules 정의
MVELRuleFactory ruleFactory = new MVELRuleFactory(new YamlRuleDefinitionReader());
Rule rule_1 = ruleFactory.createRule(new FileReader(path_1));
Rule rule_2 = ruleFactory.createRule(new FileReader(path_2));

Rules rules = new Rules();
rules.register(rule_1);
rules.register(rule_2);
// (구) rule yml 파일 소스 코드
name: "weather rule"
description: "if it rains then take an umbrella"
condition: "rain == true"
actions:
  - "System.out.println(\"It rains, take an umbrella!\");"

	↓
   
// (신) rule yml 파일 소스 코드
# rule 1
name: "rule_1"
description: "position check rule step 1"
priority: 1
condition: "position == true"
actions:
  - "System.out.println(\"직급이 일치합니다. 문서 결재에 대한 승인 권한이 부여됩니다.\");"

 

필자가 직접 확인한 바로는 YML 방식에서도 간단하게 다중 규칙(multiple rules)을 선언하여 제어할 수 있다. 예시와 같이 rule을 선언한 후, priority(순위)를 매겨주면 된다. 현재 매겨진 priority가 1이므로, 2도 필요할 것이다. 새로운 yml 파일을 생성하여 규칙을 선언해 주도록 한다.

# rule 2
name: "rule_2"
description: "position check rule step 2"
priority: 2
condition: "authLevel > 3"
actions:
  - "System.out.println(\"승인 권한 레벨 확인완료. 문서 결재에 대한 승인 권한이 부여됩니다.\");"

 

이제 해당 project를 구동하면, 다음과 같은 console 화면을 확인할 수 있다.

yml 파일들에 설정한 condition(조건) 및 actions(결과 행동)이 priority(순위)에 따라 정상적으로 실행되고 있음을 알 수 있다.

 

 

 


 

 

 

[ 출처 ]

Easy Rules 사용법 : https://github.com/j-easy/easy-rule

728x90