릴리스 노트
모든 변경과 그 이유, 확인한 것, 관련 파일은 elasticore-history.md 에 있습니다 - 저장소와 모든 프로젝트의 blueprint/
폴더에. 릴리스: GitHub 릴리스 ·
Maven Central.
버전은 {major}.{minor}.{YYMMDD} 이고, 사전 릴리스는 -alpha{n}, -beta{n}, -rc{n} 이 붙어 같은 줄의 릴리스보다 앞에
정렬됩니다.
3.0.261022-rc1 - 릴리스 후보
에이전트에게 같은 요구사항(도서·회원·대출 API), 이어서 Pet Store 를 ElastiCORE 로 만들게 하고, Java 를 손으로 쓴 곳을
모두 살폈습니다. 이 릴리스는 그 자리를 DSL 로 메웁니다. 새 문법을 쓰지 않는 프로젝트의 출력은 바뀌지 않고, 2.x 생성기와
2.x 호환 jpa-springboot 번들도 그대로입니다(elcoreRulesCheck -Pstrict 150 MATCH / 0 DIFF / 2 ACCEPTED,
elcoreTreeCheck 0 differ / 0 missing / 0 extra).
DSL 의 새 기능
@readonly/@noinput은 서버가 정하는 값 - v3 번들에서 매퍼가 DTO 에서 엔티티로 쓰지 않고, DTO 의@NotNull/@NotBlank를 빼고,@Schema에READ_ONLY를 적습니다. 동작 변경: 그런 값을 DTO 에 넣어 저장하던 코드는 엔티티에 넣어야 합니다(beforeSave).@search(isnull)- 검색 속성<필드>Empty: Boolean:true는 빈 행,false는 값이 있는 행 (Java, Kotlin, TypeScript).@pattern('정규식', '메시지')- 컴파일되는@Pattern,@min처럼 값 다음에 메시지, TypeScript 클라이언트에도 같은 검사.\d하나는 DSL 경고.- 필수 참조(
post: Post!)는 저장 요청에서 키 필드(postPostId)를 요구하고 중첩 DTO 는 선택입니다. 중첩 객체만 보내던 클라이언트에는 동작 변경. - 엔티티 줄의
@signin이POST /signin,POST /signout,GET /me,me(), TypeScript 의signIn/signOut/me()를 생성합니다 - 본인과 관리자만 그 행을 바꿀 수 있고 애플리케이션에@signin엔티티가 하나일 때만 생성하며, 로그인 컬럼은 unique 가 됩니다. @default(now)를@readonly와 함께 "행을 만들 때의 시각" 으로 문서화.timestamp에서는Instant.now()를 쓰고,timestamp의 기본값은 DTO 에 들어가지 않습니다.
오류 응답
- 잘못된 상태의 생명주기 명령은 409(전에는 422), 없는 행을 가리키는 키는 저장 전에 확인되어 404(전에는 외래 키의
409) (
requireReferences- DDD·헥사고날 번들, 다른 애그리거트를 ID 로 참조할 때). ConflictException과 손으로 쓴 모든 거절이 메시지 코드를 받아 생성된 거절처럼 번역됩니다:BadRequestException,NotFoundException,ConflictException,ForbiddenException,NotSignedInException,PortCallException.PortCallException- 다른 시스템 호출이 실패하면 502 (code: upstream).RequestShapeErrors- Spring MVC 가 컨트롤러 전에 거절한 요청(깨진 JSON, 틀린 타입, 없는 파라미터, 404, 405, 406, 415)도code가 있는 problem+json 으로.- 생성된
findById·delete가 없는 행에 같은 모양의 404 본문으로 답합니다. - 한 응답은 한 언어:
Accept-Language, 아니면spring.web.locale, 서버 머신의 언어는 쓰지 않음. 한 도메인의 번역이 다른 도메인의 영어에 가려지지 않습니다.
생성기와 빌드
- v3 모드(헥사고날, DDD,
-Pv3, Kotlin)의@search(like)는 대소문자를 무시합니다.@search(%_%)는 구분. PUT /batch가 행마다update(dto)를 거칩니다.@restExclude(update)는batchUpdate를 함께 빼고, 헥사고날 유스케이스를 더는 깨뜨리지 않습니다.@minsize(1)은 목록이 없어도 400, 선택으로 담은 임베디드 값의 필수 필드는 NOT NULL 컬럼을 만들지 않음, 참조의@updatable(false)가 동작,@readonly소유자 필드가 소유자를 잃지 않음.- 읽지 못한 YAML 파일(
LOAD ERROR)이elcore3를 멈춥니다. DSL 경고는 한 번만 나옵니다. typescriptClient = true가 빌드와 함께elcore3ts를 돌립니다. 클라이언트가 모델보다 오래되면elcore3가 경고하고, 클라이언트는 서버의 모드를 따릅니다.- Ossie: 식은
OSSIE_SQL_2026, 서브쿼리@formula는ANSI_SQL.count(엔티티)는 키 컬럼을 셈. @EnableElastiCore가 자기 클래스의 패키지를 스캔해@SpringBootTest도 포트 빈을 받음. 포트 프록시를 감싼@Primary빈이 다시 동작, 2.x 앱의 컴포넌트 스캔이 오류 처리기를 가져오지 않음.- 세 차례 리뷰의 수정:
@ref나 cascade DTO 를 통한 로그인·비밀번호 쓰기 차단, 상속한 참조 확인, 다른 도메인의 값 객체, 2.x 와 같은@rollup판별값.
3.0.261020-alpha2
- 도메인에
Comment엔티티나 enum 이 있어도 컴파일됩니다(이름이 겹치면@Comment를 패키지까지 붙여 씀). - README 의 시작하기를 실제 작업 순서로, 그대로 복사해 동작하는
build.gradle, Spring Initializr·Spring Boot 3 안내.ReadmeQuickStartTest가 README 의 시작하기를 실제로 생성해 봅니다. - 3.0 은 첫 정식 릴리스부터 3년간
release/3.0에서 지원. Spring Boot 3 수정은 3.5.16 에서 테스트. - CI 가 2.x 기준 트리가 커밋된 그대로인지도 확인하고, 호환 검사를 실제로 비교하는 대로 설명합니다.
3.0.261015-alpha1 - 첫 공개
- 공개 저장소의 첫 릴리스:
elasticore-base,elasticore-springboot3,elasticore-springboot4, Gradle 플러그인io.elasticore가 Maven Central 에. - 생성 결과가 2.x 와 달라지는 2.x 결함 수정:
string(n)과@length(min=),@formula(컬럼 없음, DTO 에서 매핑하지 않음, 식의=), 같은 대상을 가리키는 두@ManyToOne의 검색 조건,@forceupdate매핑, 생성 서비스 테스트의 값. - 모든 운영체제에서 도메인과 모델 파일을 같은 순서로 읽음.
- 런타임 보안: multipart 호출의
ignoreSSL이 JVM 전체의 인증서 검사를 끄지 않음, 로그에서 인증 정보를 가림,IdUtils.newId가SecureRandom을 씀. - 런타임 POM 이 고정된 옛 버전 대신 Spring Boot 의 의존성 관리를 따름.
2.2 에서 올리기: 버전만 바꾸면 됩니다.