inflearn logo
知識共有
inflearn logo

[Lv2] 現役開発者のJPA完全征服 - 永続性コンテキストから実務パターンまで

JdbcTemplateでSQLを書いたことがありますよね?カラムが一つ変わるたびにSQLとRowMapperを同時に直さなければならず、ため息をついた経験が皆さんにもあるはずです。 この講義はその苦痛から出発します。 純粋なJDBCでSELECTを一つ書くと35行になります。Connectionを開き、PreparedStatementを作り、ResultSetを回し、close()を一つでも忘れるとサーバーがダウンします。この地獄を直接タイピングした後にJPAのsave()一行に出会えば、「だからJPAを使うんだな」ということが頭ではなく手で実感できるはずです。

60名 が受講中です。

難易度 初級

受講期間 無制限

JPA
JPA
spring-jpa
spring-jpa
Java
Java
Spring
Spring
Spring Boot
Spring Boot
JPA
JPA
spring-jpa
spring-jpa
Java
Java
Spring
Spring
Spring Boot
Spring Boot

受講後に得られること

  • 1次キャッシュ、変更検知(ダーティチェック)、書き込み遅延まで、経験に基づいてスラスラと説明できる能力

  • JDBC 35行の苦痛を直接経験し、JPAがなぜ必要なのかを実感した経験

  • N+1問題が発生した際にログを見て原因を特定し、Fetch Join / @EntityGraph / @BatchSizeの中から状況に適した解決策を選択できる実務的なデバッグ能力

  • QueryDSLのBooleanExpressionを用いてif文のスパゲッティコードなしにクリーンな動的クエリを設計し、Custom RepositoryパターンでJPAとQueryDSLを実務標準の構造として統合するスキル

  • エンティティ設計から継承関係マッピング、BaseEntity(Auditing)、埋め込みタイプまで — 実務プロジェクトを開始する際、「テーブル設計をどうしよう?」ではなく「このパターンで行こう」と判断できる設計センス

スプリング、このように学ぶと面接で落ちます your interview

Lv.1でSpring Bootを使ってAPIを作成しました。

JdbcTemplateでSQLを書き、RowMapperで結果をマッピングして... お、CRUDが動くぞ!... Oh, the CRUD is working!

でも、コードを見るとこんな風に思います。

"なぜSQLをJavaコードの中に文字列として書かなければならないのか?"

"カラムが一つ追加されるたびに、SQLとRowMapperを全部直さなきゃいけないんだな..."

"これ、テーブルが10個になったらどうすればいいんだろう?"

そして面接でこのように聞かれます。

"DBを保存する時、JdbcTemplate以外の方法はありませんか?"

"うーん…JPAというのがあると聞いたことはありますが…正直使ったことがなくて…"

落ちます。

"JPAの永続性コンテキストとは何ですか?"

"...えっ?"

SQLを直接書いた経験はありますが、その苦痛を解決する技術は知りません。


ほとんどのJPA講義がどう使うかだけを教えます。

"JPAはORMです。@Entityを付けてsave()を使えばいいです。"

真似すれば動きます。ですが、面接官は「なぜ」を問います。

"JPAをなぜ使うのですか?"

"永続性コンテキストの動作原理を説明してください。"

"N+1問題をどのように解決しましたか?"

Howだけを学んだ人は、このように答えます。

"JPAは…ORMでして…save()を使えば保存されます…"

それでおしまいです。これ以上言うことはありません。

JPAなしでやったことがないからです。JDBCで35行書いてみたことがないから、JPAがなぜ必要なのか分からないのです。


なので、この講義は「苦痛」を先に与えます

JPAを正しく学ぶには、save()を先に学んではいけません。JDBCで35行書く苦しみを、まず経験しなければならないのです。

純粋なJDBCでSELECTを一つ実行すると35行になります。Connectionを開き、PreparedStatementを作成し、ResultSetを回して、close()を忘れるとサーバーがダウンする…これを直接タイピングするのです。

この苦痛を味わった後でJPAのsave()一行を見るとどうでしょうか?しびれます。

この瞬間、こうなります。"あ... だからJPAを使うんだな。だから永続性コンテキストが必要なんだな。"

N+1も同じです。会員10人を照会したのにクエリが11個も飛んでいく地獄を直接経験した後、Fetch Join一行で1個に減るのを見れば、その原理が骨に刻まれます。

この「苦痛 → 救済」の経験が、皆さんを「説明できる開発者」へと成長させます。

5週間後、皆さんは面接の場でこのように言えるようになります。

❌ (一般的な回答) "JPAはORM技術なので、便利だから使っています。"

⭕ (経験に基づいた回答) "私が直接JDBCで開発してみたのですが、SQLを毎回作成する反復作業も問題ですが、何よりオブジェクト指向でコードを書くと、DBに保存する際に不一致が発生するのが大変でした。しかし、JPAの永続性コンテキストが1次キャッシュと変更検知でこの問題を解決してくれました。"

このように答えれば、面接官も「あ、この人は実際に経験したんだな」と感じることができます。

✅ このような内容を学びます。

