1. SQL 중심적인 개발의 문제점
1) 객체 지향 언어 & 관계형 데이터베이스
- 객체를 관계형 DB에 관리
아래 그림처럼, SQL에 의존적인 개발을 피하기 어렵다.

2) 객체와 관계형 데이터베이스의 차이
(1) 상속
객체 간의 상속 관계를 SQL 쿼리문으로 표현하려면 JOIN 연산을 사용해야 한다.
하지만, 상속 계층이 깊어질수록 JOIN 연산도 복잡해지며
상속 관계를 가진 객체들을 쿼리하려면 매번 JOIN 및 필터링을 수행해야 한다.

(2) 연관관계
객체는 참조를 사용
: member.getTeam()
테이블은 외래 키를 사용
: JOIN ON M.TEAM_ID = T.TEAM_ID

(3) 데이터 타입




(4) 데이터 식별 방법


2. JPA 소개
1) JPA 개념과 동작 방식
JPA
- Java Persistence Api
- 자바 진영의 ORM 기술 표준
ORM
- Object Relational Mapping
- 객체는 객체대로 설계
- RDB는 RDB대로 설계
- ORM 프레임워크(JPA)가 중간에서 매핑
JDBC
- Java DataBase Connectivity
- 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API
: SQL 쿼리를 실행해, Insert / Select / Update / Delete 실행 가능

2) JPA를 왜 사용해야 하는가?
- SQL 중심적인 개발에서, 객체 중심으로 개발
- 생산성
- 유지보수
- 패러다임의 불일치 해결
- 성능 최적화
- 데이터 접근 추상화
→ 실제 DB 연결 및 통신에 대한 복잡한 세부 사항은 JDBC가 처리
- 벤더 독립성
→ DB 종류와 무관하게 동작
*생산성 - JDBC와 CRUD
저장 : em.persist(member)
조회 : em.find(memberId)
수정 : member.setName(_)
삭제 : em.remove(member)
*유지보수 - JPA 필드만 추가하면 됨(entity), SQL은 JPA가 처리

*JPA와 패러다임의 불일치 해결
(1) JPA와 상속
(2) JPA와 연관관계
(3) JPA와 객체 그래프 탐색
*JPA의 성능 최적화 기능
(1) 1차 캐시와 동일성 보장
→ 동일한 트랜잭션에서는 같은 entity 반환
(2) 트랜잭션을 지원하는 쓰기 지연
→ commit 할 때, 한 번에 SQL 전송
(3) 지연 로딩
→ 객체가 실제 사용될 때 로딩
→ 즉시 로딩 : 리팩토링 하면서 성능 최적화할 때 사용
'Spring > ORM' 카테고리의 다른 글
6. 다양한 연관관계 매핑 (0) | 2023.09.03 |
---|---|
5. 연관관계 매핑 기초 (0) | 2023.09.02 |
4. 엔티티 매핑 (0) | 2023.09.02 |
3. 영속성 관리 - 내부 동작 방식 (0) | 2023.08.29 |
2. JPA 시작하기 (0) | 2023.08.29 |