스프링/JPA

What is JPA(Java Persistence API)?

지팡구 2022. 12. 9. 14:57
if(백엔드 개발자를 희망하는 사람 中)
	if(Spring Framework를 사용하는 사람이라면)
    		known JPA
웃고자 대충 만들었다.
그 정도로 Spring을 사용해본 경험이 있으면 JPA를 모를수가없다.
오늘은 이 JPA와 관련해 이야기를 나눠보려고 한다.

이 글은 인프런-김영한 자바 ORM 표준 JPA 프로그래밍을 참고한 내용입니다.

우리는 Spring JPA를 사용하면서 이 JPA가 무엇인지, 왜 사용하는지를 여러 번 고민해본 적이 있을 것이다. JPA는 그냥 어마무시한 놈이다

 

이 JPA를 사용하는 이유는 바로 이 것이다

객체와 관계형데이터베이스(RDB)간의 패러다임의 불일치를 해결

- 목차 -

 

1. JPA란?

2. JPA를 왜 사용해야 하나?

3. JPA의 동작과정


1. JPA란?
  • JPA(Java Persistence API)의 약자로 자바 ORM 기술에 대한 표준 명세이며 JAVA에서 제공하는 API이다.
  • 쉽게 말해 자바 어플리케이션에서 RDB(Relation DataBase)를 사용하는 방식을 정의한 인터페이스이다.
  • ORM이기 때문에 자바 클래스와 DB테이블을 매핑한다. (인터페이스의 모음이라 생각하면 편함.)

< 여기서 ORM이란?? >

 - ORM은 ( Object - Relation Mapping (객체 객체 관계) )의 약자로 객체는 객체대로 설계, RDB는 RDB대로 설계하며 ORM 프레임워크가 중간에서 매핑을 해주는데, 이게 바로 JPA다.

 

2. 왜 JPA를 사용해야 하나?

 

  • SQL 중심적인 개발에서 객체 중심의 개발로 전환​
  • 생산성의 향상
  1. JPA와 CRUD -> 저장 : jpa.persist(member)
  2. 조회 : Member member = jpa.find(memberId)
  3. 수정 : member.setName("변경할 이름")
  4. 삭제 : jpa.remove(member)
  • 유지보수

기존에 새로운 객체에 JPA에 필드만 추가하게 되면 SQL은 JPA가 알아서 처리를 해줘 따로 SQL문을 안날려도 됨

  • 패러다임의 불일치 해결

1. JPA와 상속

인프런강의- 김영한 멘토님의 자바 ORM 표준 JPA 프로그래밍-기본편 강의에서 발췌

저장 : jpa.persistalbum)

조회 : Album album = jpa.find(Album.class, albumId)

이렇게 하면 JPA가 알아서 쿼리문을 만들어줘서 던진다 (매우 편안)

 

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

 

연관관계 저장

member.setTeam(team)

 

객체 그래프 탐색

Member member = jpa.find(Member.class, memberId)

 

동일한 트랙잭션에서 조회한 엔티티는 같음을 보장

 

이로 인해서 Entity 계층을 신뢰할 수 있다. 

 

 

  •  성능

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

- 같은 트랜잭션 안에서는 같은 엔티티를 반환 - 약간의 조회 성능 향상

- DB Isolation Level이 Read Commit이어도 애플리케이션에서 Repeatable Read 보장

 

예를 들어서 내가 찾고자 하는 데이터를 find()를 통해 찾는과정에서 SQL이 한번 날아가서 원하는 데이터를 가지고 오고, 다시 같은 멤버를 조회하게 되면 메모리에서 데이터를 가지고 온다. ( 조건은 같은 DB 트랜잭션 안에서 )

 

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

- 트랜잭션을 커밋할 떄까지 INSERT SQL을 모음

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

3. 지연로딩(Lazy Loading)과 즉시로딩

- 지연로딩 : 객체가 실제 사용될 때 로딩

 

- 즉시로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회

- 데이터 접근 추상화와 벤더 독립성

 

3. JPA의 동작 과정과 저장 방식

동작 과정

먼저 JPA는 애플리케이션과 JDBC의 사이에서 동작하는데 개발자가 JPA를 사용하면 JPA 내부에서 JDBC API을 사용해 SQL을 호출하여 DB와 총신을 한다. (개발자가 직접 JDBC API를 사용 xx)

(JDBC : Java Database Connectivity의 약자로 자바에서 DB에 접근할 수 있도록 하는 자바 API)

인프런강의- 김영한 멘토님의 자바 ORM 표준 JPA 프로그래밍-기본편 강의에서 발췌-- 동작과정

 

 

저장 과정

'만약에 memberDto에 객체를 저장하고 싶다' 라고 가정을 해보자

순서

- 개발자는 JPA에 member 객체를 넘긴다

- JPA는 member엔티티를 분석한다.

- 그 후 insert sql을 생성한다

- jdbc api를 사용해 sql을 db에 날린다.

 

인프런강의- 김영한 멘토님의 자바 ORM 표준 JPA 프로그래밍-기본편 강의에서 발췌 -- 저장 과정

조회 과정

조회 과정도 저장 과정과 비슷하다. 

해당 찾고싶은 데이터의 id 값을 던지면 해당 쿼리를 JPA에서 만들어 준다.

그리고 해당 오브젝트를 반들어서 반환해준다.

인프런강의- 김영한 멘토님의 자바 ORM 표준 JPA 프로그래밍-기본편 강의에서 발췌 -- 조회 과정