이 프로젝트의 주요 변경 사항을 기록합니다.
형식은 Keep a Changelog를 따르며, 유의적 버전(SemVer)을 준수합니다.
라이브러리 메이저는 Spring Boot 메이저와 정렬됩니다: 4.x.y는 Spring Boot 4.x를 대상으로 합니다.
English: CHANGELOG.md
첫 공개 릴리스.
v* 태그 시 자동 릴리스).
release.yml이 아티팩트를 배포하고 GitHub Release를 생성합니다.devslab.kit.cache.type = in-memory / redis /
none. Redis 백엔드가 JSON 직렬화를 직접 책임지므로 (Serializable 불필요, 직렬화기
설정 불필요) 사용자별 메뉴 캐시도 자체 맵 대신 이 공유 캐시 매니저를 사용합니다.devslab.kit.bootstrap.*(기본 OFF)가
첫 부팅 시 테넌트, 전체 admin.* 권한 세트를 가진 PLATFORM_ADMIN 역할, 관리자 사용자 1명을
멱등하게 생성합니다. 빈 비밀번호는 강력한 랜덤 비밀번호를 생성해 한 번 로깅하며, prod 안전장치는
prod/production 프로파일에서 약한 비밀번호를 거부합니다.must_change_password 플래그(V11)를 CurrentUser,
JWT 클레임, 로그인 응답으로 노출합니다. 셀프 서비스 POST /admin/api/v1/auth/change-password가
이전 비밀번호를 검증하고 새 비밀번호를 설정한 뒤 플래그를 지우고 토큰을 재발급합니다.GET /admin/api/v1/bootstrap/status가
{ initialized: boolean }을 반환합니다. 향후 가이드형 최초 실행 / 설정 마법사의 분기점입니다
(ADR 0001 §6).Clock을 사용하도록 수정 — JjwtAuthTokenService.parse()가 토큰 만료를
주입된 시계가 아니라 실제 시스템 시계로 검증하고 있었습니다. 이로 인해 고정 시계로는 검증을
테스트할 수 없었고 issue()와 비대칭이었습니다. 운영 동작은 그대로입니다 (런타임은 양쪽 모두
Clock.systemUTC() 사용).sample-app이 SampleSeedRunner를 끄고 스타터의 devslab.kit.bootstrap.* 러너로
전환했습니다 (로컬 개발 형태: admin/admin, must-change-password=false).kr.devslab.kit.devslab-kit-core, -{identity,access,tenant,menu,audit}-{api,core},
-autoconfigure, -spring-boot-starter, -sample-app.UserId, TenantId, RoleId, PermissionId, MenuId, PublicId,
DevslabKitException.TenantContext, TenantContextHolder, TenantResolver, TenantMode (api) +
DefaultTenantContextHolder, FixedTenantResolver (core). AutoConfig override 패턴을
증명하는 데 사용한, 완전히 배선된 첫 수직 슬라이스.CurrentUser, CurrentUserProvider, UserStatus, LoginCommand,
LoginResult, UserAccountView, PasswordHasher, LoginFailureReason,
AccountLoginException, LoginSucceededEvent, LoginFailedEvent,
UserAccountCreatedEvent.
Identity (core): PlatformUserAccountEntity + JpaPlatformUserAccountRepository,
BCryptPasswordHasher, LocalLoginService, PlatformUserAccountService,
DefaultCurrentUserProvider, V1__platform_user_account.sql.Permission, Role, PermissionChecker, PermissionDeniedException.
Access (core): Platform{Role,Permission,UserRole,RolePermission}Entity + Jpa 리포지토리,
UserRoleService, RolePermissionService, DefaultPermissionChecker, V2__platform_access.sql.MenuItem, MenuTree, MenuProvider.
Menu (core): PlatformMenuEntity + JpaPlatformMenuRepository, MenuTreeBuilder,
PermissionBasedMenuFilter, DefaultMenuProvider, V3__platform_menu.sql.AuditEvent, AuditActor, AuditAction, AuditTarget, AuditEventPublisher.
Audit (core): PlatformAuditLogEntity + JpaPlatformAuditLogRepository, AuditLogService
(Jackson 직렬화 메타데이터), DefaultAuditEventPublisher, V4__platform_audit_log.sql.DevslabKitProperties (devslab.kit.* 접두사) + @ConditionalOnMissingBean override를 갖춘
5개 AutoConfiguration: Tenant, Identity, Access, Menu, Audit.devslab-kit-sample-app이 8개 스타터 빈(TenantResolver, TenantContextHolder,
CurrentUserProvider, PasswordHasher, LocalLoginService, PermissionChecker,
MenuProvider, AuditEventPublisher)과 BCrypt 왕복을 스모크 테스트합니다.