본문으로 건너뛰기
ElastiCORE 3.0 은 릴리스 후보(RC)입니다: Maven Central 의 3.0.261022-rc1. 2.2 라인 프로젝트는 2.2 문서를 보세요.
버전: 3.0

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
5YAML 섹션이 개념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:엔티티와 값 객체. 엔티티 안에 fields:, states:, commands:엔티티
dto:직접 정의하는 DTODTO
enumeration:코드와 라벨이 있는 열거형열거형
repository:리포지터리에 더하는 쿼리 메서드리포지터리
port:다른 시스템 호출 (HTTP, SQL, gRPC)포트
domainService:, processManager:어느 애그리거트에도 속하지 않는 연산, 이벤트에 반응하는 다음 단계 (DDD 번들)파생 값과 이벤트
metrics:Ossie 로 내보낼 업무 지표업무 지표

파일: src/main/resources/blueprint/<도메인>/model/*.yml - 종류별로(entity.yml, enum.yml, dto.yml ...) 나누는 것을 권합니다. 설정은 blueprint/<도메인>/env.yml.

YAML 에서 걸리는 곳

설명에 : 이 들어가면(-- 주문한 사람: 로그인한 회원) 파일이 깨지고, # 뒤는 주석으로 잘립니다. -- 주문한 사람, 로그인한 회원 처럼 쓰거나 줄 전체를 따옴표로 감쌉니다. 읽지 못한 파일은 * LOAD ERROR: <파일> 로 나오고, 규칙 엔진에서는 빌드를 멈춥니다.