본문 바로가기
JPA/JPA원리

1 왜 JPA를 사용해야 하는가?

by 킹차니 2021. 7. 2.
김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다.
https://www.inflearn.com/courses?s=%EA%B9%80%EC%98%81%ED%95%9C

객체 지향과 관계형DB의 차이

 

JPA가 없다면 객체지향 중심적인 개발을 하기가 어렵습니다. 

Member라는 클래스를 설계할 때에도 DB의 테이블에 맞추어 설계해야합니다.

또 다른 큰 문제가 있는데, 아래의 다이어그램을 보면

객체지향 언어에서의 Album은  Item을 상속받았므로 필드에 id, name, price가 있는 것과 마찬가지입니다. 

하여 Album의 id, name, price를 조회하고 싶을 때는 

Album.getId();
Album.getName();
Album.getPrice();
Album.getArtist();

위와 같이 조회가 가능하지만

 

DB테이블에서 위와 같이 조회하고 싶다면 ITEM테이블과 ALBUM테이블이 나누어져 있으므로, 

하나의 객체에 대해서만 조회할 뿐인데, 2개이상의 테이블을 건드려야합니다.

 

결국 데이터는 DB에 담겨있으니 이처럼 DB에 의존적인 방법을 사용해야 조회가 가능할 것입니다.

 

 

하지만 자바 컬렉션에 저장하는 방식으로 저장하고, 조회할 수 있다면 정말 좋을 것입니다.

JPA는 이것을 가능하게 합니다.

예를 들어 아래와 같이

List<Member> list = ArrayList<>();

list.add(album1);
list.add(album2);

list.get(album1);

DB의 데이터들을 자바 컬렉션 안의 객체들을 저장하고, 조회하는 것처럼 다루는 것이 가능해지는 것입니다.

이러한 일이 가능해지면 부모 타입으로 조회하여 다형성을 활용할 수도 있습니다.

Item item = list.get(album1);

 

위에서 본 객체지향 언어에서의 객체와 관계형 DB의 차이는 객체는 참조를 사용하고, 테이블은 외래키를 사용하는 것에서 나옵니다.

 

 

우리는 객체를 설계하므로, DB와 같은 설계가 아닌 객체답게 설계하고 싶다!

 

 

 

 

그리하여 탄생한것이 JPA입니다.

JPA

- JAVA Persistence API

- 자바 진영의 ORM기술 표준

 

ORM이란?

  • Object-Relational Mapping(객체 관계 매핑)
  • 객체는 객체대로 설계
  • 관계형 데이터베이스는 관계형 데이터베이스대로 설계 - ORM 프레임워크가 중간에서 매핑
  • 대중적인 언어에는 대부분 ORM 기술이 존재

JPA는 아래와 같이 동작합니다.

그림에서 보듯이 JDBC API를 사용합니다.

 

저장
조회

객체지향과 DB의 패러다임의 불일치를 해결한다는 것이 중요합니다.

 

 

 

 

또한 JPA는 좋은 기능들을 지원합니다.

 

1. 1차 캐시와 동일성(identity) 보장


2. 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)

 

3. 지연 로딩(Lazy Loading)

 

 

 

 1. 1차 캐시와 동일성(identity) 보장 

 

 2. 트랜잭션을 지원하는 쓰기 지연(transactional write-behind) 

 

 3. 지연 로딩(Lazy Loading)