[Spring Boot] 스프링부트 (IntelliJ)/JPA

JPA란?

류도토리 2023. 12. 19. 18:06

 - Java Persistence API

 - 자바 진영의 ORM 기술 표준

 - JPA는 기존에 우리가 직접 썼던 JDBC API를 날렸던걸 대신 사용하여 데이터를 주고받는다.

 

API

 - Application Programming interface 정해진 인터페이스로 프로그래밍하여 프로그램을 만들 수 있는 도구

 

ORM이란?

 - Object-relational mapping (객체 관계 매핑)

 - 객체는 객체대로 설계

 - 관계형 데이터베이스는 관계형 데이터베이스대로 설계

 - ORM 프레임워크가 중간에서 매핑

 - 대중적인 언어에는 대부분 ORM 기술이 존재

 

JPA를 사용하는 이유

1. 생산성이 좋아진다.

 - 저장 : jpa.persist(member)

 - 조회 : Member member = jpa.find(memberId)

 - 수정 : member.setName("멤버이름")

 - 삭제 : jpa.remove(member)

 

2. 유지보수가 용이하다.

 - 컬럼이 추가되거나 하면 컬럼을 직접 수정해야 했지만 JPA는 컬러만 추가하면 다 적용이 된다.

 

3. JPA와 패러다임의 불일치 해결

 - 상속이나 조인되어 있는 구조도 알아서 CRUD를 해결해줌

 

4. JPA와 연관관계, 객체 그래프 탐색

 

5. 신뢰할 수 있는 엔티티, 계층

 

6. JPA와 비교하기

 - 동일한 트랜젝션에서 조회한 엔티티는 같음을 보장

 

7. JPA의 성능 최적화 기능

 - 1차 캐시와 동일성 보장

   ㅇ 같은 트랜잭션 안에서는 같은 엔티티를 반환

   ㅇ 다른 인스턴스로 같은 값을 두 번 불러올 때,

        첫 번째 불러오는 값은 SQL에서 불러오고 두 번째는 캐시에서 불러옴

 - 트랜잭션을 지원하는 쓰기 지연 - INSERT

   ㅇ 트랜잭션을 커밋할 때까지 INSERT SQL을 모음

   ㅇ JDBC BATCH SQL 기능을 사용해서 한 번에 SQL 전송

 - 지연 로딩

   ㅇ 객체가 실제 사용될 때 로딩

 - 즉시 로딩

   ㅇ JOIN SQL로 한 번에 연관된 객체까지 조회

 

JPA가 사용되는 예시

foreign key가 존재하는 두 테이블vo를 따로 서서 연결하는게 아닌 둘 중 한 테이블 vo에 다른 테이블vo를 object형식으로 필드부에 선언한 것을 데이터베이스와 연결 될 때 foreign key를 알아서 찾아 데이터를 찾아줌