LexQLexQ
블로그로 돌아가기

Drools vs Cloud 룰 엔진: Self-Hosted vs Managed 비교 (2026)

Drools는 룰 엔진 오픈소스의 기본입니다. 다만 Drools의 README는 self-hosting의 진짜 비용을 말하지 않습니다. 2026년에 Drools, GoRules, DecisionRules.io, Camunda, LexQ를 비교합니다.

Sanghyun Park·2026년 4월 29일12분 읽기

룰 엔진을 검토하기 시작하면 어느 지점에서든 Drools를 만나게 됩니다. 15년 넘게 오픈소스 진영의 기본 선택지였으니 피해 갈 도리가 없습니다.

장점도 분명합니다. JVM에서 그대로 돌아가고, 라이선스 비용이 0원이고, 오래 굴러온 만큼 성숙합니다. 이 중에서 결정을 밀어붙이는 건 대개 두 번째입니다. 그리고 가격표에 없는 항목이 실제 지출의 대부분을 차지합니다.

저는 백엔드 개발자로 일하면서 Drools를 도입한 팀들과 여러 번 함께 일했습니다. 도메인은 제각각이었는데 같은 장면이 반복됐습니다. 어려운 쪽은 DRL 문법이 아니었습니다. 엔진을 운영하는 일이 어려웠습니다. 그리고 도입을 결정하던 자리에서 그 운영 비용을 계산해 본 사람은 아무도 없었습니다.

이 글은 2026년에 Drools의 대안을 찾고 있는 엔지니어를 위해 씁니다. 순서는 이렇습니다. 먼저 Drools가 실제로 어떻게 동작하는지 정리하고, GitHub README가 값을 매기지 않는 self-hosting 비용을 항목별로 세어 봅니다. 그다음 managed cloud 룰 엔진이 그 비용 중 무엇을 대신 지고 그 값으로 무엇을 포기하게 하는지 보고, 마지막으로 팀 조건에 따라 어느 쪽을 고를지 정리합니다.

Drools가 실제로 하는 일

Drools는 Java로 작성된 forward-chaining 룰 엔진입니다. 규칙은 DRL(Drools Rule Language)이라는 declarative 문법으로 쓰고, 컴파일된 규칙은 PHREAK 위에서 평가됩니다. PHREAK은 Rete 알고리즘을 발전시킨 것입니다.

동작 구조는 단순합니다. facts, 그러니까 Java 객체를 엔진에 넣으면 조건을 평가하고, 조건이 맞은 규칙의 actions를 발화합니다. action은 working memory를 바꾸거나 애플리케이션 코드를 호출합니다.

엔진 하나만 쓰는 경우는 드뭅니다. 실제로는 세 가지가 따라옵니다.

  • KIE Server: KJAR 형태의 규칙 아티팩트를 호스팅하고 실행하는 stand-alone Java 서비스입니다.
  • Business Central과 Kogito: 규칙을 편집하고 생명주기를 관리하는 웹 UI입니다.
  • Drools Maven plugin: DRL을 배포 가능한 아티팩트로 컴파일하는 빌드 파이프라인입니다.

엔진 자체에 대한 제 평가는 긍정적입니다. PHREAK은 규칙 그래프가 복잡해져도 빠르고, 언어 표현력도 풍부합니다. 단순한 할인 로직부터 여러 단계를 거치는 underwriting 워크플로우까지 담을 수 있습니다. 제가 가장 자주 본 자리도 underwriting 계열, 핀테크의 한도 산정, 심사, 승인 결정이었습니다.

문제는 Drools가 아닙니다. Drools를 둘러싼 나머지 전부입니다.

직접 운영하는 Drools에 드는 진짜 비용

팀들이 값을 매기는 방식은 대개 이렇습니다. 라이선스 비용 0원과 SaaS 구독료를 나란히 놓고, 거기서 멈춥니다.

그 비교에서 빠지는 항목이 다섯 개 있습니다.

