토픽 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, 빌드 도구