-
[JPA] JPA 소개JPA 2023. 3. 13. 21:16
공부일자 : 2023.03.09
참조 : 자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한)
1. sql 중심적인 개발의 문제점
어플리케이션은 객체지행적인 언어를 사용하고
DB는 대부분 관계형DB사용한다.
즉 객체를 관계형 DB에 관리하게 되고 이를 위해서는 SQL이 사용된다.
* 문제점
1) 무한반복, 지루함
필드가 변경되면 모든 sql을 다 고쳐야하는 번거로움이 존재한다.
2) 패러다임의 불일치
객체 지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성과 같은 시스템의 복잡성을 해결해줄 수 있는 특징을 가지고 있는 반면 RDB는 그렇지 않다.* 객체와 RDB의 차이
객체 RDB 상속 상속 개념 존재 슈퍼타입 - 서브타입 연관관계 참조 외래키 탐색의 범위 자유로움 한계가 존재 => 이는 엔티티의 신뢰문제로 이어진다.
3) 계층형 아키텍쳐
진정한 의미의 계층분할이 어렵다.* JPA의 개발 배경
즉, 객체답게 모델링할수록 매핑 작업만 늘어나고 SQL로 전환하는 작업이 굉장히 힘들어진다.
하지만 객체를 영구보관하는 현실적인 대안은 관계형 데이터베이스이다.
객체 => sql변환 => RDB에 sql로 저장
여기에서 개발자는 sql 매퍼로서 존재하게 된다.그렇다면 객체를 자바 컬렉션에 저장하듯이 DB에 저장할 수 없을까?
=> JPA (Java Persistence Application)2. JPA 소개
JPA는 자바진영의 ORM 기술 표준이다.
ORM? Object-Relational Mapping(객체 관계 매핑)
JPA는 어플리케이션과 JDBC사이에서 동작한다.
JAVA - JPA - JDBC API - (SQL) - DB
JPA는 엔티티를 받아서 분석하고 SQL을 생성하여 JDBC API를 사용하여 RDB로 던진다.
이것으로 패러다임의 불일치를 해결할 수 있다.* 역사
EJB(엔티티 빈) 하이버네이트 JPA - 자바 표준
- 복잡
- 실효성이 나쁨- 오픈 소스 - 하이버네이트 개발자를 스카웃하여 만든 JAVA 표준 ORM 기술
- 오픈 소스에 비해 더 정제된 효과
- 오픈소스에서 출발한 실용성이 있는 표준 명세JPA는 표준 명세이다.(인터페이스의 모음)
(하이버네이트, EclipseLink, DataNucleus)
하이버네이트 구현체를 쓴다고 생각하면 된다.
* 왜 사용해야하는가?
1) sql중심적인 개발에서 객체 중심적인 개발
2) 생산성ex)
jpa.persist(저장)
jpa.find(조회)
jpa.set필드명("변경할 내용")(수정)
jpa.remove(삭제)해당 명령어로 알아서 sql을 생성하여 주니 개발자는 더이상 SQL을 신경쓰지 않아도 된다.
3) 유지보수
필드변경 시 모든 쿼리 수정할 필요가 없다.
4) 패러다임의 불일치 해결
- 상속 : 슈퍼타입서브타입관계의 테이블, 상속관계를 가지고 다 알아서 해줌
- 연관관계
- 객체그래프탐색 : 참조, 탐색도 모두 가능하고 성능까지 고려해줌
- 신뢰할 수 있는 엔티티, 계층 : 자유로운 데이터 탐색 가능하며 동일한 트랜잭션에서 조회한 엔티티는 같음을 보장한다.5) 성능
- 1차캐시와 동일성 보장: 같은 트랜잭션 안에서는 같은 엔티티를 반환한다.(repeatable read가능 메모리에서 동일한 엔티티를 찾아 반환한다,)
- 트랜잭션을 지원하는 쓰기 지연
: 트랜잭션을 커밋할때까지 insert SQL을 모아 JDBC batch SQL 기능을 사용해서 한번에 SQL을 전송한다,
때문에 네트워크 통신이 줄어든다,
- 지연 로딩과 즉시 로딩: JPA는 둘 다 지원한다,
만약 관계성이 있는 객체가 있는 경우 설정을 통해 지연로딩, 즉시로딩을 설정해 둘 수 있다.지연로딩 즉시로딩 객체가 실제 사용될 때 로딩 join sql로 한번에 연관된 객체까지 미리 조회 6) 데이터 접근 추상화와 벤더 독립성
7) JAVA 표준 기술
ORM은 객체와 RDB 두 기둥위에 있는 기술이다.
즉, 둘 다 잘 알고 고민해야 JPA를 잘 사용할 수 있다.'JPA' 카테고리의 다른 글
[JPA] JPA 프로젝트 생성 (0) 2023.03.14