Learning
토픽 139 / 192·프로그래밍 패러다임

DSL (Domain-Specific Language)

DSL (Domain-Specific Language)

특정 도메인이나 문제 영역에 특화된 프로그래밍 언어로, 범용 언어(GPL)와 달리 해당 도메인의 개념과 규칙을 직접 표현할 수 있도록 설계된 소규모 언어

목적: 도메인 전문가 참여 용이, 생산성 향상, 가독성 개선, 도메인 규칙 명시적 표현

분류

  • 외부 DSL(External DSL): 별도 문법·파서 필요, 독립적 언어, SQL/HTML/CSS/정규표현식/Terraform HCL/YAML
  • 내부 DSL(Internal DSL): 호스트 언어 문법 활용, API 스타일, Kotlin DSL/Groovy(Gradle)/Ruby(RSpec)/Scala

주요 DSL 사례

  • SQL: 데이터 질의, 선언적, 관계형 DB
  • HTML/CSS: 웹 구조/스타일, 마크업
  • 정규표현식: 문자열 패턴 매칭
  • Gradle(Groovy/Kotlin): 빌드 자동화
  • Terraform HCL: 인프라 정의(IaC)
  • Dockerfile: 컨테이너 이미지 정의
  • GraphQL: API 질의 언어
  • Makefile: 빌드 규칙 정의

메타프로그래밍: 코드를 생성하거나 조작하는 프로그래밍, 매크로(Rust/Lisp), 리플렉션(Java), 어노테이션 프로세싱, 코드 생성기

장점: 도메인 표현력, 비개발자 참여, 간결한 코드, 도메인 규칙 강제

단점: 설계 비용, 학습 부담(새 문법), 도구 지원 부족, 범용성 부재

비교: DSL(도메인특화/간결/제한적) vs GPL(범용/유연/복잡), 외부DSL(독립/파서필요/SQL) vs 내부DSL(호스트활용/제약/Kotlin)

연관: 프로그래밍 패러다임, 컴파일러, 메타프로그래밍, IaC, 빌드 도구