자바 ORM 표준 JPA 프로그래밍 - 기본편 수업을 듣고 정리한 내용입니다.
CRUD SQL
을 다 만들어줘야 한다.➡️ 너무 비효율적이며, SQL에 의존적인 개발을 피하기 어렵다!
객체 지향 프로그래밍 : 상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공한다.
관계형 데이터베이스 : 키와 값들의 간단한 관계를 테이블화 시킨 매우 간단한 원칙의 전산정보 데이터베이스이다.
객체를 영구 보관하기 위해 다양한 저장소가 있다.
✔️ 객체와 관계형 데이터베이스의 차이
(1) 상속
관계형 DB에는 상속관계가 없다. (있어도 객체와 다른 상속관계)
(2) 연관관계
member.getTeam()
JOIN ON M.TEAM_ID = T.TEAM_ID
➡️ 객체를 테이블에 맞추어 모델링 해야한다.
➡️ 테이블에 맞춘 객체 저장, 객체 모델링 저장까지는 아무 문제가 없다.
다만, 객체 모델링 조회할 때 상당히 복잡하다.
기존 객체 조회할 시
Member member = list.get(memberId);
Team team = member.getTeam();
자바 컬렉션 사용
list.add(member);
➡️ 객체 모델링 조회를 자바 컬렉션에서 관리할시 간단하다.
✏️ 참고
데이터 타입, 데이터 식별 방법에서도 문제가 있다.
✔️ 그래서?
➡️ 해결책 : JPA(Java Persistence API)
자바 진영의 ORM 기술 표준
✔️ ORM
Object-relational mapping
(객체 관계 매핑)
✔️ JPA는 애플리케이션과 JDBC 사이에서 동작
JPA
를 사용하면 JPA
내부에서 JDBC API
를 사용해서 SQL
을 호출해서 DB와 통신한다.JDBC API
를 사용하는 것은 아니다.
JDBC API : 자바 프로그래밍 언어와 다양한 데이터베이스 SQL 또는 테이블 형태의 데이터 사이에 독립적인 연결을 지원하는 표준 →
JDBC API
를 사용하면, 특정 데이터베이스의 정확한 사용법에 대해 몰라도 된다!
✔️ JPA 동작 - 저장
MemberDAO
에서 객체를 저장하기 위해서 Member
객체를 JPA
에 넘긴다.JPA
는 Member
객체를 분석 후 적절한 INSERT
query를 생성한다.JPA
가 내부적으로 JDBC API
를 사용하여 INSERT
query를 DB에 보낸다.
✔️ JPA 동작 - 조회
JPA
에 조회 요청하면 JPA
가 내부적으로 JDBC API
를 사용해서 ResultSet
을 가져온다.JPA
가 ResultSet
을 객체에 매핑해준다.
✔️ JPA는 표준 명세
✔️ JPA를 왜 사용해야 하는가?
✔️ 생산성
JPA에서는 이미 CRUD 코드가 구현되어 있다.
jpa.persist(member)
Member member = jpa.find(memberId)
member.setName(“변경할 이름”)
jpa.remove(member)
✔️ 유지보수
기존에는 필드 변경시 모든 SQL 수정 (귀찮다.)
JPA를 사용시 필드만 추가하면 된다. SQL은 JPA가 처리한다.
✔️ JPA와 패러다임의 불일치 해결
1. JPA와 상속
2. JPA와 연관관계
3. JPA와 객체 그래프 탐색
4. JPA와 비교하기
상속 - 저장
상속 - 조회
연관관계, 객체 그래프 탐색
신뢰할 수 있는 엔티티, 계층
JPA와 비교하기
✔️ JPA의 성능 최적화 기능
(1) 1차 캐시와 동일성 보장
(2) 트랜잭션을 지원하는 쓰기 지연(transactional write-behind
)
INSERT SQL
을 모음JDBC BATCH SQL
기능을 사용해서 한번에 SQL
전송(3) 지연 로딩과 즉시 로딩
JOIN SQL
로 한번에 연관된 객체까지 미리 조회
🔔 ORM
- 객체와 RDB 두 기둥위에 있는 기술이다. (RDB 공부 많이 해야함)
참고