1. JVM 운영

Drools는 in-process로 돌아갑니다. 애플리케이션 JVM 안이거나 KIE Server의 JVM 안입니다. 어느 쪽이든 아래 세 가지는 직접 책임집니다.

먼저 heap 튜닝입니다. 룰 세션이 working memory에 facts를 들고 있기 때문에, stateful session을 잘못 잡아 두면 부하가 몰릴 때 OOM이 납니다.

GC 압박도 있습니다. forward-chaining은 객체 할당이 많습니다. 결국 G1과 ZGC 중 무엇을 쓸지 따져 보는 자리까지 갑니다.

JVM 업그레이드가 남습니다. Drools 7은 Java 8이나 11을 쓰고, Drools 8(Kogito)은 Java 17 이상을 요구합니다. 운영 중인 시스템에서 이 마이그레이션을 하는 일은 만만치 않습니다.

이 비용의 크기는 팀에 따라 다릅니다. 이미 JVM 운영에 깊이 들어가 있는 플랫폼팀이라면 부담이 조금 늘어나는 정도입니다. 그렇지 않다면 사람을 뽑거나 배워야 하는 새 전문 영역이 하나 생깁니다. 룰 엔진 RFP에는 이 항목이 적히지 않습니다.

2. 규칙 배포 파이프라인

규칙의 물리적 단위는 KJAR입니다. 컴파일된 DRL과 메타데이터를 묶은 Maven 아티팩트입니다. 규칙 하나를 바꾸려면 다섯 단계를 지납니다.

  1. Business Central이나 IDE에서 DRL 편집
  2. 새 KJAR 빌드 (Maven)
  3. Maven 저장소에 push
  4. KIE Server의 deployment를 새 버전으로 갱신
  5. 규칙이 적용되었는지 검증

단계를 건너뛰는 dynamic loading 패턴이 있기는 합니다. 대신 단순함을 런타임 리스크와 맞바꾸는 거래입니다.

제가 본 결과는 이렇습니다. 30초면 끝날 규칙 변경 하나 때문에, 마이크로서비스 릴리스 절차에 가까운 두 번째 배포 파이프라인을 운영하게 됩니다. 30초짜리 변경과 릴리스 한 사이클, 이 대비가 이 항목의 전부입니다.

3. 스케일링과 상태 관리

Stateless 룰 세션은 선형으로 확장됩니다. stateful 세션은 그게 안 됩니다.

방법이 둘 있고 둘 다 값을 치릅니다. sticky session으로 요청을 같은 인스턴스에 묶으면 수평 확장이 깨집니다. working memory를 밖으로 빼면 외부 저장소와 그 정합성을 새로 떠안습니다.

그래서 운영에 올라간 Drools 배포는 대부분 stateless로 수렴합니다. 표현력 때문에 stateful을 골랐더라도, 운영이 그걸 도로 회수해 갑니다.

4. 관측성

장애가 나기 전까지는 아무도 이 얘기를 꺼내지 않습니다.

Drools가 주는 것은 있습니다. listener를 적절히 켜면 어떤 규칙이 발화했고 어떤 조건이 매칭됐는지 볼 수 있습니다. 주지 않는 것은 그 뒤입니다. 이미 쓰고 있는 observability 스택, Datadog이나 Grafana나 Jaeger에 그 정보를 연결하는 일은 직접 만들어야 합니다.

문제는 대개 이런 모양으로 옵니다. 규칙을 올린 지 반년쯤 지난 어느 날 고객이 이 거래는 왜 차단되었냐고 물어 옵니다. 그때 답을 찾겠다고 로그를 grep 하고 있습니다.

5. 플랫폼팀 종속성

Drools로 만든 시스템에서 규칙을 바꾸는 일은 전부 엔지니어링을 거칩니다.

이론상으로는 Business Central이 있으니 제품팀이 규칙을 직접 씁니다. 실무에서는 의미가 조금이라도 있는 로직이면 개발자를 거칩니다. 의도를 DRL로 옮기고, 빌드하고, KJAR을 배포하고, 동작을 확인합니다.

