JPA 소개
Last updated
Last updated
객체를 자바 컬렉션에 저장, 조회하듯이 DB에 저장, 조회하기 위해 등장
JPA란?
Java Persistence API
자바 진영의 ORM 기술 표준
ORM이란?
Object-relational mapping(객체 관계 매핑)
객체는 객체대로 설계
관계형 데이터베이스는 관계형 데이터베이스대로 설계 - ORM 프레임워크가 중간에서 매핑
대중적인 언어에는 대부분 ORM 기술이 존재
JPA는 애플리케이션과 JDBC 사이에서 동작한다!
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 쿼리
JPA에서 필드 수정 : 필드만 추가하면 됨, SQL은 JPA가 처리한다!
JPA와 패러다임의 불일치 해결 1.JPA와 상속 2.JPA와 연관관계 3.JPA와 객체 그래프 탐색 4.JPA와 비교하기
JPA와 상속 - 저장 개발자는 아래 코드만 작성하면 나머지 SQL 쿼리는 JPA가 처리해준다! SQL 처리 : INSERT INTO ITEM ... INSERT INTO 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
JPA와 연관관계, 객체 그래프 탐색 연관관계 저장
객체 그래프 탐색
신뢰할 수 있는 엔티티, 계층 동일한 트랜잭션에서 조회한 엔티티는 같음을 보장한다!
JPA의 성능 최적화 기능
1차 캐시와 동일성(identity) 보장 - 같은 트랜잭션 안에서는 같은 엔티티를 반환 - 약간의 조회 성능 향상 - DB Isolation Level이 Read Commit이어도 애플리케이션에서 Repeatable Read 보장
트랜잭션을 지원하는 쓰기 지연(transactional write-behind) - 트랜잭션 커밋할 때까지 INSERT SQL 모음(커밋하는 순간에 DB에 INSERT SQL 모아 보냄) - JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송
지연 로딩(Lazy Loading) - UPDATE, DELETE로 인한 로우(ROW)락 시간 최소화
- 트랜잭션 커밋 시 UPDATE, DELETE SQL 실행하고, 바로 커밋
지연 로딩과 즉시 로딩 • 지연로딩:객체가실제사용될때로딩 • 즉시 로딩: JOIN SQL로 한번에 연관된 객체까지 미리 조회
(여담)OOP, RDB 다룬는 기술 둘 다 잘해야한다. 특히(의외로?) 둘 중 하나만 꼽자면 RDB 다루는 기술이 더 중요하다고 한다.