🔥필수
1. 기본 개념 & 엔티티 매핑
- JPA 개념과 동작 원리 (EntityManager, Persistence Context, 1차 캐시)
- @Entity, @Table 등 엔티티 매핑
- 필드 매핑 (@Column, @Id, @GeneratedValue)
- 연관관계 매핑 (@OneToOne, @OneToMany, @ManyToOne, @ManyToMany)
- @Embeddable, @Embedded (값 타입 매핑)
💡JPA는 객체를 DB에 매핑하는 기술이다.
2. 영속성 컨텍스트 & 트랜잭션 관리
JPA가 변경 감지(Dirty Checking), 1차 캐시, 지연 로딩(Lazy Loading) 등을 다루는 핵심 메커니즘임.
- 영속성 컨텍스트(Persistence Context)
- persist(), merge(), remove(), detach(), flush()
- 트랜잭션 개념 & @Transactional 활용
- 변경 감지 (Dirty Checking)
- 플러시(Flush)와 커밋(Commit)
- 준영속 상태 (detach(), clear(), close())
💡JPA는 트랜잭션 단위에서 동작하며, 변경 감지를 통해 자동으로 DB에 반영한다.
⚡중요
3. 연관관계 매핑 & Fetch 전략
엔티티 간 관계를 제대로 이해해야 실무에서 성능 문제를 피할 수 있음.
- @ManyToOne (N:1) & @OneToMany (1:N)
- @OneToOne, @ManyToMany
- 단방향 vs 양방향 매핑 (양방향 매핑 시 mappedBy 주의)
- Fetch 전략 (LAZY, EAGER)
- cascade와 orphanRemoval
💡 연관관계 매핑에서 Fetch 전략을 잘못 설정하면 성능 이슈가 발생한다. 기본적으로 @ManyToOne → LAZY, @OneToMany → LAZY 설정 추천
4. JPQL & Query Methods
JPA에서 DB와 직접 통신하는 쿼리 관련 기능들
- findById(), findAll(), save(), delete() 같은 기본 메서드
- JPQL (JPA Query Language)
- @Query를 이용한 커스텀 쿼리 작성
- NamedQuery & Native Query
💡 JPA는 기본적으로 객체 중심이지만, 복잡한 조회는 결국 SQL처럼 해야 한다
🎯 심화
성능 최적화 및 기타 고급 기능 학습