![[스프링부트 #12] JPA의 핵심 기술과 개념 체계도](https://image.inblog.dev?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog-custom%3Ftitle%3D%255B%25EC%258A%25A4%25ED%2594%2584%25EB%25A7%2581%25EB%25B6%2580%25ED%258A%25B8%2B%252312%255D%2BJPA%25EC%259D%2598%2B%25ED%2595%25B5%25EC%258B%25AC%2B%25EA%25B8%25B0%25EC%2588%25A0%25EA%25B3%25BC%2B%25EA%25B0%259C%25EB%2585%2590%2B%25EC%25B2%25B4%25EA%25B3%2584%25EB%258F%2584%26tag%3DTemplate%2B1%26description%3D%26template%3D3%26backgroundImage%3Dhttps%253A%252F%252Fsource.inblog.dev%252Fog_image%252Fdefault.png%26bgStartColor%3D%252323ec86%26bgEndColor%3D%252323ec86%26textColor%3D%2523000000%26tagColor%3D%2523000000%26descriptionColor%3D%2523000000%26logoUrl%3D%26blogTitle%3DGyeongwon%2527s%2Bblog&w=2048&q=75)
Contents
1. 객체와 관계형 데이터베이스의 불일치 해결1. 객체와 관계형 데이터베이스의 불일치 해결
핵심 개념: ORM(Object-Relational Mapping)
자바의 객체 모델과 RDB의 테이블 모델 간 불일치를 해결하기 위한 기술.
이 개념 자체가 JPA의 존재 이유이자 근본 철학이다.
핵심 기술
@Entity
,@Id
,@Table
등 엔티티 클래스 매핑
@Column
,@GeneratedValue
등 필드 속성 매핑
@Embedded
,@Embeddable
등 내장 타입 활용
2. 연관관계 매핑
핵심 개념: 객체는 참조, DB는 외래키
객체는
user.getTeam()
같은 참조를 사용하지만,RDB는
user.team_id
같은 외래 키로 관계를 표현한다.핵심 기술
@ManyToOne
,@OneToMany
,@OneToOne
,@ManyToMany
@JoinColumn
,mappedBy
등 양방향/단방향 매핑 설정
Cascade
,orphanRemoval
등 연관 객체 생명주기 관리
3. 영속성 컨텍스트 (Persistence Context)
핵심 개념: JPA의 심장, 1차 캐시 + 엔티티 상태 관리
em.persist()
를 호출해도 즉시 DB에 반영되지 않고,먼저 영속성 컨텍스트에 저장된다.
트랜잭션 안에서는 동일성(
==
)이 보장된다.핵심 기술
- 1차 캐시: 중복 조회 방지
- 변경 감지(Dirty Checking): setter 호출만으로도
UPDATE
쿼리 자동 발생
- 쓰기 지연: SQL 저장 후
flush()
시점에 전송
4. JPQL / Criteria / QueryDSL
핵심 개념: 엔티티 객체를 기준으로 하는 쿼리 언어
JPQL은 테이블이 아닌 엔티티를 기준으로 작성하며,
DB 벤더 종속성이 줄고 유지보수성이 높다.
핵심 기술
select e from Entity e where e.field = :value
join fetch
,group by
,order by
등 SQL 유사 문법 지원
CriteriaBuilder
, QueryDSL 등으로 타입 안정성 확보 가능
5. 트랜잭션 & 상태 추적
핵심 개념: 변경 감지(Dirty Checking) + 자동 Flush
@Transactional
메서드 안에서 엔티티 상태가 변경되면,트랜잭션 커밋 시 자동으로
UPDATE
쿼리가 실행된다.핵심 기술
@Transactional
,flush()
,clear()
em.merge()
,em.detach()
,em.remove()
등 상태 전이 메서드
6. Fetch 전략 (지연 vs 즉시 로딩)
핵심 개념: 언제 연관 엔티티를 가져올 것인가
즉시로딩은 쿼리 한 번에 연관 객체까지 모두 가져오지만 비효율적일 수 있고,
지연로딩은 실제 사용 시점에 추가 쿼리로 조회한다.
핵심 기술
fetch = FetchType.LAZY
(지연 로딩, 기본 권장 설정)
fetch join
을 통한 성능 최적화
EntityGraph
로 쿼리 성능 조정 가능
7. 스프링 데이터 JPA 연계
핵심 개념: JPA + 스프링의 생산성 극대화
Repository 인터페이스만 작성하면 구현체가 자동 생성되며,
쿼리 메서드 이름만으로도 조회가 가능하다.
핵심 기술
JpaRepository<T, ID>
상속
findByUsername()
,existsByEmail()
등 메서드 네이밍 기반 쿼리
@Query
,@Modifying
,@EntityGraph
등 추가 쿼리 커스터마이징
Share article