약속은 운영팀이 규칙을 바꿀 수 있다는 것이었습니다. 현실은 엔지니어가 다음 스프린트에 처리한다는 것입니다.

다섯 항목을 다시 놓고 보겠습니다. JVM 운영, 배포 파이프라인, 스케일링, 관측성, 플랫폼팀 종속성. 하나씩은 견딜 만하고, 합치면 성격이 달라집니다. Drools 배포는 어느 순간 사람이 상주해야 하는 작은 플랫폼이 됩니다.

조직 안에서는 이렇게 나타납니다. 엔지니어 한 명이 조용히 Drools 담당자가 됩니다. 직함에는 없고, 원래 하던 일은 그대로 있고, 규칙과 관련된 질문은 전부 그 사람에게 갑니다.

Managed cloud 룰 엔진으로 옮기면 달라지는 것

Managed 룰 엔진의 거래는 명확합니다. 방금 센 다섯 비용을 벤더에게 넘깁니다. 받는 것은 API endpoint와 규칙 편집 UI입니다. JVM 튜닝도, 배포 인프라도, 스케일링도 남의 일이 됩니다.

실행과 버전 관리와 감사 기록을 한 제품으로 묶은 범주를 의사결정 운영 플랫폼이라고 부릅니다. 의사결정 운영 플랫폼이 무엇을 포함하고 언제 필요한지는 따로 정리해 두었습니다.

넘기는 대신 받는 제약이 네 가지입니다.

  • 네트워크 홉이 하나 늘어납니다. 규칙 평가가 public API를 지나가므로, p99를 10ms 아래로 잡아야 하는 경로에서는 이게 결정적입니다.
  • 벤더 lock-in입니다. managed 시스템에 쓴 규칙 정의는 portable하지 않습니다. 나가려면 다시 씁니다.
  • 규제 준수입니다. 일부 규제 환경에서는 의사결정 데이터를 외부 경계 밖으로 내보내지 못합니다. 특정 healthcare 워크로드, 금융, 공공이 여기 해당합니다.
  • 규칙 표현력입니다. Drools는 일부 managed 엔진이 지원하지 않는 temporal reasoning과 복잡한 chaining을 지원합니다. 대부분의 기업에는 필요 없고, 일부에는 필요합니다.

이 네 가지에 걸리지 않는다면, 제품팀에게는 managed 쪽이 나은 선택입니다. 2026년 현재 놓고 볼 만한 선택지는 다섯입니다.

도구호스팅강점약점
DroolsSelf-hosted JVM가장 표현력 높은 규칙 언어, 성숙한 생태계비교 옵션 중 가장 무거운 운영 부담
GoRules오픈소스 + 클라우드DMN 기반, 강력한 decision table작은 커뮤니티, 적은 integration
DecisionRules.ioSaaS빠른 onboarding, 다양한 템플릿시뮬레이션·audit 기능이 가벼움
Camunda DMNSelf-hosted 또는 SaaS이미 Camunda BPMN을 쓴다면 강함Camunda 전체 스택에 묶임
LexQSaaS내장 시뮬레이션, 전체 감사 기록, MCP 네이티브신생(작은 생태계, On-premise 미지원)

Drools는 이미 후보에서 뺐고 클라우드 엔진끼리 비교하는 단계라면, GoRules와 Nected를 LexQ와 같은 기준으로 놓고 본 비교가 더 가깝습니다.

여기서 밝힙니다. 표의 마지막 줄, LexQ를 만든 사람이 접니다.

LexQ를 만든 동기는 더 빠른 Drools가 필요해서가 아니었습니다. 제가 본 격차는 다른 자리에 있었습니다. Drools를 고른 팀은 예외 없이 주변부를 직접 만들기 시작했습니다. 시뮬레이션 harness, 감사 기록, 배포 파이프라인. 그렇게 6개월을 만들다 대개 포기했습니다. LexQ는 그 제품을 끝까지 만든 것입니다.

