JPA 소개

  • Java Persistence API
  • 자바 진영의 ORM 기술 표준
  • JDBC와 애플리케이션 사이에서 동작한다.


ORM

  • Object-relational mapping (객체 관계 매핑)
  • 객체는 객체대로 설계하고 관계형 데이터베이스는 관계형 데이터베이스대로 설계를 한다.
  • ORM 프레임워크가 중간에서 매핑을 해준다.
  • 대중적인 언어에는 대부분 ORM 기술이 존재한다.


왜 사용하는가?

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


생산성

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

  • jpa를 쓴다는건 자바 컬렉션에 데이터를 삽입하고 추출하는것과 같다는 개념


유지보수

  • 기존의 필드 변경시 모든 SQL을 수정해야한다. (SI에서 일할때만 해도 MyBatis 사용시 그래왔다.)
  • JPA를 사용하면 객체의 필드만 추가해주면 된다.


JPA와 상속 - 조회

//개발자가 할일 
Album album = jpa.find(Album.class, albumId);

//나머지 JPA가 처리해줌

SQL
select I.* , A.*
from ITEM I
JOIN ALBUM A ON I.ITEM_ID = A.ITEM_ID


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


> 연간관계 저장
member.setTeam(team);
jpa.persist(member);

> 객체 그래프 탐색
Member member = jpa.find(Member.class, memberId);
Team team = member.getTeam();


  • JPA는 동일한 트랜잭션에서 조회한 엔티티는 같음을 보장한다.


JPA의 성능 최적화 기능

  1. 1차 캐시와 동일성(identity) 보장
    • 같은 트랜잭션안에서는 같은 엔티티를 반환 - 약간의 조회 성능 향상
    • DB Isolation Level이 Read Commit이어도 애플리케이션에서 Repeatable Read 보장
  2. 트랜잭션을 지원하는 쓰기 지연 (transactional write-behind)
    • 트랜잭션을 커밋할 때까지 Insert SQL을 모은다.
    • JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송
    • 메모리에 쌓았다가 한번에 네트워크를 통해 jdbc batch sql을 사용해서 커밋하는것
  3. 지연로딩 (Lazy Loading)
    • 지연 로딩 : 객체가 실제 사용될 때 로딩
    • 즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회


😄 참고 : 인프런 김영한님의 JPA 기본 강의 및 교재

🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

개인메모

태그:

카테고리:

업데이트: