L2修了認定試験について
この試験はL2(一人前→設計者)の全10ヶ月間の学習内容を網羅する総合試験です。 API設計、データベース、認証、テスト、CI/CD、パフォーマンス、マイクロサービス、クラウド、セキュリティ、総合設計の全分野から出題されます。
合格基準
- 8問中7問以上正解で合格(80%以上)
- 合格するとL2修了認定となります
問題
Q1. [Month 1: API設計] RESTful APIでリソースのバージョニングを行う3つの方法のうち、最も推奨される方式とその理由は?
- A) URLパスにバージョンを含める(/api/v1/users)。URLが明示的で理解しやすいから
- B) クエリパラメータで指定(/api/users?version=1)。実装が簡単だから
- C) HTTPヘッダーで指定(Accept: application/vnd.api.v1+json)。HTTPの仕様に準拠しているから
- D) ボディにバージョンを含める。柔軟性が高いから
回答と解説
正解: A
URLパスバージョニング(/api/v1/users)が最も広く採用されています。URLが自己文書化的で、ブラウザやドキュメントから直接テスト可能です。ヘッダーバージョニング(C)はHTTP仕様に忠実ですが、ブラウザテストが難しいため、実務ではURLパスが推奨されます。
Q2. [Month 2: データベース] 第3正規形(3NF)のテーブルをあえて非正規化する場合として最も適切なのは?
- A) テーブル数を減らしたいとき
- B) 読み取り頻度が圧倒的に高く、JOINのコストが性能目標を超えるとき
- C) 開発者がJOINの書き方を知らないとき
- D) データ量が少ないとき
回答と解説
正解: B
非正規化は読み取りパフォーマンスの最適化手段です。読み書き比率が高く(例えば100
)、JOINによるレイテンシが性能目標を超える場合に、計測に基づいて判断します。データの冗長性というトレードオフを理解した上で適用します。Q3. [Month 3: 認証] OAuth 2.0の認可コードフロー(Authorization Code Flow)でPKCE(Proof Key for Code Exchange)を使う理由は?
- A) トークンの有効期限を延長するため
- B) SPAやモバイルアプリのようにClient Secretを安全に保持できない環境で認可コードの横取りを防ぐため
- C) リフレッシュトークンを不要にするため
- D) 認可サーバーの負荷を軽減するため
回答と解説
正解: B
PKCEは、認可コードフローにおいて認可コードの横取り攻撃を防ぐ仕組みです。SPAやモバイルアプリではClient Secretを安全に保持できないため、code_verifierとcode_challengeを使って認可コードの正当な所有者を検証します。
Q4. [Month 4-5: テスト・CI/CD] テストピラミッドで単体テストを最も多く書くべき理由と、Canaryデプロイの利点の組み合わせとして正しいのは?
- A) 単体テストは実行が速く網羅性が高い。Canaryは全ユーザーに段階的に展開する
- B) 単体テストは実行が速く網羅性が高い。Canaryは少数のユーザーで新バージョンを検証しリスクを最小化する
- C) 単体テストはUIの検証ができる。Canaryは即座に全ユーザーに展開する
- D) 単体テストは外部連携を検証できる。Canaryはデータベースを段階的に移行する
回答と解説
正解: B
単体テストは実行速度が速く、小さな単位で多くのケースを網羅できるためピラミッドの底辺に位置します。Canaryデプロイは全トラフィックの一部(例: 5%)を新バージョンに振り向け、問題がなければ徐々に拡大します。問題発覚時は即座にロールバックできます。
Q5. [Month 6: パフォーマンス] Cache-Asideパターンでキャッシュとデータベースの不整合が発生するシナリオと、その対策は?
- A) キャッシュの容量が足りない場合。対策はキャッシュ容量の増加
- B) DBを更新した後、キャッシュの無効化前に別のリクエストが古いキャッシュを読む場合。対策はイベント駆動のキャッシュ無効化 + 短いTTL
- C) キャッシュサーバーの再起動時。対策はキャッシュの永続化
- D) 読み取り専用のデータの場合。対策は不要
回答と解説
正解: B
Cache-Asideでは「DB更新→キャッシュ無効化」の間に別リクエストが古いキャッシュを読むレースコンディションが発生します。対策として、DB更新イベント(CDC)をトリガーにキャッシュを無効化し、TTLを短く(例: 60秒)設定して最悪ケースの不整合期間を制限します。
Q6. [Month 7: マイクロサービス] サービス間の同期通信(REST/gRPC)と非同期通信(メッセージキュー)の使い分けとして最も適切なのは?
- A) 全ての通信を同期にするのが安全
- B) 即座にレスポンスが必要な場合は同期、処理に時間がかかりレスポンスを待つ必要がない場合は非同期
- C) 全ての通信を非同期にすればパフォーマンスが向上する
- D) 重要なデータは同期、重要でないデータは非同期
回答と解説
正解: B
同期通信はクライアントが即座にレスポンスを必要とする場合(例: ユーザー認証、商品検索)に適します。非同期通信は処理に時間がかかりクライアントが結果を待つ必要がない場合(例: メール送信、レポート生成、注文後の在庫更新通知)に適します。
Q7. [Month 8-9: クラウド・セキュリティ] Infrastructure as Codeの利点と、ゼロトラストアーキテクチャの原則の組み合わせとして正しいのは?
- A) IaCはインフラの変更履歴を管理できる。ゼロトラストは内部ネットワークも信頼しない
- B) IaCはサーバーの性能を向上させる。ゼロトラストは外部からのアクセスのみ検証する
- C) IaCはコストを削減する。ゼロトラストはVPNがあれば十分
- D) IaCはデプロイを高速化する。ゼロトラストはファイアウォールのみで実現できる
回答と解説
正解: A
IaC(Terraform等)はインフラの構成をコードとして管理し、Git等でバージョン管理・変更履歴の追跡・レビューが可能です。ゼロトラストは「ネットワークの場所に関わらず全てのアクセスを検証する」原則で、内部ネットワークであっても認証・認可を要求します(mTLS、サービスメッシュ等)。
Q8. [Month 10: 総合設計] グローバルECプラットフォームで「決済の強い一貫性」と「グローバルな低レイテンシ」を両立するための設計アプローチとして最も適切なのは?
- A) 全リージョンで同期レプリケーションを行い完全な一貫性を保つ
- B) 決済データはリージョンシャーディングでオーナーリージョンに書き込み、商品データはRead Local/Write Globalで結果整合性を許容する
- C) 全データを1つのリージョンに集約してレイテンシはCDNで改善する
- D) 一貫性を諦めてLast Write Winsで全データを管理する
回答と解説
正解: B
データの種類によって一貫性要件が異なります。決済データは強い一貫性が必須なのでリージョンシャーディング(ユーザーの地域に基づくオーナーリージョン)で管理します。商品データは多少の遅延が許容されるのでRead Local/Write Globalで全リージョンにレプリカを配置し低レイテンシを実現します。全てを同期レプリケーション(A)にするとレイテンシが悪化し、1リージョン集約(C)は可用性のリスクが高すぎます。
結果
7問以上正解:合格 - L2修了認定
おめでとうございます。L2(一人前→設計者)の全カリキュラムを修了しました。
あなたは以下の能力を証明しました:
- RESTful API設計とバージョニング戦略
- データベース設計と正規化/非正規化のトレードオフ判断
- OAuth 2.0をはじめとする認証・認可の設計
- テスト戦略とCI/CDパイプラインの設計
- パフォーマンス最適化とキャッシュ戦略
- マイクロサービスの設計と通信パターンの選択
- クラウドネイティブ設計とセキュリティ設計
- 総合的なシステム設計とトレードオフ分析
次のステップ: L3(設計者→リーダー)に進む準備ができています。実務でのシステム設計経験を積みながら、L3カリキュラムに挑戦してください。
6問以下:不合格
L2の該当月の復習が必要です。各問題に対応する月のレッスンを復習し、再挑戦してください。
| 問題 | 対応月 | 復習内容 |
|---|---|---|
| Q1 | Month 1 | API設計とRESTful原則 |
| Q2 | Month 2 | データベース設計と正規化 |
| Q3 | Month 3 | 認証・認可のアーキテクチャ |
| Q4 | Month 4-5 | テスト戦略とCI/CD |
| Q5 | Month 6 | パフォーマンスとキャッシュ設計 |
| Q6 | Month 7 | マイクロサービスと分散システム |
| Q7 | Month 8-9 | クラウドネイティブとセキュリティ |
| Q8 | Month 10 | 総合システム設計 |
推定所要時間: 30分