Object Relation Mapping
자바 객체와 DB를 연결하는 프로그래밍 기법
자바만으로 DB를 다룰 수 있도록 하는 도구, sql 작성 불필요
Java Persistence API
ORM 중 하나
자바에서 관계형 DB를 사용하는 방식을 정의한 interface
사용 시 ORM 프레임워크 선택 필수
자바용 ORM 프레임워크
JPA 인터페이스를 구현한 구현체, implements JPA
내부에서 JDBC API를 사용
entity를 관리하여 DB와 application 사이에서 object의 CRUD 실행
@PersistenceContext, @Autowired를 통해 사용
Spring Data JPA에서 관리 (개발자가 직접 관리하지 않음)
entity manager를 만드는 곳
스프링부트 내부에 1개 존재
가짜 entity manager
필요할 때 실제 entity maneger를 호출
1개의 bean만 생성해서 공유하는 스프링부트의 동시성 문제를 피하기 위해 사용
DB table과 매핑되는 객체
DB에서 불러온 데이터 객체
entity를 관리하는 가상의 공간
entity manager가 entity를 저장하는 곳
JPA의 중요한 특징
DB 접근 최소화, 데이터베이스 시스템 부하 감소, 성능 향상
1차 캐시
entity 조회 시 먼저 조회해보는 곳
key: entity의 @id, 기본기 역할을 하는 식별자
value: entity
쓰기 지연 (transactional write behind)
transaction commit 전까지 query들을 모아두었다가 commit 시 한꺼번에 실행
변경 감지
transaction commit 시 1차 캐시와 현재 entity를 비교하여 변경 사항 DB 자동 반영
지연 로딩 (lazy loading)
필요 시에만 데이터 조회 및 로딩 query 실행
<-> 즉시 로딩
필요에 따라 조절하여 데이터를 바르게 유지 관리
메소드 호출을 통해 변경 가능
Detached
분리 상태
영속성 컨텍스트가 관리하고 있지 않는 상태
detach()
Managed
관리 상태
persist()
Transient
비영속 상태
default 상태
영속성 컨텍스트와 전혀 관계가 없는 상태
Removed
삭제된 상태
remove()
JPA에 특화된 Spring Data 기술
데이터 엑세스 interface
class level에서 DB를 사용 가능하게 하는 추상화 기술
자동 query 빌딩
비즈니스 로직에 집중 가능
각 데이터베이스 특성에 맞춰 확장 기능 제공
*스프링 부트 3: 백엔드 개발자 되기