타입 수준 DSL이란 무엇인가
타입으로 유창한 API를 유효한 프로그램으로 제한합니다.
타입 수준 DSL이란 무엇인가은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
타입 수준 DSL이란 무엇인가
타입 수준 DSL(도메인 특화 언어)은 TypeScript 타입을 사용해 API를 제한하므로 유효한 프로그램만 컴파일되게 합니다. 타입은 문법 역할을 하며, 잘못된 조합은 코드가 실행되기 전에 거부됩니다.
내장 DSL
내장된 DSL은 별도의 구문 분석기가 아니라 호스트 언어(여기서는 TypeScript) 안에서 동작합니다. 일반적인 TS를 작성하지만 타입 시스템이 DSL 규칙을 강제합니다.
익숙한 예
이미 타입 수준 DSL을 사용해 본 적이 있습니다. 유효한 열 이름만 허용하는 쿼리 빌더나 경로에서 매개변수를 추론하는 라우터가 그 예입니다. 타입이 API에서 허용하는 내용을 표현합니다.
플루언트 API 제한하기
핵심 개념은 각 메서드가 호출할 수 있는 다음 메서드를 제한하는 타입을 반환한다는 것입니다. 잘못된 순서로 호출하면 컴파일되지 않습니다.
interface Empty { from(t: string): HasFrom; }
interface HasFrom { where(c: string): HasFrom; select(): string; }
declare const q: Empty;
q.from("users").select(); // ok
q.select(); // Error: select not on Empty타입으로 상태 머신 만들기
이 패턴은 타입 수준 상태 머신입니다. 각 인터페이스는 하나의 상태이고 각 메서드는 다른 상태로의 전환입니다. 호출을 연결하면 컴파일러가 이 머신을 따라갑니다.
실행 시 검사만 하면 안 되는 이유
실행 시 검사는 사용자가 실제로 있는 운영 환경에서 늦게 실패합니다. 타입 수준 DSL은 코드가 배포되기 전에 편집기에서 빨간 물결 밑줄과 함께 일찍 실패합니다. 규칙은 같지만 피드백을 훨씬 저렴하게 얻을 수 있습니다.
팬텀 타입 매개변수
DSL은 흔히 팬텀 타입 매개변수에 정보를 담습니다. 이는 선택한 열이나 바인딩된 변수처럼 누적된 상태를 추적하기 위해 컴파일 시점에만 존재하는 제네릭이며, 실행 비용은 발생하지 않습니다.
interface Query<Selected extends string> {
select<C extends string>(c: C): Query<Selected | C>;
}리터럴 타입을 토큰으로 사용하기
문자열 리터럴 타입은 DSL 토큰 역할을 합니다. 템플릿 리터럴 및 유니온과 결합하면 타입 시스템이 DSL의 텍스트 내용을 추론할 수 있습니다.
type Direction = "asc" | "desc";
declare function orderBy(col: string, dir: Direction): void;
orderBy("age", "asc"); // ok
orderBy("age", "up"); // Error: not a Direction구성 요소
타입 수준 DSL은 상태를 위한 제네릭, 분기를 위한 조건부 타입, 문자열 구문 분석을 위한 템플릿 리터럴, 구조 변환을 위한 매핑된 타입을 결합합니다. 뒤의 수업에서는 이 요소들을 각각 사용합니다.
장단점
타입 수준 DSL은 강력한 보장을 제공하지만, 지나치게 사용하면 이해하기 어려운 오류와 느린 컴파일을 유발할 수 있습니다. 좋은 DSL은 안전성과 읽기 쉬운 오류 메시지 사이에서 균형을 잡습니다(뒤의 수업에서 이 문제를 다룹니다).
이 내용이 중요한 이유
도메인 규칙을 타입에 인코딩하면 컴파일러가 도메인 전문가가 되어 말이 되지 않는 내용을 자동으로 거부합니다. 이것이 쿼리 빌더, 폼 라이브러리, 효과 시스템이 강력한 보장을 제공하는 방식입니다.
빠른 점검
타입 수준 DSL을 이해했는지 확인해 보세요.
복습
타입 수준 DSL은 TypeScript 타입을 문법으로 사용하여 유효한 프로그램만 컴파일되게 합니다. 플루언트 API는 각 메서드가 상태를 제한하는 타입을 반환하는 상태 머신을 모델링합니다. 팬텀 제네릭, 리터럴 타입 토큰, 조건부 타입, 템플릿 리터럴 타입, 매핑된 타입을 구성 요소로 사용하여 편집기에서 컴파일 시점에 즉시 피드백을 제공합니다.
AI 튜터와 함께 TypeScript을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 101
- 레슨
- 352
자주 묻는 질문
“타입 수준 DSL이란 무엇인가” 강의는 무료인가요?
네 — “타입 수준 DSL이란 무엇인가” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“타입 수준 DSL이란 무엇인가”에서 뭘 배우나요?
타입으로 유창한 API를 유효한 프로그램으로 제한합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“타입 수준 DSL이란 무엇인가” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 타입 수준 DSL이란 무엇인가
- 유창한 쿼리 DSL 설계
- 컴파일 시점 입력 검증
- 타입 수준 DSL의 오류 메시지