LexQ는 의사결정 운영 플랫폼입니다. Drools와 견줘 강조하는 차이는 셋입니다.

  • 규칙 변경의 영향을 실제 운영 데이터로 미리 확인합니다. 내장된 변경 영향 시뮬레이션이 대상 버전을 과거 운영 실행 데이터에 그대로 돌려서 무엇이 달라지는지 보여 줍니다.
  • 모든 의사결정에 흐름과 근거가 남습니다. 실행 한 건마다 executionTracesdecisionTraces가 함께 돌아옵니다. 앞쪽에는 평가된 모든 규칙과 매칭 표현식이 들어 있고, 뒤쪽에는 최종적으로 이긴 규칙과 사유 코드가 들어 있습니다.
  • 배포가 안전합니다. git 스타일 버저닝을 쓰고, 초안에서 발행됨을 거쳐 운영 중으로 갑니다. 문제가 있으면 즉시 롤백합니다. Maven도, artifact 승격도, JVM 재시작도 없습니다.

시뮬레이션을 부가 기능이 아니라 엔진의 기본 동작으로 만든 이유는 따로 썼습니다.

실행 한 건의 응답은 이렇게 생겼습니다.

{
  "result": "SUCCESS",
  "data": {
    "traceId": "2e31f2b8-...",
    "inputFacts": {
      "loyaltyTier": "VIP",
      "purchaseSubtotalUsd": 99.99
    },
    "mutatedFacts": {
      "purchaseSubtotalUsd": 79.99
    },
    "generatedVariables": {
      "purchaseSubtotalUsd__delta": -20.00
    },
    "executionTraces": [
      {
        "tenantId": "acme-corp",
        "policyGroupId": "01f2b274-...",
        "policyVersionId": "a6062090-...",
        "ruleId": "3b16ced1-...",
        "ruleName": "VIP 20% 할인",
        "executedAt": "2026-04-29T09:44:10Z",
        "matched": true,
        "matchExpression": "loyaltyTier == 'VIP'",
        "inputFacts": {
          "loyaltyTier": "VIP",
          "purchaseSubtotalUsd": 99.99
        },
        "generatedActions": [
          {
            "type": "MUTATE_FACT",
            "parameters": {
              "operand": 20,
              "method": "PERCENTAGE",
              "targetVar": "purchaseSubtotalUsd",
              "operator": "SUB",
              "rounding": { "mode": "HALF_UP", "scale": 2 }
            }
          }
        ]
      }
    ],
    "decisionTraces": [
      {
        "ruleId": "3b16ced1-...",
        "ruleName": "VIP 20% 할인",
        "policyGroupId": "01f2b274-...",
        "policyVersionId": "a6062090-...",
        "status": "SELECTED",
        "reasonCode": "FINAL_WINNER",
        "reasonDetail": null
      }
    ]
  }
}

이 실행 이력은 실행 로그의 retention 기간 동안 언제든 다시 꺼내 볼 수 있습니다. "왜 이런 일이 발생했나요"라는 질문의 답이 처음부터 기록으로 남아 있습니다. 뒤늦게 발굴할 일이 아닙니다.

직접 운영과 managed 사이에서 고르는 다섯 가지 질문

정답은 팀 사정에 달려 있습니다. 다섯 가지를 스스로 물어보면 대체로 갈립니다.

1. JVM 플랫폼을 이미 운영 중인가요? 그렇다면 Drools 운영 부담은 기존 부담에 얹히는 정도입니다. 아니라면 이 시스템 하나 때문에 새 전문 영역을 계속 유지해야 합니다.

2. 규칙이 얼마나 자주 바뀌는 편인가요? 한 달에 한 번 이하라면 self-hosted 배포 마찰은 견딜 만합니다. 일주일에 한 번 이상이면 그 배포 사이클이 그대로 쌓입니다.

