5-Week JPA Challenge: Reproducing Everything from N+1 to the Persistence Context
This is a 5-week challenge where you will directly reproduce persistence contexts, associations, value types, QueryDSL, and N+1 issues under the same conditions, verify them through SQL logs, and explain the rationale behind your mapping and query choices.
🚀 Former Toss, POSTECH graduate | Current Backend Developer (+9 years) 🎥 YouTuber with 20,000 subscribers | Development content creator 📚 Inflearn Instructor | Over 18,000+ cumulative students 👥 Managing a developer career community (8,000+ members) 🧩 Contributor to multiple open-source projects (Gradle, Spring AI, etc.) 📝 Passed 38 resume screenings & experienced in 100+ Kmong resume reviews (5.0 rating)
I deliver vivid, real-world industry insights in a way that is easy to understand and logically deductive. Truyền tải những thông tin thực tế sống động từ ngành công nghiệp một cách dễ hiểu và có tính diễn dịch.
JPA, which you've always trusted, will be verified with your own eyes within 5 weeks.
Reproduce the persistence context and N+1 issues under the same conditions, compare them through SQL logs, and submit one PR each week. After 5 weeks, you will have experimental records explained by the number of queries and a mapping ADR.
Free · First 100 people (First-come, first-served)
Created by Dingco Dingco, who has 18,000+ cumulative students on Inflearn, an average satisfaction rating of 4.9, and experience helping students get hired at 38 companies.
This challenge does not provide lectures or textbooks. It is an execution track where you prove what you already know or have learned on your own through practical problems and GitHub PRs. Preparation before starting · Experience using entities and repositories in a Spring Boot project is required.
This is a 5-week action track where you prove the concepts you've already learned through code, experiments, and explanations.
WHAT YOU SHIP
What you will have after completion
Persistence Context and Lifecycle Verification Test Collection
Number of SQL queries before and after N+1 improvement and dynamic search API
20 JPA interview answers linking Mapping ADRs with actual logs
BEFORE
Even if the query differs from expectations, it is dismissed as a characteristic of the framework.
AFTER
Fix the persistence state and the number of SQL queries through tests, and explain the costs of mapping and retrieval strategies.
ACTUAL WORKFLOW
From application to review, in the order of the actual screens
You do not copy and submit the GitHub address. The Dingco website handles everything from preparing your private repository and creating mission branches and PRs to checking detailed reviews.
1GitHub first, Discord lastAfter completing Kakao login and the preliminary diagnosis, prepare your personal private repository, and connect your Discord role and cohort channel at the very end.2Perform the mission in your private repositoryThe homepage will guide you through creating the 'Persistence Context 4 Major Functions Experiment and Evidence-based Answer' branch and PR. Do not copy and paste the PR address.3Check the 91-point score and specific evidenceReview the strengths and improvement points from the automated inspection and AI review in the Dingco detailed review and GitHub PR comments, then modify the same PR.4JPA Challenge 1st Cohort Operation ChannelIndividual detailed reviews are not posted on Discord; only weekly summaries and operational announcements are shared.
The screen above is an example created based on the actual operational UI and repository/channel rules. The repository name, cohort number, and review scores will vary depending on the participant and the cohort.
5-WEEK ROUTE
Weekly missions to transform what you already know into actual deliverables
Every week, you will submit your implementation/experiments, tests/logs, reasoning for choices, and answers to questions in a single PR. The questions are not homework where you provide memorized answers, but rather responses based on the code you just wrote and the evidence you gathered.
W1
The Pain of JDBC and the Persistence Context
Compare JDBC and JPA, and verify the first-level cache, identity, change detection, and write-behind through logs.
Weekly Integrated PRExperiments on the 4 Key Features of Persistence Context and Evidence-Based Answers
Reproduce the first-level cache, identity, change detection, and write-behind respectively within the same transaction.
Record the expected SQL, the actual SQL, and the timing of their occurrence for each experiment.
Compare this with the state management that must be handled manually when processing the same requirements using JDBC.
Submission Evidence · Verification tests by function · SQL logs showing execution order · Explanation compared to JDBC · Answers to evidence-based questions 1–4
함께 답할 근거형 질문 4개
Why is the first-level cache not a global application cache?
Within what scope is the identity of entities with the same identifier guaranteed, and how did you verify it?
At what point does dirty checking compare which information to generate an UPDATE statement?
How did you prove with logs the point where write-behind changes the actual SQL execution order?
W2
Entity Mapping and Lifecycle
Experimenting with key generation strategies, flush, detached states, and the save/merge traps.
Weekly Integrated PRReproducing Identifier and save Pitfalls and Evidence-based Answers
Save new entities and detached entities respectively, and compare the persist and merge paths.
Record cases where the timing of the INSERT statement varies depending on the identifier strategy or whether it is manually assigned.
Write a regression test for issues that occur when the returned object and the passed object of a merge are confused.
How does Spring Data JPA's save method decide between persist and merge?
Why is it dangerous to continue using the object passed to merge?
What differences can the IDENTITY and SEQUENCE strategies make at the time of INSERT?
Why is it necessary to distinguish between flush and commit to accurately explain this log?
W3
Relationships and Lazy Loading
Safely apply association owners, proxies, LAZY loading, cascade, and orphan removal.
Weekly Integrated PRValidation of Relationships and Deletion Boundaries, and Evidence-Based Answers
Determine the owner of the User–Todo relationship, and if using a bidirectional relationship, write a convenience method to synchronize the states of both objects.
Compare the SQL before and after accessing the LAZY association and record the timing of proxy initialization.
Verify the deletion scope of cascade and orphanRemoval through separate tests.
Submission Evidence · Domain Mapping Code · SQL Logs Before and After Loading · Deletion Scope Test · Answers to Evidence-based Questions 1-4
함께 답할 근거형 질문 4개
Why is an association owner, who actually manages the foreign key, necessary?
Why can N+1 problems still occur even when declared as LAZY?
In what situations do the results of cascade REMOVE and orphanRemoval differ?
Why are association convenience methods necessary for the state of objects rather than the database?
W4
Inheritance Mapping Comparison and Optional Extensions
Compare the same payment domain using SINGLE_TABLE and JOINED strategies, and expand with value types and composite keys as optional tasks.
Weekly Integrated PRDomain Mapping Decision ADR and Evidence-based Answers
Implement the same payment domain using minimal reproduction models for both SINGLE_TABLE and JOINED inheritance strategies.
Compare the generated schema, polymorphic query SQL, and change costs under the same H2 data and query conditions, and specify the measurement scope.
Record the reasons for the chosen strategy and the discarded strategy as an ADR.
Either value type immutability or composite key contracts can be experimented with as an optional task.
Submission Evidence · SINGLE_TABLE·JOINED Minimum Reproducible Model · H2 Schema·Polymorphic Query SQL Comparison · Final ADR · Answers to Evidence-based Questions 1-4
함께 답할 근거형 질문 4개
How did you compare query performance and schema normalization when choosing an inheritance mapping strategy?
How did you verify the cost of nullable columns in SINGLE_TABLE versus the join cost in JOINED for this model?
How did the polymorphism query SQL differ between the two strategies, and to what extent can the H2 experiment results be generalized?
What requirements would make the discarded option among the two mapping plans more suitable?
W5
Dynamic Search and N+1
Reproduce N+1 in dynamic condition lookups and compare the number of queries and result consistency under the same conditions.
Weekly Integrated PRDynamic Search API without N+1 and Evidence-based Answers
Implement a Todo search API that combines two or more selection conditions using generated Q-types and QueryDSL.
Reproduce N+1 issues using the same data and search conditions including different associated entities, and compare the number of queries before and after improvement using the provided SQL observation tool.
Select either QueryDSL fetch join or DTO projection to write a regression test for result consistency, and explain the costs associated with paging, duplication, and coupling.
Consistency in the persistence context after collection fetch joins with paging or bulk operations can be tested separately as an optional task.
Submission Evidence · QueryDSL Dynamic Query API · Number of SQL queries before and after improvement under the same conditions · Query result consistency regression test · Answers to evidence-based questions 1-4
함께 답할 근거형 질문 4개
Does N+1 occur with LAZY or EAGER loading, and what is its fundamental cause?
Why is the chosen query optimization method more suitable for the current requirements than other alternatives?
What rules and tests were used to fix the boundaries for null and empty values in QueryDSL condition combinations?
In what order did you control the 1st-level cache and fixture INSERTs to ensure they did not contaminate the query count measurement?
WEEKLY LOOP
Complete a week's worth of practical tasks within a single PR.
Check weekly practical problems
Perform the mission on a personal branch
Submit code, tests, and explanations via PR
Check automatic inspections and AI reviews
Modify the same PR and merge automatically
Check passed PRs and official explanations
Reflecting cumulative peer reviews and crew learning records
Submissions are made only via GitHub PR. Experimental code, SQL logs, and ADRs are automatically checked within a single PR, and the revision history is preserved. It automatically verifies whether the necessary evidence is included within the PR.
CREW ENGAGEMENT
We will talk for only 20 minutes using the "Mission Comment."
Starting from week 2, leave a short comment on the PR, and crew members will share only their roadblocks and alternative approaches.
Mission comment starting from Week 2 Leave a comment of 10–300 characters about any difficulties encountered when submitting the PR.
20 minutes at a time set by the team Starting at 21:15 on Tuesdays by default, share only the points where you got stuck and alternative approaches.
Leader wraps up in 1–30 characters Starting from week 2, +5 for completed crews, separate from individual completion.
Team Bonus Activity Participants do not write separate posts other than the mission comment. The Crew +5 points are separate from individual completion.
LIVE SESSION
Once live, we will align on the process together
We will hold one live session during the challenge period. We will align on the completion criteria together and check on the spot how the submission process flows on the screen.
KICKOFF LIVE8/18(Tue) 20:00
60 min · Online
JPA Challenge Kickoff Live
Guide to the 5-week process and completion criteria
Monday kickoff: Preparing the first mission branch and a demo for submitting GitHub PRs after the Wednesday start
Real-time Q&A
The participation link will be posted in the Discord announcement before the start. Even if you cannot participate in the live session, you can still check the completion criteria and submission methods on the Dingco website and Discord announcements.
CHALLENGE CONTRACT
Learn concepts individually, practice and feedback together
This challenge does not provide lectures, textbooks, Notion pages, or bonus materials. You apply what you already know or have learned on your own to real-world problems and prove it through GitHub PRs.
The challenge provides
Weekly practical problems · Individual private practice repository · Clear passing criteria · Automated checks and AI reviews · Peer comparison and completion records
Participants prepare
Basic concepts in the relevant field · Experience with Git and GitHub PRs · Time to commit each week · An attitude of self-supplementing missing concepts
Optional Pre-learning · Separate Purchase · 9 hours 39 minutes
[Lv2] Master JPA Like a Pro - From Persistence Context to Real-World Patterns
This lecture and textbook are not included in the challenge, and enrollment is not mandatory. Please choose them only if you have areas of weakness identified in the pre-diagnosis or if you need to supplement your understanding of the concepts.
Regardless of whether you have applied on Inflearn, check the recruitment status of the current cohort via the ‘Check Recruitment/Participation’ button above. Once you log in with Kakao on Dingco, your spot will be secured, and you will be ready to participate after completing all connections.
Select the current cohort on the Dingco recruitment and participation confirmation page and log in with Kakao to immediately create your challenge membership and secure your spot.
Once you pass the pre-diagnostic test for your cohort, the GitHub connection step will be unlocked.
If you connect GitHub first, organization permission verification and the preparation of a private repository for JPA experiments will be automatically scheduled.
Connecting Discord will grant you access to the JPA Challenge Season 1 category and permissions for the announcement, reading material, question, and free-talk channels.
Create a submit/<mission> branch on the website, push your experimental code and SQL logs, and then submit a PR with a single click of a button.
The latest commits that pass the automated checks and AI review will be automatically merged by Dingco, and we will celebrate together in the free channel. In the Crew Discord, you can share questions and progress. Official reviews will prioritize PRs from the same crew, but if none are available, they will proceed to PRs from other crews in the same cohort. The scoreboard is provisionally updated during the week and finalized after the last cumulative review deadline.
Read access for the same cohort Personal repositories are kept private, and participants in the same cohort can refer to them as read-only after the weekly results are released. Write access is granted only to your own repository. Crews are usually operated with 5 to 6 members, and the list remains hidden until disclosure. Detailed scoreboards are not disclosed; only the winning crews who have consented after the final scores are confirmed will be introduced through the Hall of Fame, GitHub badges, and public names. Registration closes at 19:00 on the Wednesday of the starting week. For tracks with a preliminary diagnosis, you must pass by the same time, and the crew list and dedicated Discord channel will be released at 20:00. The official start and the release of the Week 1 mission are at 21:00 on the same day. Thereafter, new missions open every Wednesday at 21:00, and submissions close the following Tuesday at 21:00. Official reviews do not have to be done immediately each week, but the required number of reviews based on different weekly criteria must be completed by 21:00 on the Sunday following the final week. Week 1 problems, personal repositories, and mission branches can be prepared in advance, and the PR submission button will be automatically activated once your crew channel setup is complete. Participants who have not finished connecting GitHub and Discord will remain in their assigned crews.
FIT CHECK
This is suitable for these types of people, and not suitable for these types of people.
Recommended for
Those who can create CRUD with JPA but are afraid of unexpected SQL.
Those who want to organize N+1, cascade, and save/merge through reproduction code rather than just words.
Those who want to draw both practical choices and interview explanations from the same evidence
Not recommended
Those who have no experience at all in saving or retrieving entities with Spring Data JPA
Those who only want answer patterns without SQL logs and regression tests
COMPLETION
The completion criteria will be disclosed before the start.
Submit all 5 weekly integrated mission PRs over the course of 5 weeks.
Submit official reviews for passing PRs from 4 different weeks.
Preparation before starting
Experience using entities and repositories in Spring Boot projects is required.
You must participate in experiments, log comparisons, and PR revisions for approximately 5 to 7 hours every week.
FAQ
Most frequently asked questions before participating
Is this the same course as the existing 10-week bootcamp?
No. This challenge is a separate track where you complete one subject over 5 weeks. It only leads to the 10-week bootcamp if you require a longer project and job-focused curriculum.
Are lectures or textbooks also provided?
No. The challenge provides weekly problems, a private practice repository, submission criteria, and a review loop. The associated lectures are optional pre-learning materials available for separate purchase and are not mandatory to take.
Is it also possible to submit on the website or paste a link?
Submission results are only accepted via GitHub PR. However, preparing repositories, branches, and PRs, as well as checking reviews, can be easily accessed through buttons on the Dingco website.
What is made public on Discord?
Detailed individual reviews are not posted on Discord; only weekly summaries and operational announcements are shared. The public channel for JPA Challenge Season 1 is a space for reading materials, questions, free conversation, and operational guidance.
CREATOR NOTE
In the AI era, what should junior developers study?
You can first check the video to see what criteria should be used to execute and verify this problem.