JPA는 대안이다. 아주 훌륭한.
어떤 기술로부터 , 왜, 어떻게 JPA가 탄생하고 쓰이게 되었을까 에 대해 포스팅해본다.
01. SQL 중심적인 개발의 문제점
- 무한 반복, 지루한 코드 CRUD .. INSERT INTO , UPDATE , INSERT , DELETE
✋ 객체에 필드를 하나추가한다면? 모든 쿼리문에 필드를 추가해야한다.
- Member 객체를 조회할 때 속해져있는 Team 도 같이 조회해야할까?
02. 패러다임의 불일치
📍 객체 vs 관계형 데이터 베이스의 차이
1. 상속
- 관계형 DB에는 상속 개념이 존재하지 않는다.
- data를 저장하려면 객체를 분해하여 해당 테이블에 맞는 data를 각각 INSERT , INSERT , UPDATE ... 해주어야한다.
- 따라서 DB에 저장할 객체에는 상속 관계를 쓰지 않는다.
2. 연관관계
- 객체는 참조를 사용한다. member.getTeam()
- 테이블은 외래 키를 사용한다. JOIN ON M.TEAM_ID = T.TEAM_ID
상속과 연관관계 외에도 데이터 타입, 데이터 식별 방법 등등 을 생각하면,
객체와 관계형 데이터 베이스의 간극 은 너무나 광활하다.
✋ 여기서 잠시, 자바 컬렉션의 저장과 조회를 생각하면 이는 너무나 간단하다.
그렇다면, 객체를 자바 컬렉션에 저장하듯이 DB에 저장할 수는 없을까?
JPA | Java Persistence API : 자바 진영의 ORM 기술 표준
📍 ORM ?
- Object-relational mapping : 객체 관계 매핑
- 객체는 객체대로 설계
- 관계형 데이터 베이스는 관계형 데이터 베이스대로 설계
- ORM 프레임워크가 중간에서 매핑
- 대중적인 언어에는 대부분 ORM 기술이 존재
📍 JPA는 애플리케이션과 JDBC 사이에서 동작
- JPA 동작 - 저장
- JPA 동작 - 조회
📍 JPA를 왜 사용해야 하는가?
- SQL 중심적인 개발에서 객체 중심으로 개발
- 생산성 : 저장˙조회˙수정˙삭제가 용이
- 유지보수 : JPA 엔티티클래스에서 필드만 추가하면 SQL (쿼리)는 JPA가 처리한다.
- 패러다임의 불일치 해결 : 상속, 연관관계, 객체 그래프 탐색, 비교 전부 JPA가 내.외부적으로 해결한다.
- 성능 : 1차 캐시와 동일성 보장, 트랜잭션을 지원하는 쓰기 지원 , 지연로딩
- 데이터 접근 추상화와 벤더 독립성
- 표준
'이론 > JPA' 카테고리의 다른 글
[JPA] Proxy 프록시 (0) | 2021.09.18 |
---|