JPA 소개

나나·2021년 5월 5일
0

자바 ORM 표준 JPA 프로그래밍 - 기본편 을 듣고 정리하는 글

JPA(Java Persistence API)

  • 자바 진영 ORM 기술 표준
  • JPA는 인터페이스의 모음
  • 마치 Java Colleciton을 쓰는 느낌

ORM(Object-relational Mapping)

  • 객체는 객체대로 설계하고 RDB는 RDB대로 설계한다.
  • ORM 프레임워크가 중간에서 매핑해주는 역할을 수행한다.
  • 애플리케이션과 JDBC 사이에서 동작
  • 패러다임의 불일치를 해소시켜준다

왜 JPA를 사용해야할까?

  • SQL 중심이 아닌 객체 중심으로 개발
  • 생산성의 증가
  • 유지보수
  • 패러다임의 불일치 해결
  • 성능 이슈
  • 데이터 접근 추상화와 벤더 독립성

생산성 - JPA와 CRUD

저장 : jpa.persist(member)
조회 : Member member = jpa.find(memberId)
수정 : member.setName("name")
삭제 : jpa.remove(member)

기본적인 CRUD가 정의되어 있다.

유지보수

필드 변경시 해당 필드만 추가하면 됨, SQL은 JPA가 알아서 처리해준다.

패러다임의 불일치 해결

  1. JPA와 상속 - 저장
    jpa.persist(album); 이라는 코드 한 줄 실행하면, 나머지는 JPA가 알아서INSERT INTO ITEM / INSERT INTO ALBUM 라는 쿼리를 날린다.
  2. JPA와 상속 - 조회
    Album album = jpa.find(Album.class, albumId);라는 코드 한 줄 실행하면, SELECT I.*, A.* FROM ITEM I JOIN ALBUM A ON I.ITEM_ID = A.ITEM_ID 라는 쿼리를 알아서 실행한다.

JPA와 비교하기

String memberId = "100";
Member member1 = jpa.find(Member.class, memberId);
Member member2 = jpa.find(Member.class, memberId);

member1 == member2; // true

같은 트랜잭션 내에서 조회한 엔티티는 1차 캐시로 동일성을 보장한다.

JPA의 성능 최적화 기능

  • 1차 캐시와 동일성 보장
  • 트랜잭션을 지원하는 쓰기 지연
  • 지연 로딩

1차 캐시의 동일성 보장

  • 같은 트랜잭션 내에서는 동일 엔티티를 반환한다
String memberId = "100";
Member member1 = jpa.find(Member.class, memberId);
Member member2 = jpa.find(Member.class, memberId);

member1 == member2; // true

조회 쿼리를 한번만 실행함

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

  1. 트랜잭션을 커밋할 때까지 INSERT SQL을 모은다.
  2. JDBC BATCH SQL 기능을 사용, 한번에 SQL 전송
transaction.begin(); // transaction start

em.persist(memberA);
em.persist(memberB);
em.persist(memberC);
// 여기까지 SQL 쿼리 DB에 보내지 않음

// 커밋하는 순간 데이터 베이스에 SQL을 모아서 전송, 네트워크 통신 한번만 하면 됨
transaction.commit(); // transaction commit

지연 로딩과 즉시 로딩

  • 지연 로딩 : 객체가 실제 사용될 때 로딩
  • 즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회
profile
I can end suffering! 일단해,,🤨😬

0개의 댓글