피드로 돌아가기
The Timeless Marriage: GoF Visitor, LINQ Expression Trees, and Why 30-Year-Old Patterns Still Ship Code
Dev.toDev.to
Backend

GoF Visitor 패턴 기반 LINQ AST를 통한 결정론적 로직 검증 체계 구축

The Timeless Marriage: GoF Visitor, LINQ Expression Trees, and Why 30-Year-Old Patterns Still Ship Code

Val Melamed2026년 4월 18일17advanced

Context

Closed Hierarchy 구조에서 기존 클래스 수정 없이 새로운 연산을 지속적으로 추가해야 하는 확장성 제약 발생. 단순 실행 가능한 Delegate 형태의 로직은 내부 구조 파악과 변형이 불가능하여 정적 분석 및 외부 언어 변환에 한계 노출.

Technical Solution

  • Lambda 식을 IL 코드가 아닌 데이터 구조인 Expression Tree(AST)로 컴파일하여 로직의 가시성 확보
  • System.Linq.Expressions.ExpressionVisitor를 통한 AST 순회 및 노드별 타입 기반 Dispatch 메커니즘 구현
  • Visitor 패턴을 활용해 동일한 AST를 SQL, Cosmos DB, MongoDB 등 서로 다른 타겟 언어로 변환하는 Universal Translator 설계
  • 로직의 구조적 동일성 판단을 위한 DeepEquals 및 HashCodeVisitor 기반의 결정론적 비교 체계 구축
  • AI 생성 로직의 불투명성을 해결하기 위해 LLM 출력을 AST로 구체화하여 검증 가능한 Artifact로 변환
  • Open/Closed Principle을 적용하여 원본 데이터 구조 변경 없이 새로운 분석/직렬화 기능을 Visitor 클래스로 확장

1. 도메인 모델 변경 없이 새로운 연산을 추가해야 하는 경우 Visitor 패턴 도입 검토

2. AI 생성 쿼리나 룰셋의 신뢰성 확보를 위해 불투명한 문자열 대신 AST 기반의 결정론적 검증 레이어 설계

3. 다중 타겟 시스템으로의 로직 전파가 필요한 경우 중간 표현식(Intermediate Representation) 도입 고려

원문 읽기