JPA(Java Persistence API)는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다.
즉, 실제적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다.
JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다.
자바 진영의 ORM 기술 표준이란?
- 객체 관계 매핑
- 객체는 객체대로 설계 & 관계형 데이터베이스는 관계형 데이터베이스대로 설계
- ORM 프레임워크가 중간에서 매핑 (패더라임 불일치 해결해 줌)
- 대중적인 언어에는 대부분 ORM 기술이 존재
JPA는 표준 명세
- JPA는 인터페이스의 모음
JPA는 애플리케이션과 JDBC 사이에서 동작
JPA 동작 - 저장
JPA에서 멤버 회원 객체를 저장해 주라며 JPA에 던지기만 하면 JPA가 알아서 이 회원 객체를 분석하고 INSERT SQL을 다 만들어준다. 그리고 JDBC API를 사용해서 이를 DB Insert Query까지 다 만들어준다.
여기서 중요한 것은 바로.. 패러다임의 불일치를 해결해 준다는 것이다. (이는 뒤에서 설명할 예정)
JPA 동작 - 조회
조회도 마찬가지로 회원 아이디 10번 찾아주라고 하면 JPA가 select query를 다 만들어서 JDBC API를 사용하고 result set을 다 매핑하고 패러다임 불일치를 해결해 준다.
JPA를 왜 사용해야 하는가?
- SQL 중심적인 개발에서 객체 중심으로 개발
- 생산성
- 유지보수
- 기존: 필드 변경시 모든 SQL 수정
- JPA: 필드만 추가하면 됨, SQL은 JPA가 처리
- 패러다임의 불일치 해결
- JPA와 상속
- JPA와 연관관계
- JPA와 객체 그래프 탐색
- JPA와 비교하기
- 성능
- 1차 캐시와 동일성(identity) 보장
- 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
- 지연 로딩(Lazy Loading)
- 데이터 접근 추상화와 벤더 독립성
- 표준
패러다임 불일치 해결
1. JPA와 상속
2. JPA와 연관관계, 객체 그래프 탐색
3. JPA와 비교하기
성능
지연 로딩과 즉시 로딩
지연 로딩 : 객체가 실제 사용될 때 로딩
즉시 로딩 : JOIN SQL로 한 번에 연관된 객체까지 미리 조회
지연 로딩 상황) Member만 주로 사용하고, Team은 드물게 사용되는 경우 적합.
해결) Member만 조회하는 게 성능상 better ⇒ 미리 Team을 당겨올 필요가 없음
즉시 로딩 상황) Team과 Member 객체가 있는데, 로직을 짜다 보니 Member을 조회할 때 항상 Team이 같이 사용되는 상황, Member와 Team을 항상 같이 조회해야 하는 경우 적합.
해결) Member을 조회할 때 Team을 한 번 쿼리로 같이 join으로 조회해서 가지고 오는 것 ⇒ 네트워크 통신 줄어듦 + DB 방문 줄어듦
위와 같이 상황마다 달라진다. 따라서 JPA는 지연 로딩과 즉시 로딩이라는 두 가지의 로딩을 모두 지원한다.
출처 : 자바 ORM 표준 JPA 프로그래밍 - 기본편
'개발 > Spring' 카테고리의 다른 글
[Spring] 스프링 입문 - (회원 관리 예제)웹 MVC 개발 (0) | 2024.11.10 |
---|---|
[Spring] 스프링 입문 - 자바 코들 직접 스프링 빈 등록하기 (0) | 2024.11.07 |
[Spring] 스프링 입문 - 컴포넌트 스캔과 자동 의존관계 설정 (0) | 2024.11.07 |
[Spring] 스프링 입문 - 회원 서비스 테스트 (0) | 2024.11.07 |
[Spring] 스프링 입문 - 회원 서비스 개발 (0) | 2024.11.07 |