XML은 값싼 DSL이다

1 week ago 9

  • 미국 IRS의 Tax Withholding Estimator(TWE) 프로젝트는 세금 계산 로직을 XML 기반 DSL로 정의해 공개 소프트웨어로 운영됨
  • 세금 계산 규칙을 Fact Graph라는 선언적 구조로 표현해, 각 항목 간의 의존 관계와 계산식을 명시적으로 기술함
  • JavaScript 같은 명령형 코드와 달리, XML 기반 모델은 추적 가능성과 감사 용이성을 제공하며 중간 계산값을 보존함
  • JSON은 중첩 표현이 복잡하고 타입 구분이 불명확해 DSL로 부적합하며, XML은 태그 구조와 속성 표현력 덕분에 더 자연스러운 모델링 가능
  • XML은 보편적 파서와 도구 생태계를 무료로 활용할 수 있어, DSL 구축 비용을 최소화하고 팀 생산성 향상에 기여함

IRS Tax Withholding Estimator와 XML의 활용

  • IRS가 공개한 Tax Withholding Estimator(TWE) 는 납세자가 소득과 공제액을 입력해 세금과 원천징수액을 추정하는 도구
    • 프로젝트는 오픈소스로 공개되어 있으며, 일반인의 기여도 허용됨
  • TWE는 두 개의 XML 설정 파일로 구성되며, 그중 하나인 Fact Dictionary가 미국 세법의 계산 규칙을 표현함
  • Fact Graph 엔진이 이 XML 정의를 기반으로 납세자의 세금 의무를 계산함
    • 예: <Fact path="/totalOwed">는 /totalTax에서 /totalPayments를 빼는 계산을 정의
  • XML 구조는 장황하지만, 각 계산의 의미와 의존 관계를 명확히 드러내는 장점이 있음

선언적 모델의 장점

  • JavaScript로 작성된 동일한 계산식은 간결하지만 명령형 구조로 인해 중간 계산값이 사라지고 실행 순서에 의존함
  • XML 기반 Fact Dictionary는 계산 절차가 아닌 관계와 정의를 기술하므로, 엔진이 자동으로 실행 순서를 결정함
  • 이 방식은 감사(audit)내부 추적(introspection) 을 가능하게 하며, 계산 근거를 쉽게 확인할 수 있음
  • TurboTax를 개발한 Intuit도 유사한 Tax Knowledge Graph를 연구했으나 비공개임
  • IRS의 Fact Graph공개 도메인 오픈소스로 누구나 분석·확장 가능

XML과 JSON의 비교

  • JSON은 설정 파일이나 데이터 전송에는 적합하지만, 복잡한 중첩 표현연산자 구조를 표현하기에는 비효율적임
  • XML은 태그 이름이 곧 데이터 타입을 나타내므로, DSL 설계 시 표현력과 가독성이 높음
    • 예: <GreaterOf>나 <Subtract> 같은 연산 구조를 자연스럽게 표현 가능
  • XML은 주석, 공백 처리, 속성 표현 등에서 JSON보다 유연하며, 사람이 직접 읽고 수정하기에도 용이함
  • YAML은 세법 로직 표현에는 부적합하다는 의견이 인용됨

XML의 범용성과 도구 생태계

  • XML은 s-expression, Prolog, KDL 등 다른 DSL 형식보다 덜 우아하지만, 보편적 파서와 변환 도구를 즉시 활용 가능
  • Prolog 등 다른 언어로도 XML을 쉽게 변환할 수 있어 플랫폼 간 호환성이 뛰어남
  • 저자는 XML 기반 Fact Dictionary를 탐색하기 위해 XPath, grep, fzf를 조합한 간단한 셸 스크립트를 작성
    • xpath 명령으로 Fact 경로를 추출하고, fzf로 인터랙티브 검색을 구현
    • 60줄 내외의 Bash 코드로 강력한 디버깅 도구를 제작해 팀 내에서 활용됨
  • 이러한 경험을 통해, 보편적 데이터 표현 형식의 가치와 XML의 생산성·비용 효율성을 강조함

결론 및 부가 관찰

  • XML은 DSL 구축 시 가장 저렴하고 실용적인 선택지로 평가됨
  • JSON은 일반 데이터 교환에 적합하지만, DSL에는 XML이 더 효율적임
  • XML은 인간이 읽을 수 있고, 도구 지원이 풍부하며, 다양한 언어로 변환 가능한 점에서 여전히 유효한 기술임
  • 최근 XML 관련 관심이 다시 증가하고 있으며, Rust 기반 XPath/XSLT 엔진XML 평면화 도구(grex) 등의 신흥 프로젝트가 언급됨

Read Entire Article