
생산성 측면
저장 : jpa.persist(member)
조회 : Member member = jpa.find(memberId)
수정 : member.setName("변경할 이름")
삭제 : jpa.remove(member)
위와 같이 상당히 간편한 과정으로 CRUD를 처리할 수 있다.
유지보수 측면
class Member {
private final Integer memberId;
private final String name;
}
INSERT INTO MEMBER (MEMBER_ID, NAME) VALUES ...
SELECT MEMBER_ID, NAME FROM MEMBER ...
기존의 코드에는 Member에 필드 값을 추가한다면 여러 가지 부가적인 과정들을 처리해야 하지만 JPA는 필드만 추가시켜주면 된다.
class Member {
private final Integer memberId;
private final String name;
// 추가
private final String tel;
}
패러다임의 불일치 해결
앞의 포스팅에서 언급한 객체와 관계형 데이터베이스 간의 패러다임의 불일치를 해결해준다.
(JPA) SQL 중심적인 개발의 문제점
현재는 객체를 관계형 데이터베이스에 관리해야 하는 시대이다. 관계형 데이터 베이스를 메인 디시이고 객체를 사이드디시로 생각하여 개발한다면 아래와 같은 문제점이 나타난다. 1. 무한 반
jwdeveloper.tistory.com
예를 들어 아래와 같은 코드를 작성하면
jpa.persist(son);
기타 작업 (INSERT 쿼리를 두 개로 쪼개서 날린다.) 은 JPA가 처리해준다. (SELECT도 마찬가지로 JOIN으로 알아서 해결해 준다.)
INSERT INTO PARENT ...
INSERT INTO SON ...
연관관계 해결
앞의 포스팅에서 클래스에서 필드의 타입을 인스턴스로 하였을 때 연관관계의 불일치가 일어난다고 하였는데 JPA는 이러한 과정을 해결해준다. (지연 로딩)
Member member = jpa.find(Member.class, memberId);
Team team = member.getTeam();
엔티티의 신뢰성 문제 해결
class MemberService {
public void process() {
Member member = memberDAO.find(memberId);
// 호출할 수 있을까?
member.getTeam();
member.getDelivery().getOrder();
}
}
앞의 포스팅에서 find시에 쿼리를 일일이 찾아서 호출 여부를 확인해야만 하였다고 언급하였지만 JPA는 이러한 과정을 해결해준다.
즉 JPA가 가져온 데이터는 신뢰할 수 있는 데이터라는 뜻이다.
동일한 트랜잭션에서 조회한 엔티티는 같음을 보장해준다.
Integer memberId = 100;
Member member1 = memberDAO.getMember(memberId);
Member member2 = memberDAO.getMember(memberId);
member1= member2;
위의 결과가 TRUE로 나온다.
성능 최적화 기능
- 1차 캐시와 동일성을 보장한다.
- 트랜잭션을 지원하는 쓰기 지연 (버퍼링)
- 즉시 로딩과 즉시 로딩 - 최적화가 필요할 때 즉시 로딩으로 바꿔서 성능 최적화를 이룰 수 있다.

References
www.inflearn.com/course/ORM-JPA-Basic/dashboard
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., 본 강의는 자바 백엔
www.inflearn.com
'Spring > JPA' 카테고리의 다른 글
(JPA) could not initialize proxy - no Session (1) (0) | 2022.11.19 |
---|---|
(JPA) 플러시와 준 영속 상태 (0) | 2021.03.10 |
(JPA) 영속성 컨텍스트 (1차 캐시, 동일성 보장, 지연로딩, 변경감지) (0) | 2021.03.07 |
(JPA) 영속성 컨텍스트의 개요 (0) | 2021.03.07 |
(JPA) SQL 중심적인 개발의 문제점 (0) | 2021.03.04 |