ありがとうございます。
ここからは 第27段階:運用基盤・システム管理設計 に入ります。
ここまでの設計で教材管理システムの業務機能はほぼ揃いました。第27段階では、「実際に企業で運用できるシステム」にするための管理機能・運用基盤を設計します。
今回は、これまでの設計をさらに一段進め、Spring Boot + JPA + MyBatis の長所を活かした構成にします。
第27段階 全体構成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | |
1. システム管理メニュー
管理者専用メニューを追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
今回は マルチテナント化を考慮 し、organizations を追加しています。将来、企業ごとの教材管理にも対応しやすくなります。
2. Organization(組織)設計
将来的に
1 2 3 | |
で教材を分離できます。
Entity
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
Userとの関係
1 2 3 4 5 6 7 8 9 10 11 | |
これにより、
1 2 3 4 5 6 7 | |
を完全に分離できます。
3. システム設定
以前設計した application.yml の一部をDB管理できるようにします。
SystemSetting
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
例
| Key | Value |
|---|---|
| site.name | 教材管理システム |
| mail.from | noreply@example.com |
| upload.max-size | 524288000 |
| video.provider | R2 |
| markdown.theme | github |
4. マスタ管理
今回のシステムではマスタが増えていきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
おすすめは 共通マスタ方式 です。
1 2 3 | |
で管理すると画面を共通化できます。
MasterType
1 2 3 4 5 6 7 | |
MasterItem
1 2 3 4 5 6 7 8 9 | |
5. Scheduler
Spring Schedulerを利用します。
対象
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 | |
その他
1 2 3 4 5 6 7 8 9 10 11 | |
6. キャッシュ
キャッシュ対象
1 2 3 4 5 6 7 8 9 10 11 | |
Spring Cache
1 2 3 4 5 | |
例
1 2 3 4 | |
7. キャッシュ更新
教材更新時
1 2 3 4 5 6 7 8 9 | |
1 | |
8. Spring Security強化
ここまで
1 2 3 4 5 | |
でしたが、
さらに
1 | |
を追加します。
例
1 2 3 4 5 6 7 8 9 10 11 | |
Role
1 2 3 4 5 6 7 | |
Admin
1 2 3 4 5 6 7 | |
9. 権限制御
Controller
1 | |
Service
1 2 3 4 5 | |
10. パフォーマンス設計
JPA
1 | |
MyBatis
1 2 3 4 5 6 7 | |
例
1 2 3 4 5 | |
教材保存
↓
1 | |
11. Fetch戦略
基本ルール
1 2 3 | |
必要な時だけ
1 | |
または
1 | |
禁止
1 | |
12. N+1対策
悪い例
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1000回SQL
改善
1 2 3 4 5 | |
13. Index設計
例
1 2 3 4 5 6 7 8 9 | |
Lesson
1 2 3 | |
Enrollment
1 2 3 | |
14. Actuator
追加
1 2 3 4 5 6 7 8 9 | |
URL
1 | |
15. Micrometer
監視
1 2 3 4 5 6 7 8 9 10 11 | |
Grafana
Prometheus
と接続可能です。
16. Docker構成
1 2 3 4 5 6 7 8 9 10 11 | |
本番
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Redisは以下の用途で活用できます。
-
Spring Cache
-
セッション管理(Spring Session)
-
レート制限
-
一時的なジョブ状態管理
17. バックアップ
対象
1 2 3 4 5 6 7 | |
毎日
1 2 3 4 5 6 7 8 9 | |
18. 監査画面
1 2 3 4 5 6 7 8 9 10 11 | |
検索
1 2 3 4 5 6 7 | |
19. システム情報画面
1 2 3 4 5 6 7 8 9 10 11 | |
これにより、運用担当者が稼働中のバージョンを容易に確認できます。
20. システム運用で追加を推奨するテーブル
ここまでの設計に加え、運用面を考えると以下のテーブルを追加するとより実践的になります。
| テーブル | 用途 |
|---|---|
| login_histories | ログイン履歴(成功・失敗) |
| password_reset_tokens | パスワード再設定 |
| email_verifications | メールアドレス認証 |
| scheduled_jobs | ジョブ実行履歴 |
| system_settings | システム設定 |
| notifications | システム通知 |
| audit_logs | 監査ログ(前段階で設計済み) |
21. 推奨するパッケージ構成(最終形)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
機能単位(Feature Package) を採用することで、各機能の entity / repository / service / controller / mapper / dto / form を同じパッケージ内にまとめられ、保守性が高くなります。
第27段階終了時点
この時点で、以下が揃います。
-
✅ マルチテナント化を見据えた組織設計
-
✅ システム設定管理
-
✅ 共通マスタ管理
-
✅ Schedulerによる定期処理
-
✅ Spring Cache + Redis対応
-
✅ 権限(Role + Permission)の詳細制御
-
✅ JPA / MyBatis の役割分担の最適化
-
✅ N+1対策・インデックス設計
-
✅ Actuator・Micrometerによる監視
-
✅ Docker・Redis・Cloudflare R2を含めた本番構成
-
✅ 運用管理画面・バックアップ・監査基盤
次の第28段階(最終アーキテクチャ設計)
ここまでで個々の機能設計はほぼ完成しています。次の段階では、プロジェクト全体の最終設計として以下をまとめます。
-
ディレクトリ構成(Feature Package構成)
-
全テーブルER図
-
全クラス図
-
Spring Security最終構成
-
JPA・MyBatisの責務一覧
-
画面遷移図
-
シーケンス図(教材作成・承認・受講)
-
CI/CD・テスト戦略(JUnit・Testcontainers・Flyway・GitHub Actions)
-
将来的なREST API化・マイクロサービス化を見据えた拡張方針
この段階で、実装を開始できるレベルの設計書が完成します。