Initial commit: WBX Spring Framework Core
Spring Boot 3.5.0 + Java 21 기반 엔터프라이즈 프레임워크 - Auth: JWT, MFA/TOTP, OAuth2 SSO, PasswordPolicy, LoginHistory - RBAC: Role-Permission, DeptScope, Redis 캐시 - Approval: Handler 패턴 결재 엔진 - Notification: SSE 실시간 알림 - File: Local/Azure Blob/AWS S3/GCP Storage - DataSource: Multi-DB 라우팅 (MySQL/PG/Oracle/MSSQL) - Admin: Thymeleaf 11화면 콘솔 - Compat: WBX FastAPI 호환 (에러/페이징) - Flyway: 4종 DBMS 마이그레이션 - Scripts: install.bat/sh, deploy-prod.sh - Docs: 설치가이드(OnPremise/Cloud), 개발자가이드 PDF Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
이 Commit은 다음에 포함되어 있습니다:
203
docs/01-project-structure.md
일반 파일
203
docs/01-project-structure.md
일반 파일
@@ -0,0 +1,203 @@
|
||||
# WBX Spring Core — 프로젝트 구조
|
||||
|
||||
```
|
||||
wbx-spring-core/
|
||||
├── build.gradle # Gradle 빌드 (Spring Boot 3.5, Java 21)
|
||||
├── settings.gradle
|
||||
├── gradlew / gradlew.bat # Gradle Wrapper (별도 설치 불필요)
|
||||
├── Dockerfile # 컨테이너 빌드 (Temurin 21 JRE Alpine)
|
||||
├── docker-compose.yml # 프로덕션 (App + MySQL + Redis)
|
||||
├── docker-compose-dev.yml # 로컬 개발 인프라 (MySQL/PG + Redis)
|
||||
├── .dockerignore
|
||||
├── .editorconfig # IDE 공통 코드 스타일
|
||||
├── .gitignore
|
||||
├── .github/workflows/ci.yml # GitHub Actions CI
|
||||
│
|
||||
├── docs/ # ★ 문서
|
||||
│ ├── 00-setup-guide.md # 설치/배포 가이드
|
||||
│ └── 01-project-structure.md # 프로젝트 구조 (본 문서)
|
||||
│
|
||||
├── src/main/java/kr/co/accura/wbx/spring/
|
||||
│ ├── WbxSpringCoreApplication.java # 메인 (@SpringBootApplication)
|
||||
│ ├── HealthController.java # GET /health
|
||||
│ │
|
||||
│ ├── auth/ # 인증 (18파일)
|
||||
│ │ ├── WbxUser.java # 사용자 Entity
|
||||
│ │ ├── WbxUserDetails.java # Spring Security UserDetails
|
||||
│ │ ├── WbxUserRepository.java
|
||||
│ │ ├── AuthController.java # login/register/me/refresh/logout/mfa
|
||||
│ │ ├── JwtProvider.java # JWT 발급/검증 (WBX 호환)
|
||||
│ │ ├── JwtFilter.java # Bearer Token 필터
|
||||
│ │ ├── ApiKeyFilter.java # X-API-Key 서버-서버 인증
|
||||
│ │ ├── PasswordPolicy.java # 비밀번호 규칙 검증
|
||||
│ │ ├── RefreshTokenService.java # Refresh Token 관리
|
||||
│ │ ├── WbxRefreshToken.java # Entity
|
||||
│ │ ├── RefreshTokenRepository.java
|
||||
│ │ ├── WbxLoginHistory.java # 로그인 이력 Entity
|
||||
│ │ ├── LoginHistoryRepository.java
|
||||
│ │ ├── MfaService.java # TOTP 생성/검증/백업코드
|
||||
│ │ ├── MfaController.java # MFA setup/verify/disable
|
||||
│ │ ├── WbxTotpSecret.java # TOTP 시크릿 Entity
|
||||
│ │ ├── TotpSecretRepository.java
|
||||
│ │ └── SsoSuccessHandler.java # Azure Entra OAuth2 성공 핸들러
|
||||
│ │
|
||||
│ ├── rbac/ # 권한 (7파일)
|
||||
│ │ ├── DeptScope.java # OWN/DEPT/COMPANY + toSpec()
|
||||
│ │ ├── PermissionEvaluator.java # @wbx.check()
|
||||
│ │ ├── WbxRole.java # 역할 Entity
|
||||
│ │ ├── WbxUserRole.java # 사용자-역할 매핑
|
||||
│ │ ├── WbxUserRoleRepository.java
|
||||
│ │ ├── RolePermission.java # 역할-권한
|
||||
│ │ └── RolePermissionRepository.java
|
||||
│ │
|
||||
│ ├── approval/ # 결재 엔진 (9파일)
|
||||
│ │ ├── ApprovalHandler.java # 핸들러 인터페이스
|
||||
│ │ ├── ApprovalHandlerRegistry.java # 자동 수집 Registry
|
||||
│ │ ├── UnifiedApprovalController.java # 통합 API
|
||||
│ │ ├── ApprovalCompletedEvent.java # Spring Event
|
||||
│ │ ├── ApprovalResult.java # 결과 DTO
|
||||
│ │ ├── ApprovalHistoryDto.java
|
||||
│ │ ├── ApprovalLineDto.java
|
||||
│ │ ├── ApprovalPendingDto.java
|
||||
│ │ └── ActionRequest.java
|
||||
│ │
|
||||
│ ├── notification/ # 알림 (4파일)
|
||||
│ │ ├── SseNotificationService.java # SSE 실시간 알림
|
||||
│ │ ├── NotificationController.java # /notifications/stream
|
||||
│ │ ├── Notification.java # Entity
|
||||
│ │ └── NotificationDto.java
|
||||
│ │
|
||||
│ ├── audit/ # 감사 로그 (3파일)
|
||||
│ │ ├── AuditLogService.java
|
||||
│ │ ├── WbxAuditLog.java
|
||||
│ │ └── AuditLogRepository.java
|
||||
│ │
|
||||
│ ├── file/ # 파일 스토리지 (6파일)
|
||||
│ │ ├── FileStorageService.java # 인터페이스 (upload/download/delete/getPresignedUrl)
|
||||
│ │ ├── LocalFileStorageService.java # 로컬 구현
|
||||
│ │ ├── AzureBlobStorageService.java # Azure Blob (SAS Token)
|
||||
│ │ ├── AwsS3StorageService.java # AWS S3
|
||||
│ │ ├── GcpStorageService.java # GCP Cloud Storage
|
||||
│ │ └── WbxFileUpload.java # Entity
|
||||
│ │
|
||||
│ ├── datasource/ # Multi-DataSource (4파일)
|
||||
│ │ ├── DataSource.java # @DataSource 어노테이션
|
||||
│ │ ├── WbxRoutingDataSource.java # ThreadLocal 기반 라우팅
|
||||
│ │ ├── DataSourceAspect.java # AOP
|
||||
│ │ └── MultiDataSourceConfig.java # Bean 설정
|
||||
│ │
|
||||
│ ├── compat/ # WBX 호환 (2파일)
|
||||
│ │ ├── WbxErrorHandler.java # detail 키 에러
|
||||
│ │ └── WbxPaginationConfig.java # skip/limit → Pageable
|
||||
│ │
|
||||
│ ├── config/ # 설정 (5파일)
|
||||
│ │ ├── WbxSpringProperties.java # wbx.spring.* 설정
|
||||
│ │ ├── SecurityAutoConfig.java # 2 FilterChain (Admin+API+SSO)
|
||||
│ │ ├── CorsAutoConfig.java
|
||||
│ │ ├── OpenApiConfig.java # Swagger
|
||||
│ │ └── WbxSystemConfig.java # K-V 설정 Entity
|
||||
│ │
|
||||
│ ├── common/ # 공통 (4파일)
|
||||
│ │ ├── BaseEntity.java # JPA Auditing
|
||||
│ │ ├── BusinessException.java
|
||||
│ │ ├── NotFoundException.java
|
||||
│ │ └── SecurityUtils.java
|
||||
│ │
|
||||
│ └── admin/ # 관리자 (6파일)
|
||||
│ ├── AdminViewController.java # Thymeleaf 11화면 + 25 엔드포인트
|
||||
│ ├── AdminLoginController.java # /admin/login
|
||||
│ ├── AdminUserDetailsService.java # 폼 로그인 인증
|
||||
│ ├── AdminController.java # Admin REST API
|
||||
│ ├── WbxRoleRepository.java
|
||||
│ └── WbxSystemConfigRepository.java
|
||||
│
|
||||
├── src/main/resources/
|
||||
│ ├── application.yml # 메인 설정 (로컬 개발)
|
||||
│ ├── application-prod.yml # 프로덕션 (Flyway, 로깅)
|
||||
│ ├── application-mysql.yml # MySQL 프로필
|
||||
│ ├── application-postgresql.yml # PostgreSQL 프로필
|
||||
│ ├── application-oracle.yml # Oracle 프로필
|
||||
│ ├── application-mssql.yml # MSSQL 프로필
|
||||
│ ├── application-azure.yml # Azure (SSO + Blob)
|
||||
│ ├── application-aws.yml # AWS (Cognito + S3)
|
||||
│ ├── application-test.yml # 테스트 (H2 인메모리)
|
||||
│ ├── templates/admin/ # Thymeleaf 템플릿 (12화면)
|
||||
│ │ ├── login.html
|
||||
│ │ ├── dashboard.html
|
||||
│ │ ├── users.html
|
||||
│ │ ├── user-detail.html
|
||||
│ │ ├── roles.html
|
||||
│ │ ├── role-detail.html
|
||||
│ │ ├── permissions.html
|
||||
│ │ ├── login-history.html
|
||||
│ │ ├── audit-logs.html
|
||||
│ │ ├── config.html
|
||||
│ │ ├── system-health.html
|
||||
│ │ └── fragments.html # 사이드바 공통
|
||||
│ ├── static/admin/css/admin.css # Admin UI 스타일
|
||||
│ └── db/migration/ # Flyway SQL (4종 DBMS)
|
||||
│ ├── common/
|
||||
│ │ ├── V001__seed_roles.sql
|
||||
│ │ └── V002__seed_system_config.sql
|
||||
│ ├── mysql/V001__create_tables.sql
|
||||
│ ├── postgresql/V001__create_tables.sql
|
||||
│ ├── oracle/V001__create_tables.sql
|
||||
│ └── mssql/V001__create_tables.sql
|
||||
│
|
||||
└── src/test/java/ # 테스트
|
||||
```
|
||||
|
||||
## 패키지별 요약
|
||||
|
||||
| 패키지 | 파일 | 핵심 |
|
||||
|--------|:----:|------|
|
||||
| auth | 18 | JWT, Login, Register, Refresh, Password, ApiKey, MFA/TOTP, SSO, LoginHistory |
|
||||
| rbac | 7 | DeptScope, PermissionEvaluator(@wbx), Role, UserRole, Permission |
|
||||
| approval | 9 | Handler(interface), Registry, UnifiedController, Event |
|
||||
| notification | 4 | SSE, Controller, Entity |
|
||||
| audit | 3 | AuditLogService, Entity |
|
||||
| file | 6 | StorageService(interface), Local, Azure, AWS, GCP |
|
||||
| datasource | 4 | @DataSource, RoutingDataSource, AOP, MultiConfig |
|
||||
| compat | 2 | ErrorHandler, Pagination |
|
||||
| config | 5 | Properties, Security, CORS, OpenAPI, SystemConfig |
|
||||
| common | 4 | BaseEntity, Exception, SecurityUtils |
|
||||
| admin | 6 | Thymeleaf Admin Console (12화면, 24 엔드포인트) |
|
||||
| **합계** | **70** | |
|
||||
|
||||
## DB 테이블 (11개, Hibernate 자동 생성 / Flyway 마이그레이션)
|
||||
|
||||
| 테이블 | Entity | 용도 |
|
||||
|--------|--------|------|
|
||||
| wbx_users | WbxUser | 사용자 (SSO, MFA 필드 포함) |
|
||||
| wbx_roles | WbxRole | 역할 |
|
||||
| wbx_user_roles | WbxUserRole | 사용자-역할 |
|
||||
| wbx_role_permissions | RolePermission | 역할-권한 (module+action+scope) |
|
||||
| wbx_refresh_tokens | WbxRefreshToken | JWT 갱신 토큰 |
|
||||
| wbx_totp_secrets | WbxTotpSecret | MFA TOTP 시크릿 (AES 암호화) |
|
||||
| wbx_login_history | WbxLoginHistory | 로그인 이력 |
|
||||
| wbx_notifications | Notification | 알림 |
|
||||
| wbx_audit_logs | WbxAuditLog | 감사 로그 |
|
||||
| wbx_file_uploads | WbxFileUpload | 파일 이력 |
|
||||
| wbx_system_config | WbxSystemConfig | 시스템 설정 (K-V) |
|
||||
|
||||
## REST API
|
||||
|
||||
| Method | Path | 인증 | 설명 |
|
||||
|--------|------|:---:|------|
|
||||
| GET | /health | - | 헬스 체크 |
|
||||
| POST | /api/auth/login | - | 로그인 → JWT (MFA 분기) |
|
||||
| POST | /api/auth/register | - | 회원가입 |
|
||||
| GET | /api/auth/me | JWT | 내 정보 |
|
||||
| PUT | /api/auth/password/change | JWT | 비밀번호 변경 |
|
||||
| POST | /api/auth/refresh | - | 토큰 갱신 |
|
||||
| POST | /api/auth/logout | JWT | 로그아웃 |
|
||||
| POST | /api/auth/mfa/verify | - | MFA 2단계 검증 |
|
||||
| POST | /api/auth/mfa/setup | JWT | MFA 설정 시작 (QR) |
|
||||
| POST | /api/auth/mfa/setup/verify | JWT | MFA 활성화 + 백업코드 |
|
||||
| DELETE | /api/auth/mfa | JWT | MFA 비활성화 |
|
||||
| POST | /api/auth/mfa/backup-verify | - | 백업코드 인증 |
|
||||
| GET | /api/notifications/stream | JWT | SSE 실시간 알림 |
|
||||
| GET | /api/notifications/unread-count | JWT | 미읽음 수 |
|
||||
| POST | /api/approvals/unified/action/{type}/{id}/approve | JWT | 결재 승인 |
|
||||
| POST | /api/approvals/unified/action/{type}/{id}/reject | JWT | 결재 반려 |
|
||||
| GET | /api/approvals/unified/pending | JWT | 결재 대기 |
|
||||
새 Issue에서 참조
사용자 차단