DSL 읽는 법: 한 줄이 모든 계층을 정한다
문법은 여섯 가지 원칙이 전부입니다. 개발자가 손으로 쓰고, 리뷰어가 한눈에 읽습니다. 새 기능도 이 모양을 지키므로 기능마다 새 문법이 늘지 않습니다.
| 원칙 | 예 | |
|---|---|---|
| 1 | 한 줄이 한 필드 - 저장·검증·검색·노출을 그 줄이 정함 | name: string(30)! @search(like) |
| 2 | 흔한 것은 타입 옆 기호 | (30) 길이, ! 필수, (10.2) 정밀도 |
| 3 | 엔티티 단위 규칙은 meta: 한 줄 | meta: entity @root @editable @expose(20) @access(read=public) |
| 4 | 기본값이 있다 - 다른 것만 적음 | @expose(20) 만으로 생성·조회·검색·페이지·REST |
| 5 | YAML 섹션이 개념 | entity, dto, enumeration, states, metrics, port |
| 6 | -- 뒤는 설명 - 모델이 곧 문서 | -- 판매 단위 (Large, Male Puppy ...) |
한 줄을 뜯어 보면
unitCost: money(10.2)! @min(0.01, 'price must be positive') @terms(price, 가격)
| 조각 | 뜻 |
|---|---|
unitCost | 이름 |
money(10.2) | 타입과 정밀도 (전체 10자리, 소수 2자리) |
! | 필수 |
@min(0.01, 'price must be positive') | 규칙과 그 메시지 |
@terms(price, 가격) | 사람들이 이 값을 부르는 말 (BI·AI 가 찾는 동의어) |
업무 규칙도 같은 모양
| 기능 | 모양 | 예 (pet store) |
|---|---|---|
| 생명주기 단계 | 명령: 시작 -> 도착 한 줄 | ship: PLACED -> SHIPPED |
| 지울 수 있는 상태 | 같은 states: 안의 한 줄 | delete: CANCELLED |
| 업무 지표 | 이름: 식 @표시 -- 설명 한 줄 | revenue: sum(PurchaseOrder.total) where status != CANCELLED |
| 권한·소유 | meta: 줄의 표시 | @owner(customerId) @access(read=owner, create=user, cancel=owner) |
| 다른 컨텍스트의 타입·이벤트 | 컨텍스트:이름 | catalog:Product, on: [shop:OrderPlaced] |
DSL 이 잘못되면 생성기가 한 문장으로 무엇이 틀렸고 어떻게 고치는지 말합니다 - 예를 들어 states.status names SHIPED, which OrderStatus does not have (it has PLACED, SHIPPED, CANCELLED). 사람이든 AI 든 그 문장을 보고 바로 고칩니다.
최상위 섹션
| 섹션 | 뜻 | 레퍼런스 |
|---|---|---|
entity: |