Spring Boot 開発パターン
スケーラブルで本番グレードのサービスのためのSpring BootアーキテクチャとAPIパターン。
REST API構造
リポジトリパターン(Spring Data JPA)
トランザクション付きサービスレイヤー
DTOと検証
例外ハンドリング
キャッシング
構成クラスで@EnableCachingが必要です。
非同期処理
構成クラスで@EnableAsyncが必要です。
ロギング(SLF4J)
ミドルウェア / フィルター
ページネーションとソート
エラー回復力のある外部呼び出し
レート制限(Filter + Bucket4j)
セキュリティノート: X-Forwarded-Forヘッダーはデフォルトでは信頼できません。クライアントがそれを偽装できるためです。
転送ヘッダーは次の場合のみ使用してください:
- アプリが信頼できるリバースプロキシ(nginx、AWS ALBなど)の背後にある
ForwardedHeaderFilterをBeanとして登録済み- application propertiesで
server.forward-headers-strategy=NATIVEまたはFRAMEWORKを設定済み - プロキシが
X-Forwarded-Forヘッダーを上書き(追加ではなく)するよう設定済み
ForwardedHeaderFilterが適切に構成されている場合、request.getRemoteAddr()は転送ヘッダーから正しいクライアントIPを自動的に返します。この構成がない場合は、request.getRemoteAddr()を直接使用してください。これは直接接続IPを返し、唯一信頼できる値です。
バックグラウンドジョブ
Springの@Scheduledを使用するか、キュー(Kafka、SQS、RabbitMQなど)と統合します。ハンドラーをべき等かつ観測可能に保ちます。
可観測性
- 構造化ロギング(JSON)via Logbackエンコーダー
- メトリクス: Micrometer + Prometheus/OTel
- トレーシング: Micrometer TracingとOpenTelemetryまたはBraveバックエンド
本番デフォルト
- コンストラクタインジェクションを優先、フィールドインジェクションを避ける
- RFC 7807エラーのために
spring.mvc.problemdetails.enabled=trueを有効化(Spring Boot 3+) - ワークロードに応じてHikariCPプールサイズを構成、タイムアウトを設定
- クエリに
@Transactional(readOnly = true)を使用 @NonNullとOptionalで適切にnull安全性を強制
覚えておいてください: コントローラーは薄く、サービスは焦点を絞り、リポジトリはシンプルに、エラーは集中的に処理します。保守性とテスト可能性のために最適化してください。


