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

프로젝트 구조와 파일 소유권

blueprint​

src/main/resources/blueprint/
shop/ 도메인 하나 (바운디드 컨텍스트 하나)
env.yml 설정: 도메인 이름, 패키지, 생성 옵션
model/entity.yml 엔티티 - 내가 쓰는 부분
model/enum.yml 열거형
model/dto.yml 직접 정의하는 DTO (선택)
model/metrics.yml 업무 지표 (선택)
elasticore-*-guide.md 지금 쓰는 ElastiCORE 버전의 가이드, 빌드할 때마다 복사됨
schema.yml 생성물
semantic_model.yml ossie-export 를 켜면 생성
context-map.md 어느 도메인이든 context: 를 적으면 생성

가이드(한국어)가 빌드할 때마다 blueprint/ 로 복사되므로, 개발자나 AI 도구는 프로젝트가 쓰는 바로 그 버전의 문법을 읽습니다.

생성 코드​

namespace: base: com.acme.shop 이면 헥사고날 배치가 이렇게 채워집니다:

패키지담는 것
domain.model엔티티, enum, 값 객체, 불변식 리스너
domain.event / domain.service / domain.repository도메인 이벤트 / 도메인 서비스 / 리포지터리 포트
applicationXxxCoreService (다시 생성)와 XxxService (내 것)
application.dtoDTO, 검색 DTO, 매퍼
application.port.in / application.port.out유스케이스(인바운드 포트) / 조회 포트와 port: 인터페이스
adapter.in.webREST 컨트롤러와 도메인의 XxxApiErrors
infrastructure.persistenceSpring Data 리포지터리와 리포지터리 어댑터

base 옆에 함께 적은 키는 그 값이 우선합니다. 레이어드·DDD·헥사고날 프리셋은 아키텍처에, 네임스페이스 키 전체는 env.yml 설정에 있습니다.

파일의 주인 - 첫 줄을 읽으세요​

생성기는 파일의 첫 줄들로 그 파일을 어떻게 다룰지 정합니다.

파일 맨 위주인다음 생성에서
//ecd:... 만생성기DSL 에 맞춰 다시 씀. 누가 고쳤으면 건너뛰고(SKIP(user-modified; -Pforce to overwrite)) 그 뒤로 DSL 을 따르지 않음
//ecd:... 와 보존 블록 // !---------- ... // ------------!생성기, 블록만 제외블록 안의 코드는 다시 생성해도 남음
//ecd:... 다음 줄에 // Initially generated by ElastiCORE; no longer managed - do not remove this line.나 (한 번만 생성)고친 적 없음: DSL 을 따라 다시 생성(REGENERATED(owned, never edited)). 고침: 내 것, 그대로 둠(SKIP(user-owned))
ElastiCORE 머리말 없음나그대로 둠 (생성 파일 자리에 있으면 SKIP(no ElastiCORE header - yours))

첫 줄은 이렇게 생겼습니다:

//ecd:914651935H20261002205859_V3.0
// Initially generated by ElastiCORE; no longer managed - do not remove this line.
package io.elasticore.sample.petstore.domain.model;

//ecd: 줄에는 내용 해시가 있습니다. 손으로 고친 파일은 그 해시로 알아보고 덮어쓰지 않습니다.

한 번만 생성되는 파일​

한 번 생성, 그 뒤로 내 것매번 다시 생성
XxxService (확장 서비스)XxxCoreService
XxxControllerDTO, 검색 DTO, 매퍼, Q
XxxApiErrors (오류 응답)엔티티, XxxBase, 이벤트, 불변식
나뉜 DDD 루트의 행위 클래스 Xxx리포지터리, 포트, 어댑터, 유스케이스
XxxDomainService, XxxProcessManager, XxxFactoryXxxDomainServiceBase, XxxProcessManagerBase

//ecd: 줄 없이 생성되고 매번 다시 쓰이는 파일 - 고치지 마세요: blueprint/schema.yml, blueprint/semantic_model.yml, blueprint/context-map.md, 복사된 가이드, src/main/resources/i18n/<도메인>-messages.properties (번역은 그 옆에 <도메인>-messages_ko.properties 같은 내 파일로).

내 파일이 된 뒤에도 생성기가 해 주는 일​

  • 확장 서비스의 생성자 - 코어 서비스의 생성자가 바뀌면(예: 헥사고날로 전환) 생성자 말고 다른 코드가 없는 파일은 다시 쓰고, 있으면 새 super(...) 를 경고로 알려 줍니다.
  • 나뉜 루트의 테이블 어노테이션(@Entity, @Table, @DynamicUpdate, @Audited)은 DSL 에 맞춰 바꾸고, 내가 붙인 다른 어노테이션과 본문은 그대로 둡니다.
  • DSL 이 더는 만들지 않는 파일은 모든 도메인을 생성한 실행의 끝에서 지웁니다(REMOVED(the DSL no longer produces it)). 아무도 고치지 않은 파일만 지우고, 고친 파일은 경고와 함께 남깁니다.

다시 생성하는 법은 안전하게 다시 생성하기에 있습니다.