3. 규칙을 코드베이스 밖에서 읽거나 검토할 일이 많은 편인가요? Drools는 규칙을 DRL 파일로 들고 있어서, 하나를 읽어 보려 해도 체크아웃하고 빌드해야 합니다. Managed 엔진은 규칙 정의를 한 곳에 조회 가능한 형태로 둡니다. 규칙을 소유한 엔지니어가 애플리케이션 PR과 분리해서 규칙 변경 하나만 따로 검토할 수 있습니다.

4. On-premise나 air-gapped 배포가 요구 조건인가요? 요구 조건이라면 managed 클라우드는 후보에서 빠집니다. Drools나 Camunda 쪽으로 갑니다.

5. 지금의 테스트 전략을 어디까지 믿을 수 있나요? self-hosted Drools에서는 시뮬레이션 harness를 직접 만들어야 합니다. managed 엔진은 대부분 이걸 기본으로 줍니다.

대략적인 휴리스틱으로 줄이면 이렇습니다.

  • 규제 준수 요구가 있고 JVM 플랫폼팀을 이미 가진 조직, 은행이나 보험사나 헬스케어 제공자라면 Drools나 Camunda입니다.
  • 규칙 변경이 잦은 B2B SaaS, 핀테크, 이커머스, 마켓플레이스라면 managed cloud 룰 엔진입니다.
  • BPMN 워크플로우를 이미 쓰는 성숙한 조직이라면 Camunda가 자연스러운 확장입니다.
  • 규칙 레이어를 Stripe처럼 API-first에 추적 가능하고 운영 부담이 가벼운 형태로 만들고 싶은 신생 팀이라면 LexQ입니다.

LexQ가 적합하지 않은 경우

이 절을 쓰는 이유는 단순합니다. 제가 벤더에게 듣고 싶은 종류의 정직함이기 때문입니다.

Drools를 이미 잘 운영하고 있는 내부 JVM 플랫폼팀이 있다면 옮길 이유가 약합니다. 치를 비용은 이미 치렀고, 옮겨서 더 얻는 몫이 작습니다.

의사결정 데이터를 외부 API로 내보낼 수 없는 규제 환경이라면 후보에서 빼세요. 일부 금융 서비스와 특정 healthcare 워크로드가 여기 들어갑니다.

엄격한 on-premise나 air-gapped 운영이 필요하다면 지금은 답이 없습니다. LexQ는 현재 SaaS로만 제공합니다.

temporal reasoning, complex event processing, 표준 production rule 범위를 넘는 규칙 chaining이 필요하다면 Drools가 더 표현력 있습니다. 이런 워크로드는 Drools에 남겨 두는 편이 맞습니다.

그 외라면, 제 경험으로는 대부분의 엔지니어링 팀이 여기 들어갑니다만, 이 맞바꿈은 할 만합니다.

마치며

Drools는 나쁜 도구가 아닙니다. 특정한 형태의 팀에 맞는 도구입니다. JVM 전문성이 깊고, 규칙이 자주 바뀌지 않고, on-premise나 규제 준수 제약이 있고, 배포 파이프라인을 별도 플랫폼처럼 유지할 의지가 있는 팀입니다.

제가 만난 팀 대부분은 그 형태가 아니었습니다. 그런데도 Drools를 골랐습니다. 오픈소스 룰 엔진을 찾으면 가장 먼저 나오는 이름이었기 때문입니다. 그리고 그 뒤로 1년을 흘려보냈습니다.

그게 README가 알려주지 않는 비용입니다. 그리고 의사결정 운영 플랫폼이 없애 주는 비용입니다.

→ Drools 수준의 표현력을 JVM 운영 부담 없이 원한다면, LexQ를 무료로 사용해 보세요.

결정을 배포 파이프라인 밖으로 꺼낼 준비가 되셨나요?

신용카드 없이 무료로 시작하세요. fact를 보내면 결과와 근거를 돌려받습니다.

무료로 시작하기