JPA
JPA소개
JANNNNNN
2024. 3. 21. 11:17
JPA란
- "Java Persistence API"의 약자로, 자바 애플리케이션에서 관계형 데이터베이스와 상호작용하기 위한 자바 표준 API
- 개발자가 SQL쿼리를 직접 작성하지 않고도 객체 지향적 데이터를 다룰 수 있도록 한다. ex)엔티티 매핑
- 영속성 컨텍스트로 객체를 관리하여, DB와 트랜잭션 처리 및 연산을 추상화해 데이터 관리에 용이하다.
- 객체답게 모델링 할수록 매핑작업만 늘어난다. (SQL 의존적인 개발을 피하기 어려움)
- 객체를 SQL로 변경하면서 많은 리소스를 낭비한다!
- 개발자 ≒ SQL 매퍼 수준!
- 패러다임의 불일치
- 객체지향과 관계형 데이터베이스는 나온 사상이 다름
- 관계형 데이터베이스 - 객체를 어떻게 정규화해서 저장을 할까!
- 객체지향 - 어떻게 추상화하고 관리를 잘 할까?
- 객체와 RDB의 차이
- 상속
- 연관관계
- 객체는 참조 사용 : member.getTeam()
- RDB는 외래키 사용 : JOIN ....
- 데이터 타입
- 데이터 식별 방법
- 객체지향과 관계형 데이터베이스는 나온 사상이 다름
-> Java Persistence API (영구저장 API) : 자바 진영의 ORM 표준
- 이건 스펙이므로 껍데기만 있음
- 구현한 것이 하이버네이트
- 객체는 객체답게 설계
- RDB는 RDB답게 설계
- 중간에서 매핑은 ORM 프레임워크가!
- 그렇게 JPA 탄생!
- 구현체 종류
- Hibernate (오픈소스)
- EclipseLink
- DataNucleaus
- etc..
- 구현체 종류
JPA의 구조
JPA는 애플리케이션과 JDBC 사이에서 동작
JPA 동작 - 저장
JPA 동작 - 조회
JPA는 표준 명세
- JPA는 인터페이스의 모음
- JPA 2.1 표준 명세를 구현한 3가지 구현체
- 하이버네이트, EclipseLink, DataNucleus
- 왜 JPA를 사용해야 하는가?
- SQL 중심적인 개발에서 객체 중심으로 개발
- 생산성
- C : jpa.persist(member);
- R : Member member = jpa.find(memberId);
- U : member.setName("안녕하세요");
- D : jpa.remove(member);
- 유지보수
- 패러다임의 불일치 해결
- 성능
- 1차 캐시
- Lazy loading & Eager Loading
- N+1문제도 세팅을 통해 해결 가능
- 트랜잭션을 지원하는 쓰기 지연 - Insert
- 모았다가 커밋하는 순간에 한 번에 네트워크를 탐!
- 데이터 접근 추상화와 벤더 독립성
- 표준