채널톡 아이콘

[Lv2] 현업 개발자의 JPA 완전 정복 - 영속성 컨텍스트부터 실무 패턴까지

JdbcTemplate으로 SQL 짜본 적 있으시죠? 컬럼 하나 바뀔 때마다 SQL이랑 RowMapper 동시에 고치느라 한숨 쉬었던 경험, 다들 있을 겁니다. 이 강의는 그 고통에서 출발합니다. 순수 JDBC로 SELECT 하나 하면 35줄입니다. Connection 열고, PreparedStatement 만들고, ResultSet 돌리고, close() 하나 빠뜨리면 서버가 다운됩니다. 이 지옥을 직접 타이핑한 뒤에 JPA의 save() 한 줄을 만나면, "이래서 JPA를 쓰는구나"가 머리가 아니라 손에서 체감됩니다.

11명 이 수강하고 있어요.

난이도 초급

수강기한 무제한

실습 중심
실습 중심
백엔드이해하기
백엔드이해하기
취업준비
취업준비
개발자취업
개발자취업
실습 중심
실습 중심
백엔드이해하기
백엔드이해하기
취업준비
취업준비
개발자취업
개발자취업

수강 후 이런걸 얻을 수 있어요

  • 1차 캐시, 변경 감지, 쓰기 지연까지 경험 기반으로 술술 설명할 수 있는 능력

  • JDBC 35줄의 고통을 직접 겪고 나서 JPA가 왜 필요한지 체감한 경험

  • N+1 문제가 터졌을 때 로그를 보고 원인을 찾고, Fetch Join / @EntityGraph / @BatchSize 중 상황에 맞는 해결법을 선택할 수 있는 실무 디버깅 능력

  • QueryDSL의 BooleanExpression으로 if문 스파게티 없이 깔끔한 동적 쿼리를 설계하고, Custom Repository 패턴으로 JPA와 QueryDSL을 실무 표준 구조로 통합하는 역량

  • 엔티티 설계부터 상속관계 매핑, BaseEntity(Auditing), 임베디드 타입까지 — 실무 프로젝트를 시작할 때 "테이블 설계 어떻게 하지?"가 아니라 "이 패턴으로 가자"고 판단할 수 있는 설계 감각

스프링, 이렇게 배우면 면접에서 떨어집니다

Lv.1에서 스프링 부트로 API 만들었습니다.

JdbcTemplate으로 SQL 짜고, RowMapper로 결과 매핑하고... 오, CRUD 돌아가네!

근데 코드를 보면 이런 생각이 듭니다.

"SQL을 왜 자바 코드 안에 문자열로 써야 하지?"

"컬럼 하나 추가될 때마다 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 덮어쓰기 참사 → 변경 감지 기반 안전한 수정

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, 이커머스 시스템 구축

지금 이 강의에서 실무 무기를 장착하고, 단계별로 같이 가보시죠!


지금 이 강의에서 시작해서, 단계별로 같이 가보시죠!

스프링 부트 Lv3 썸네일

🎁 EVENT 🎁

강의를 수강해주시는 분들에게만 제공하는 특별 혜택이 있습니다.

[Lv.2] JPA 면접 질문 문제집을 제공합니다

(해당 문제집은 노션의 형태로 링크로 제공됩니다!)

수강평을 작성해주시는 분들께 해당 교재를 드리겠습니다!

커뮤니티에서 수강평 인증 후 받아가세요!

(인증하는 방법은 맨 마지막 강의에 적어뒀습니다 __)


🎁 EVENT 2 🎁

해당 링크를 통해 구글 설문을 제출해주시면

🎟 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 유료 라이선스를 사용해본 이력이 없는 분들만 등록 가능)
(구글 이메일 새로 파서 하면 무한으로 할 수 있어요)

이 강의를 만든 사람

쿠팡, 야놀자 최종 면접까지 보고 온 뒷 이야기 썰 푼다 - 6년차 개발자 24개 회사 이직 스토리 [ep 5]

딩코딩코(메인강사)

  • 2021 ~ 2022: S 코딩클럽 알고리즘 (data-structure) 튜터

  • 2022 ~ : 코딩 유튜브 딩코딩코 운영 (개발자 취업 관련된 다양한 컨텐츠 보유)

  • 2022 ~ 2023 : 비바리퍼블리카 서버 개발자


  • 절대 학생을 포기하지 않음 🦈

  • 개발자 취업 뽀개기 커뮤니티 운영 및 오프라인 모임 운영


수강 전 참고 사항

만약!! 수강 신청하기 전에 조금이라도 고민된다.

내가 지금 이 강의를 듣는게 맞을까?? 고민하시는 분들은 언제든 편하게 오픈 톡방으로 문의해주세요!!

😍 열심히 답변드려보겠습니다 😍 #Java #Spring #Spring Boot #JPA #spring-jpa

실습 환경

  • intellij를 사용합니다. Community(무료) 버전도 아무 상관 없습니다.

  • 윈도우, 맥 아무 상관 없습니다! 각 운영체제 별 설치 방법들 모두 제공합니다.


학습 자료

  • 노션 및 PDF로 전부 공유해드립니다!

  • 프로젝트 코드를 공유해드립니다!

선수 지식 및 유의사항

  • Spring 살짝 배워본 사람

  • MySQL CRUD 경험자


이런 분들께
추천드려요

학습 대상은
누구일까요?

  • JPA가 뭔지, 왜 써야 하는지 감부터 잡고 싶은 분

  • 경험 기반 답변으로 면접관의 추가 질문을 유도하고 싶은 분

  • @ManyToOne은 알겠는데 양방향이 왜 필요한지, mappedBy가 뭔지 정리가 안 되는 분

  • 쿼리가 언제 나가는지, 변경 감지는 어떻게 동작하는지, 왜 update()를 안 써도 되는지 원리를 알고 싶은 분

  • 쿼리 로그를 읽고 직접 해결할 수 있는 실전 능력이 필요한 분

선수 지식,
필요할까요?

  • Java 기초 문법 (if문, for문, 클래스, 인터페이스)

  • Spring Boot로 간단한 REST API를 만들어본 경험

  • JdbcTemplate으로 DB CRUD를 해본 경험 (SQL SELECT, INSERT 등 기초)

안녕하세요
딩코딩코입니다.

15,908

수강생

1,603

수강평

306

답변

4.9

강의 평점

19

강의

🚀 토스, 포항공대 출신 | 현업 백엔드 개발자(+8년)
🎥2만 유튜버 | 개발 콘텐츠 제작
📚 인프런 강사 | 누적 수강생 15,000+
👥 개발자 취업 커뮤니티 운영 중 (8,000+)
🧩 오픈소스 (Gradle, Spring AI 등) 다수 Contributor
📝38개 서류 합격 및 크몽 이력서 첨삭 100+회 이상 경험 (평점 5.0점)

현업에서 전달되는 생생한 정보들을 쉽고, 연역적으로 이해되게 전달합니다.

인프런 인터뷰 링크!

더보기

커리큘럼

전체

40개 ∙ (2시간 21분)

강의 게시일: 
마지막 업데이트일: 

수강평

아직 충분한 평가를 받지 못한 강의입니다.
모두에게 도움이 되는 수강평의 주인공이 되어주세요!

딩코딩코님의 다른 강의

지식공유자님의 다른 강의를 만나보세요!

비슷한 강의

같은 분야의 다른 강의를 만나보세요!

얼리버드 할인 중

₩8,812

29%

₩99,000