DSL즉, 도메인 특정 언어는 특정 문제 영역(domain)에 특화된 프로그래밍 언어를 말한다. 일반 목적 언어(General Purpose Language)가 법용적으로 사용될 수 있는 반면, DSL은 특정 도메인의 요구사항과 용어에 맞춤특화되어 있다.
DSL은 일반적으로 다음 두 가지 유형으로 구분된다.
1) 내부 DSL
기존 프로그래밍 언어를 기반으로, 그 언어의 기능을 활용하여 도메인 특화된 표현을 만드는 방식
예로, Groovy나 Kotlin을 기반으로 작성된 Gradle의 빌드 스크립트는 내부 DSL의 예시이다. 이 스크립트는 기본 언어의 구문과 기능을 확장하거나 변경하여 특정 도메인에 맞는 표현을 제공한다.
2) 외부 DSL
기존 프로그래밍 언어와는 독립적으로 설계된 별도의 언어이다. 구문 분석기와 인터프리터, 컴파일러가 필요하다.
SQL(Structured Query Language)은 데이터베이스 쿼리를 작성하기 위한 외부 DSL의 대표적인 예이다. SQL은 특정 데이터베이스 시스템에서 데이터를 조회하고 조작하기 위한 독립적 언어다.
즉, 철저하게 특화되어 만들어진 언어들을 의미한다.