-
[JPA 기본편] 1. JPA 소개INFLEARN/JPA 프로그래밍 - 기본편 2021. 11. 5. 18:09
1. JPA 소개
[강의 정리] 김영한님 :: 자바 ORM 표준 JPA 프로그래밍 - 기본편
1. SQL 중심적인 개발의 문제점
# 무한 반복, 지루한 코드
- CRUD ...
- 자바 객체를 SQL로 ...
- SQL을 자바 객체로 ...
=> SQL 의존적인 개발
# 패러다임의 불일치 (객체 vs 관계형 데이터베이스)
- 객체를 영구 보관하는 다양한 저장소 (RDB, NoSQL, File, OODB)
- 현실적인 대안은 객체를 관계형 데이터베이스에 저장하는 것
# 객체와 관계형 데이터베이스의 차이
- 상속
- DB에 저장해야할 객체에 상속 관계를 쓴다면, 각각의 테이블에 따른 조인 SQL을 생성하고 또 각각의 객체를 생성하는 등등 너무 복잡한 프로세스를 갖고 있어서 DB에 저장할 객체에는 상속 관계를 쓰지 않음
- 하지만, 자바 컬렉션에서 조회한다면 list 등으로 간단하게 조회 후 다형성 활용도 가능함
- 연관관계
- 데이터 타입
- 데이터 식별 방법
# 계층형 아키텍처 진정한 의미의 계층 분할이 어려움
- 객체 비교
- 자바 컬렉션에서 조회하여 비교하면
2. JPA 소개
# JPA
- Java Persistence API
- 자바 진영의 ORM 기술 표준
# ORM
- Object-relational mapping (객체 관계 매핑)
- 객체는 객체대로 설계
- 관계형 데이터베이스는 관계형 데이터베이스대로 설계
- ORM 프레임워크가 중간에서 매핑
- 대중적인 언어에는 대부분 ORM 기술이 존재
# JPA는 애플리케이션과 JDBC 사이에서 동작
- 저장
- 조회
# JPA 표준 명세
- JPA는 인터페이스의 모음
- JPA 2.1 표준 명세를 구현한 3가지 구현체
- JPA 2.1 : 스토어드 프로시저 접근, 컨버터, 엔티티 그래프 기능 추가
- 하이버네이트 (8-90%), EclipseLink, DataNucleus
# JPA를 사용해야하는 이유
- SQL 중심적인 개발에서 객체 중심으로 개발
- 생산성
- 유지보수
- 성능
- 패러다임의 불일치 해결
- 데이터 접근 추상화와 벤더 독립성
- 표준
# JPA의 성능 최적화 기능
- 1차 캐시와 동일성(Identity) 보장
- 실무에서 크게 도움되지는 않지만 같은 트랜젝션 안에서는 같은 엔티티를 반환하여 약간의 조회 성능 향상
- DB isoloation level이 read commit 이어도 애플리케이션에서 repeatable read 보장
- 트랜젝션을 지원하는 쓰기 지연 (transactional write-behind)
- Insert
- 트랜젝션을 커밋할 때까지 INSERT SQL을 모음
- JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송
- Update
- UPDATE, DELETE로 인한 ROW 락 시간 최소화
- 트랜젝션 커밋 시 UPDATE, DELETE SQL 실행하고 바로 커밋
- Insert
- 지연 로딩 (Lazy Loading)
- 지연 로딩 : 객체가 실제 사용될 때 로딩 (단점 : 네트워크를 여러번 탄다)
- 즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회 (지연 로딩 최적화,,)
# ORM은 객체와 RDB 두 기둥위에 있는 기술