JPA 소개

객체를 자바 컬렉션에 저장, 조회하듯이 DB에 저장, 조회하기 위해 등장

JPA란?

  • Java Persistence API

  • 자바 진영의 ORM 기술 표준

ORM이란?

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

  • 객체는 객체대로 설계

  • 관계형 데이터베이스는 관계형 데이터베이스대로 설계 - ORM 프레임워크가 중간에서 매핑

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

JPA는 애플리케이션과 JDBC 사이에서 동작한다!

Java - JPA - DB 구조
JPA 동작 - 저장
JPA 동작 - 조회

JPA는 표준 명세(Specification)

  • JPA는 인터페이스의 모음이다.

  • JPA 2.1 표준 명세를 구현한 3가지 구현체 하이버네이트, EclipseLink, DataNucleus

JPA를 사용해야하는 이유

  • SQL 중심적인 개발에서 객체 중심으로 개발

  • 생산성 향상

  • 유지보수 편리

  • 패러다임의 불일치 해결

  • 성능 향상

  • 데이터 접근 추상화와 벤더 독립성 - 표준

JPA와 CRUD = 생산성 향상

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

유지보수 편리 : 기존에는 필드 변경시 모든 SQL 수정 Member 객체에 필드하나 추가할 경우 발생하는 SQL 쿼리

INSERT INTO MEMBER(MEMBER_ID, NAME, TEL) VALUES
SELECT MEMBER_ID, NAME, TEL FROM MEMBER M
UPDATE MEMBER SET ... TEL = ?

JPA에서 필드 수정 : 필드만 추가하면 됨, SQL은 JPA가 처리한다!

JPA와 패러다임의 불일치 해결 1.JPA와 상속 2.JPA와 연관관계 3.JPA와 객체 그래프 탐색 4.JPA와 비교하기

JPA와 상속 - 저장 개발자는 아래 코드만 작성하면 나머지 SQL 쿼리는 JPA가 처리해준다! SQL 처리 : INSERT INTO ITEM ... INSERT INTO ALBUM ...

jpa.persist(album);

JPA와 상속 - 조회 개발자는 아래 코드만 작성하면 나머지 SQL 쿼리는 JPA가 처리해준다! 객체 타입과 식별자만 넣어주면됨! find(Member.class,id) SQL 처리 : SELECT I.*, A.* FROM ITEM I JOIN ALBUM A ON I.ITEM_ID = A.ITEM_ID

Album album = jpa.find(Album.class, albumId);

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

member.setTeam(team);

jpa.persist(member);

객체 그래프 탐색

Member member = jpa.find(Member.class, memberId);

Team team = member.getTeam();

신뢰할 수 있는 엔티티, 계층 동일한 트랜잭션에서 조회한 엔티티는 같음을 보장한다!

JPA의 성능 최적화 기능

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

  2. 트랜잭션을 지원하는 쓰기 지연(transactional write-behind) - 트랜잭션 커밋할 때까지 INSERT SQL 모음(커밋하는 순간에 DB에 INSERT SQL 모아 보냄) - JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송

  3. 지연 로딩(Lazy Loading) - UPDATE, DELETE로 인한 로우(ROW)락 시간 최소화

    - 트랜잭션 커밋 시 UPDATE, DELETE SQL 실행하고, 바로 커밋

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

(여담)OOP, RDB 다룬는 기술 둘 다 잘해야한다. 특히(의외로?) 둘 중 하나만 꼽자면 RDB 다루는 기술이 더 중요하다고 한다.

Last updated

Was this helpful?