[자바 ORM 표준 JPA 프로그래밍 - 기본편] JPA 소개(2)

이재표·2023년 9월 12일
0

JPA소개

JPA?

  • Java Persistence Api
  • 자바 진영의 ORM 기술 표준

ORM?

  • Object-relational mapping(객체 관계 매핑)
    -> 객체와 관계형db를 중간에서 패러다임의 불일치를 해결해주는 기술

자바 어플리케이션이 db와 통신하려면 사용자가 직접 jdbc api를 사용하던것을 jpa가 대신 사용하는것

멤버객체를 저장할때 멤버 객체를 멤버dao에 넘기고 멤버 dao가 jpa에게 멤버회원 객체를 저장하라 던지면 jpa가 분석하여 쿼리를 직접 다 만들어서 날려준다.

우리가 한것은 객체를 던진것밖에 없다. 즉 jpa가 중간에서 패러다임의 불일치를 해결해준다!

조회할때 jpa에게 회원아이디를 전달하면, 조회쿼리를 만든후, 매핑 하여 객체를 만들어 개발자에게 전달

객체와 데이터베이스간의 패러다임 불일치 해결!

표준 명세는 인터페이스의 모음으로 볼수 있다.주로 하이버네이츠와 이클립스링크정도의 구현체를 이용함.

jpa를 왜 사용해야 할까?

  • 객체 중심의 개발을 진행할수 있다. -> 패러다임 불일치의 해결
  • 생상성과 유지보수
  • 데이터 접근 추상화와 벤더 독립성

sql이 전혀 필요없고, 메서드를 사용하면 된다. 트랜잭션범위 내에서 객체값을 수정하면 트랜잭션이 끝나는 순간 update가 나가고 커밋되게 된다.(더티체킹)

쿼리를 모두 직접 수정해야했던 이전과 달리

쿼리를 직접 작성할 필요 없어짐

가장 큰 장점은 "패러다임의 불일치"를 해결해준다는 점

"패러다임의 불일치"로 인해 생긴 4가지 문제점을 모두 해결!
1. 상속
2. 연관관계
3. 객체 그래프 탐색
4. 비교하기

  • 단지 메서드를 실행시키기만 하면 JPA가 자동으로 쿼리를 작성하여 날려준다.

find()메서드만 실행하면 객체 탐색그래프가 가능해져, 엔티티를 신뢰할수 있다!!

❗지연로딩을 이용하여 성능최적화 하여 걱정하지 않아도 됨

같은 트랜잭션 안에서는 조회하면 같은 인스턴스 조회하게된다.

그렇다면 어떤 원리로 최적화가 이루어졌을까?

3가지를 통해 최적화 진행

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

중간에 기술이 끼게되면서 두가지 이점이 있다.(jdbc, sql사이에 jpa)
1. 모아서 보내는게 가능해짐(버퍼 writing)
2. 캐시 조회할때 이미 조회한것은 저장했다가 재사용 가능

❗같은 트랜잭션 안에서만 가능하기에 한가지 메서드가 여러번 실행되더라도 각각의 트랜잭션이기에 캐싱 안됨

버퍼를 통해 데이터를 모을수 있다. jdbc의 배치sql을 이용하면 모아둔 쿼리를 네트워크에 한번에 보내고 트랜잭션을 커밋함
-> 네트워크 비용이 줄어듬

JPA는 지연로딩과 즉시로딩을 지원한다.

지연로딩
객체가 실제로 사용될때 로딩. 멤버를 조회할때 멤버만 조회. 팀이 실제 사용될때 쿼리를 날려서 실제 팀데이터를 가져온다(프록시를 초기화한다)

즉시로딩
join쿼리를 통해 연관된 객체를 미리 한번에 조회
성능을 위해서 지연로딩을 먼저 설정한후 개발하면서 필요할때 즉시로딩으로 최적화함

0개의 댓글