피드로 돌아가기
How I stopped hardcoding business rules in PHP - and built a rule engine to fix it
Dev.toDev.to
Backend

Hardcoding 탈피를 위한 Zero-dependency Rule Engine 구축

How I stopped hardcoding business rules in PHP - and built a rule engine to fix it

olivier-ls2026년 6월 8일3intermediate

Context

비즈니스 규칙 변경 시마다 발생하는 코드 수정 및 배포 사이클로 인한 운영 효율 저하 발생. 기존 Symfony ExpressionLanguage는 외부 의존성 증가, 사용자 정의 규칙 작성 시 객체 메서드 호출로 인한 Security 취약점, 내부 동작의 불투명성이라는 한계를 가짐.

Technical Solution

  • Lexer → AST → Evaluator로 이어지는 고전적 파이프라인 설계를 통한 규칙 해석 구조 구현
  • Strict Typing 적용으로 묵시적 형변환을 제거하여 런타임 데이터 정합성 확보
  • Evaluation Tree를 반환하는 Explain Mode 구축을 통한 규칙 실행 결과의 가시성 및 디버깅 효율 증대
  • Safe Mode 도입으로 Context 내 변수 누락 시 예외 처리 대신 누락 목록을 수집하는 유연한 오류 제어 구현
  • Alias Resolver 설계를 통해 내부 데이터 구조를 사용자 친화적인 명칭으로 매핑하여 비개발자의 규칙 작성 가능 구조 설계
  • 규칙을 Database에 저장하고 런타임에 로드하는 구조를 통해 배포 없는 실시간 비즈니스 로직 변경 체계 구축

- 빈번한 로직 변경이 발생하는 구간에 Hardcoding 대신 Rule Engine 도입 검토 - 사용자 정의 규칙 허용 시 Sandbox 환경 구축 또는 제한된 변수만 노출하는 Alias Resolver 적용 - 복잡한 조건문 엔진 설계 시 결과값뿐만 아니라 중간 평가 과정을 추적하는 Explainability 기능 포함

원문 읽기