アーキテクチャの概要
このプロジェクトは、求職者と雇用主のための堅牢なマーケットプレイスを代表する、モダンでコンテナ化されたマルチティア・アプリケーションとして構築されています。
- バックエンド: Java 17とSpring Boot 3.4.5。階層化されたモノリシック・アーキテクチャ(コントローラー、サービス、リポジトリ、DTO)に従い、ステートレス認証のためにJWT (JSON Web Tokens) を用いたSpring Securityを利用しています。
- フロントエンド: App Routerを使用したNext.js 15.3で構築され、厳密に型指定されたTypeScriptで記述されています。迅速でアクセスしやすいコンポーネント設計のためにChakra UIでスタイル設定されています。
- データベース: Spring Data JPAを介して統合されたPostgreSQL 15。Hibernateのネイティブな自動生成に依存するのではなく、堅牢なデータベース移行管理のためにFlywayが使用されています。
- インフラストラクチャ: Docker Composeを使用して完全にDocker化されており、明示的な依存関係と永続ボリューム・マッピングを使用して、フロントエンド、バックエンド、データベースをオーケストレーションします。
解決されたエンジニアリング課題
究極の速度(1日での構築)
機能的でデュアルペルソナなマーケットプレイスを24時間で構築するには、非常に規律のある技術的選択が必要でした。成熟したフレームワーク(Spring Boot + Next.js)やJavaライブラリ(@Builderや@Dataによるボイラープレートを削減するLombokなど)を使用することで、セットアップよりも純粋にビジネスロジックに集中することができました。
デュアルペルソナの役割の分離
単一のプラットフォームで2つの異なるユーザージャーニーを管理することは、複雑な状態(ステート)の問題です。バックエンドは、@PreAuthorizeロールベース・アクセス制御(RBAC)を介してこれを強制します。クライアント側では、Next.jsフロントエンドがダッシュボード(/dashboard/page.tsx)を動的に切り替え、ユーザーのuserTypeに基づいて異なるクイックアクション(例:「求人を投稿する」と「求人を閲覧する」)をレンダリングします。
ステートレスAPIセキュリティ
従来のサーバー・セッションからの脱却には、厳密なJWTアーキテクチャが必要でした。フロントエンドは、Axiosインターセプター(src/app/lib/axios.ts)を使用してこれをエレガントに管理します。このインターセプターは、localStorageからのBearerトークンをすべての送信APIリクエストに自動的に添付し、Next.jsクライアントとJava API間の安全で完全にステートレスな対話を保証します。
ローカル環境のオーケストレーション
スタック全体が異なるマシン間で均一に機能することを保証することは重要です。docker-compose.ymlは、depends_onを使用して起動順序を巧みに処理し、環境変数の注入を管理し、Postgres用の永続ボリュームをプロビジョニングします。これにより、ローカル・セットアップは単純な1つのコマンド・プロセス(docker compose up --build)になります。
成果
- 記録的な速さでの機能的なMVP: 求人作成、応募者追跡、セキュアな認証を備えた実用的なプロトタイプをわずか1日で提供することに成功しました。
- スケーラブルな基盤: 関心の厳格な分離(フロントエンドUIとREST API)とステートレスなJWTアーキテクチャにより、システムは即時の水平スケーリングとクラウド展開への準備が整っています。