🧠 比喩で理解するJPAの核心概念

  • 秘書で理解する永続性コンテキスト - 照会をキャッシュし、変更を感知して、クエリをまとめて送ってくれる秘書

  • 宅配便のまとめ発送で理解する書き込み遅延 — 一つずつ送ると非効率、トラックを呼んで一度に配送

  • 偽の社員(プロキシ)で理解する遅延読み込み — 本当に仕事が発生するまで待機するだけの偽のオブジェクト

  • レゴの組み立てで理解する動的クエリ — 条件を一つずつ組み合わせていくQueryDSL


🌱 Lv.1を終えた方のための次のステップ

  • Lv.1で学んだJdbcTemplateの限界を直接体感することから始めます。

  • "この技術がなぜ誕生したのか"から始まるすべての概念説明。

  • 「苦痛 → 救済」学習法:JDBC 35行の地獄を経験してこそ、JPA 3行の革命が理解できます。


  • 面接の回答までつながる実践型カリキュラム。


✨ この講義の特徴

📌 "なぜ?"を絶え間なく問いかけます

この講義は「こうしてください」では終わりません。

一般的な講義:"永続性コンテキストはエンティティを管理します。save()を使えばいいです。" (X)

この講義:純粋なJDBCでSELECT 35行の地獄を直接経験した後、永続性コンテキストの1次キャッシュがなぜ革命なのかを骨身に沁みて体感

すべての概念は「この技術がなぜ誕生したのか」から始まります。Whyを体得すれば、Howは自然とついてきます。


📌 "苦痛 → 救済" 学習法

単に正解だけを教える講義ではありません。あえて苦労を経験させた後、解決策の偉大さを体感させます。

1週目: JDBC 35行のSELECT地獄 → JPAの永続性コンテキストが3行で終わらせる

2週目: EnumTypeの欠落によるデータ汚染の惨事 → EnumType.STRINGによる防御法 / merge()のnull上書きの惨事 → 変更検知(Dirty Checking)ベースの安全な修正

3週目:オブジェクトとテーブルのパラダイム不一致による混乱 → 関連付けマッピングでスッキリ解決 / N+1によるクエリ爆発 → Fetch Join一行で解決

4週目:すべてのエンティティにcreatedAtをコピペする地獄 → BaseEntityで一発解決 / 値タイプコレクションの全削除の惨事 → エンティティ昇格パターン

5週目: 文字列JPQLのタイポがランタイム障害に → QueryDSLコンパイルタイム検証 / if文の動的クエリ・スパゲッティ → BooleanExpressionレゴ組み立て

この経験が、面接で「私が直接経験したことなのですが…」から始まる回答を可能にします。

JPAの永続性コンテキストからQueryDSLまで、内部動作を説明できるようになります。


📌 面接官の深掘り質問を誘導する回答法

概念だけを提示して終わる講義、面接でどう活用すればいいのか分からない講義… 私はそのような講義が一番嫌いでした。

この講義は概念 → 体験 → 面接の回答まで繋げます。
(下の画像はバックエンド履歴書差別化講義の面接的中内容です)

このような方におすすめです

JPAが何なのか実感が湧きません
✔ JdbcTemplateでCRUDはしたけれど、「永続性コンテキスト」が何なのか分からない方
✔ save()を呼び出せば保存されることは知っているけれど、「内部で何が起きているのか」分からない方
✔ JPAを「なぜ」使うべきなのか説明できる開発者になりたい方

実務でJPAを使っているけれど、障害の原因が分かりません
✔ N+1問題が何であるかは聞いたことがあるが、「自分のコードで発生した時」に見つけられない方
✔ @ManyToOne、@OneToManyを付けてはいるが、「なぜこのように書くべきなのか」を説明できない方
✔ 「変更検知が機能しません」というエラーに遭遇すると、まずググってしまう方

面接の準備と実習を同時に行いたいです
✔ 「永続性コンテキストについて説明してください」に経験に基づいて答えたい方
✔ 理論ではなく実践でJPAを身につけたい方
✔ 「N+1問題を解決したことがありますか?」という質問に3つの解決策を答えられる開発者になりたい方

🗺️ この講義はLv.2です

この講義はロードマップの核心段階です。Lv.1でSpring Bootの基礎を固めたなら、次は実務で最も多く使われるJPAを攻略する番です。

Lv.0 データベースの核心概念 - スプリング開始前の基礎固め

Lv.1 Spring Boot入門 - スプリングでAPI作成、面接対策

👉 Lv.2 現役開発者のJPA完全征服(この講義) - 永続性コンテキストからQueryDSLまで

Lv.3 デプロイ (AWS, CI/CD) - localhost ではなく、本当の世界に公開する

Lv.5~6 アーキテクチャ & 実戦プロジェクト - MSA, DDD, Eコマースシステム構築

今この講義で実務の武器を身につけ、段階別に一緒に進んでいきましょう!


今この講義から始めて、段階別に一緒に行ってみましょう!

スプリングブート Lv3 サムネイル

🎁 EVENT 🎁

講義を受講してくださる方々だけに提供する特別特典があります。

