JPA/개념

[JPA] JPA 개념

Boradoris 2023. 2. 20. 19:23

JPA란?

- Java Persistence API

- 자바 진영의 ORM 기술 표준

- 인터페이스의 모음

- 애플리케이션과 JDBC 사이에서 동작

 

 

ORM이란?

- Object-relational mapping (객체 관계 매핑)

- 객체는 객체대로 설계

- 관계형 데이터베이스는 관계형 데이터베이스대로 설계

- ORM  프레임워크가 중간에서 매핑을 도와줌

- 대중적인 언어에는 대부분 ORM 기술 존재

 

 

JPA 동작 원리

애플리케이션과 JDBC 사이에서 동작

 

 

JPA 동작 - 저장

 

 

JPA 동작 - 조회

 

 

 

JPA 소개

 

EJB → 하이버네이트 (오픈 소스) → JPA (자바 표준)

 

 

 

JPA → 표준 명세

 

  • JPA는 인터페이스의 모음
  • JPA 2.1 표준 명세를 구현한 3가지 구현체
  • 하이버네이트, EclipseLink, DataNucleus
  • 대부분 하이버네이트 사용

 

 

 

JPA 버전

  • JPA 1.0(JSR 220) 2006년 : 초기 버전. 복합 키와 연관관계 기능이 부족
  • JPA 2.0(JSR 317) 2009년 : 대부분의 ORM 기능을 포함, JPA Criteria 추가
  • JPA 2.1(JSR 338) 2013년 : 스토어드 프로시저 접근, 컨버터(Converter), 엔티티 그래프 기능이 추가

 

 

JPA를 사용하는 이유

  • SQL 중심적인 개발에서 객체 중심으로 개발
  • 생산성
  • 유지보수
  • 패러다임의 불일치 해결
  • 성능
  • 데이터 접근 추상화와 벤더 독립성
  • 표준

 

 

생산성 - JPA와 CRUD

  • 저장: jpa.persist(member)
  • 조회: Member member = jpa.find(memberId)
  • 수정: member.setName(“변경할 이름”)
  • 삭제: jpa.remove(member)

 

 

유지보수 - 기존 : 필드 변경 시 모든 SQL 수정

 

유지보수 - JPA : 필드만 추가, SQL은 JPA가 처리

 

 

패러다임의 불일치 해결

  1. JPA와 상속
  2. JPA와 연관관계
  3. JPA와 객체 그래프 탐색
  4. JPA와 비교하기

 

 

 

JPA와 상속

그림은 객체 상속 관계와 DB 테이블 관계를 나타내고 있다.

 

 

저장

 

  • 개발자의 코드 한 줄로 JPA가 SQL 여러 줄을 처리

 

 

조회

 

  • 개발자 : 복잡한 SQL 코드 작성 X
  • JPA : JOIN과 같은 복잡한 SQL 코드 처리

 

 

JPA와 연관관계, 객체 그래프 탐색

 

 

신뢰할 수 있는 엔티티, 계층

 

 

JPA와 비교하기

 

 

 

JPA의 성능 최적화 기능

  1. 1차 캐시와 동일성 (identitiy) 보장
  2. 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind)
  3. 지연 로딩(Lazy Loading)

 

1차 캐시와 동일성 보장

  1. 같은 트랜잭션 안에서는 같은 엔티티를 반환 - 약간의 조회 성능 향상
  2. DB Isolation Level이 Read Commit이어도 애플리케이션에서 Repeatable Read 보장

 

 

 

트랜잭션을 지원하는 쓰기 지연 - INSERT

  1. 트랜잭션을 커밋할 때까지 INSERT SQL을 모음
  2. JDBC BATCH SQL 기능을 사용해서 한 번에 SQL 전송

 

 

 

트랜잭션을 지원하는 쓰기 지연 - UPDATE

  1. UPDATE, DELETE로 인한 로우(ROW)락 시간 최소화
  2. 트랜잭션 커밋 시 UPDATE, DELETE SQL 실행하고 바로 커밋

 

 

지연 로딩과 즉시 로딩

  • 지연 로딩: 객체가 실제 사용될 때 로딩
  • 즉시 로딩: JOIN SQL로 한 번에 연관된 객체까지 미리 조회

 

 

*일반적으로는 지연 로딩으로 개발, 이후 성능 최적화를 위해 즉시 로딩으로 교체 작업

 


출처 : https://www.inflearn.com/course/ORM-JPA-Basic

'JPA > 개념' 카테고리의 다른 글

[JPA] JPA 기본 동작 및 JPQL 소개  (0) 2023.02.21
[JPA] 프로젝트 환경설정  (0) 2023.02.21