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

튜토리얼: Pet Store

Pet Store 는 Java EE 7 예제(agoncal-application-petstore-ee7)의 YAPS 쇼핑몰을 ElastiCORE 3.0 + Spring Boot 4, 헥사고날 Java 로 다시 만든 것입니다. ElastiCORE 저장소의 예제 모듈로, 생성기가 바뀔 때마다 생성·컴파일·실행되고, 공개 데모이기도 합니다.

써 보기petstore.elasticore.io - user / user, 관리자는 xsko / xsko. 서버가 다시 시작하면 데이터가 초기화됩니다
소스elasticore-project/elasticore-sample-petstore
DSLsrc/main/resources/blueprint/petstore/ - env.yml, model/entity.yml, enum.yml, dto.yml, metrics.yml
API 문서/swagger-ui.html
DSL 과 코드를 나란히/dsl-guide.html (쇼핑몰 헤더의 "DSL Guide") - 업무 단위로 규칙, DSL, 확인한 응답, 손으로 쓴 것, DSL 로 못 하는 것

DSL 이 말하는 것​

업무 규칙DSL
카탈로그는 누구나 보고 관리자만 고친다@access(read=public)
주문은 로그인한 고객의 것, 조회·취소는 본인, 배송은 관리자@owner(customerId) @access(read=owner, create=user, cancel=owner)
가입자는 스스로 관리자가 될 수 없다role: UserRole @access(admin)
비밀번호는 해시로만, 로그인password: string(255)! @password, login: ... @login, @signin
주문은 접수 -> 배송 / 취소, 배송 후엔 취소 불가states: status: { initial: PLACED, ship: PLACED -> SHIPPED, cancel: PLACED -> CANCELLED }
줄의 단가는 주문 당시 가격unitCost: money(10.2) @snapshot(item.unitCost)
소계·합계@compute(unitCost * quantity), @compute(sum(lines.subTotal))
카드번호는 응답에 없다, 주소 필수값은 400값 객체의 @writeonly, !
집 주소·카드는 필수homeAddress: Address! @Embedded, creditCard: CreditCard! @Embedded

손으로 쓴 것​

파일내용
domain/model/PurchaseOrder.javaVAT·할인 정책(설정 값), 기본 배송지 = 집 주소
application/PurchaseOrderService.java정책 값 주입, 처음 저장될 때 place()
adapter/in/web/shop/AccountController.java가입하고 바로 로그인 (로그인·로그아웃·me 는 생성됨)
DemoAccounts.java, PetstoreApplication.java데모 계정, 빈 2개

나머지 - 엔티티·DTO·매퍼·리포지터리·서비스·컨트롤러·권한 검사·상태 전이·가격 계산·TS 클라이언트 - 는 생성됩니다. 화면(web/src)은 생성된 TS 클라이언트의 라벨(OrderStatusLabel), 검증(validateAddress), 서버 오류 (ApiError.fieldErrors), 버튼 판단(canCancel)을 씁니다.

실행하기​

ElastiCORE 저장소를 받아서:

./gradlew :elasticore-project:elasticore-sample-petstore:test       # MockMvc 흐름 테스트
./gradlew :elasticore-project:elasticore-sample-petstore:webBuild # 화면 (Node.js 필요)
./gradlew :elasticore-project:elasticore-sample-petstore:run # http://localhost:8080

로컬의 데모 계정은 user / user, admin / admin 입니다(petstore.demo-accounts=false 로 끔). DB 는 메모리 H2 이고 시작할 때 data.sql 로 채워집니다.

단계​

  1. 카탈로그 - 분류, 상품, 품목: 공개 조회, 검색, 정렬, 규칙이 있는 금액.
  2. 로그인하는 고객 - 값 객체, @password, @signin, 관리자만 정하는 역할, 가입.
  3. 주문 - 생명주기, 기록되고 합산되는 가격, 상점의 정책.
  4. 백오피스, 이벤트, 지표, 메시지 - 배송, 이벤트, BI 용 지표, 한국어 오류 메시지, 화면.
  5. 생성된 프로젝트 키워 가기 - 완성된 쇼핑몰에 변경 요청: 재고, 리뷰, 택배사 API, BI 지표 - Claude Code 와 에이전트 키트로 측정.

예제의 빌드 파일(일부):

build.gradle (elasticore-sample-petstore)
elasticore {
architecture = 'hexagonal'
language = 'java'
// Read off the Spring Boot Gradle plugin in a project; this build's
// Gradle predates the Boot 4 plugin, so it is said here.
springBoot = '4'
// The model as an Apache Ossie semantic model too: blueprint/semantic_model.yml
rules = ['ossie-export']
}