[Lv.2] JPA面接質問問題集を提供します

(該当の問題集はNotionの形式でリンクとして提供されます!)

受講評を書いてくださる方に、こちらの教材を差し上げます!

コミュニティで受講レビューを認証して受け取ってください!

(認証方法は最後の講義に記載しておきました __)


🎁 EVENT 2 🎁

こちらのリンクからGoogleフォームを提出していただければ,

🎟 15%割引クーポンをお送りします 🎟

🎁 EVENT 3 🎁

IntelliJ IDE 3ヶ月無料利用券をプレゼント!

皆様の開発学習を応援する気持ちを込めて、JetBrainsとのコラボレーションによる特別な特典をご用意しました。
以下のプロモーションコードを通じて、IntelliJを3ヶ月間無料でご利用いただけます!


プロモーションコード: HYUNJOONPARKxJB
特典内容: JetBrains 単体IDE(例:IntelliJ, PyCharm, WebStormなど) 3ヶ月無料利用券
有効期限: 〜 2026年5月13日まで
使用方法😀

1.JetBrains公式クーポン登録ページにアクセス

2.コード入力後、希望するIDEを選択

3.メールで発行されたライセンスを確認


注意事項:
このコードはJetBrainsを初めて使用する新規ユーザーのみ使用可能です。
(以前にJetBrainsの有料ライセンスを使用した履歴がない方のみ登録可能)
(Googleアカウントを新しく作成すれば、何度でも利用できます)

この講義を作った人

Coupang、Yanoljaの最終面接まで行ってきた裏話をする - 6年目エンジニアの24社転職ストーリー [ep 5]

ディンコディンコ(メイン講師)

  • 2021 ~ 2022: Sコーディングクラブ アルゴリズム (data-structure) チューター

  • 2022 ~ : コーディングYouTubeディンコディンコ運営(開発者の就職に関する多様なコンテンツを保有)

  • 2022 ~ 2023 : Viva Republica サーバー開発者


  • 絶対に学生を諦めない 🦈

  • 開発者就職攻略コミュニティの運営およびオフライン交流会の運営


受講前のご注意事項

もし!! 受講を申し込む前に少しでも悩んでいるなら。

今この講義を受けるべきだろうか?と悩んでいる方は、いつでもお気軽にオープンチャットまでお問い合わせください!!

😍 精一杯お答えさせていただきます 😍 #Java #Spring #Spring Boot #JPA #spring-jpa

実習環境

  • IntelliJを使用します。Community(無料)版でも全く問題ありません。

  • Windows、Macどちらでも構いません!各OSごとのインストール方法をすべて提供します。


学習資料

  • NotionおよびPDFですべて共有いたします!

  • プロジェクトのコードを共有いたします!

前提知識および注意事項

  • Springを少し学んだことがある人

  • MySQL CRUD 経験者


こんな方に
おすすめです

学習対象は
誰でしょう?

  • JPAとは何か、なぜ使うべきなのか、まずはイメージを掴みたい方

  • 経験に基づいた回答で面接官の深掘り質問を引き出したい方

  • @ManyToOneは分かるけれど、なぜ双方向が必要なのか、mappedByとは何なのかが整理できていない方

  • クエリがいつ発行されるのか、変更検知はどのように動作するのか、なぜupdate()を使わなくてもいいのか、その原理を知りたい方

  • クエリログを読み、自ら解決できる実践能力が必要な方

前提知識、
必要でしょうか?

  • Java基礎文法 (if文、for文、クラス、インターフェース)

  • Spring Bootで簡単なREST APIを作ってみた経験

  • JdbcTemplateでDBのCRUDを行った経験(SQLのSELECT、INSERTなどの基礎)

こんにちは
dingcodingcoです。

16,285

受講生

1,639

受講レビュー

306

回答

4.9

講座評価

19

講座

🚀 Toss、ポステック(浦項工科大学)出身 | 現役バックエンドエンジニア(+8年
🎥2万人のYouTuber | 開発コンテンツ制作
📚 インフラン講師 | 累計受講生 15,000人以上
👥 エンジニア就職コミュニティ運営中(8,000人以上)
🧩 オープンソース(Gradle、Spring AIなど)多数のコントリビューター
📝38社の書類選考合格およびKmong履歴書添削 100回以上の経験(評価5.0点)

現場から届く生きた情報を、分かりやすく、演繹的に理解できるようにお伝えします。
Tôi truyền đạt những thông tin thực tế từ ngành công nghiệp một cách dễ hiểu và có tính diễn dịch.
I deliver vivid, real-world industry insights in an easy-to-understand and deductive manner.

Inflearnインタビューリンク!

もっと見る

カリキュラム

全体

40件 ∙ (4時間 10分)

講座掲載日: 
最終更新日: 

受講レビュー

まだ十分な評価を受けていない講座です。
みんなの役に立つ受講レビューを書いてください!

dingcodingcoの他の講座

知識共有者の他の講座を見てみましょう!

似ている講座

同じ分野の他の講座を見てみましょう!

期間限定セール

¥1,462,318

29%

¥12,662