Spring Bootにおける「model」と「session」の違いとは?初心者向けにやさしく解説!

こんにちは。ゆうせいです。

今回は、Spring BootのWebアプリケーション開発における「model」と「session」の使い分けについて、エンジニアとしてスタートを切ったばかりのあなたに向けて、わかりやすく解説していきます。

「model」と「session」って似ているように感じるけど、実は役割がまったく違うんです。

たとえるなら…

  • modelは「今だけ使うカゴ」
  • sessionは「しばらく預かってもらえるロッカー」

そんなイメージで読み進めてみてくださいね!


Modelとは?リクエスト単位の「一時的なデータ入れ物」

Modelの役割

Spring Bootのコントローラーでは、よくこんなふうにModelを使います:

@GetMapping("/hello")
public String hello(Model model) {
    model.addAttribute("name", "Yusei");
    return "hello";
}

このときのmodelは、HTMLテンプレート(View)に一時的にデータを渡すためのものです。
つまり、1回のリクエスト・レスポンスの中だけで生きるデータの通い道なんですね。

特徴まとめ

項目内容
寿命リクエストが終わるまで
保存場所メモリ上(サーバー側)
使い道テンプレートにデータを渡す
例え買い物中のカゴ

Sessionとは?ユーザーごとに保持される「長持ちロッカー」

Sessionの役割

HttpSessionは、あるユーザーに属するデータを複数回のリクエストにまたがって保持するためのものです。

こんなコードで使われます:

@GetMapping("/login")
public String login(HttpSession session) {
    session.setAttribute("userName", "Yusei");
    return "home";
}

この例では、ログインしたユーザーの名前をセッションに入れています。これにより、別の画面に移動しても「ログインしたユーザーが誰か」を保持し続けられます。

特徴まとめ

項目内容
寿命ブラウザを閉じる or タイムアウトまで
保存場所サーバー側(ユーザーごと)
使い道ログイン情報、状態の保持など
例えロッカーに荷物を預けておく感覚

ModelとSession、いつどっちを使う?

基本の考え方

  • 一時的に画面にデータを渡したい ⇒ Model
  • ユーザーの状態や情報を保持したい ⇒ Session

具体例で考えてみよう

例1:商品の詳細ページを表示する

→ モデルで十分。

@GetMapping("/product")
public String productDetail(Model model) {
    model.addAttribute("product", productService.getProductById(1));
    return "productDetail";
}

例2:ログイン状態を管理したい

→ セッションの出番!

@PostMapping("/login")
public String login(@RequestParam String userId, HttpSession session) {
    User user = userService.findById(userId);
    session.setAttribute("loginUser", user);
    return "redirect:/mypage";
}


よくある勘違いと注意点

Modelに入れたデータは次の画面に残らない!

一見セッションみたいに感じるかもしれませんが、modelは次のリクエストでは消えてしまうため、ログイン情報やユーザーの状態管理には向きません。

セッションは使いすぎ注意!

セッションに大きなデータや無駄なデータを入れすぎると、メモリ負荷が増えてスケーラビリティが落ちることがあります。
必要最小限のデータだけにしておきましょう。


まとめ:このように使い分けよう!

目的適切な選択肢
一時的に画面にデータを表示したいModel
ユーザーのログイン状態を保持したいSession
ウィザード形式(ステップ入力)の情報保持Session

次に学ぶべきステップ!

ここまで理解できたら、次は以下のステップに進んでみましょう!

  • @SessionAttributesの使い方と違い
  • クッキー(Cookie)との違い
  • セッション管理のセキュリティベストプラクティス
  • フロントエンドとのデータ受け渡し(ThymeleafやReact)

もし「Sessionがうまく消えない」といったトラブルがあれば、session.invalidate()を試すなど、セッションのライフサイクルにも注目してみてください。

他にもSpring Bootについて知りたいことがあれば、気軽に聞いてくださいね!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。