[JPA] JPA란 무엇인가

배지원·2022년 11월 2일
0

SpringBoot

목록 보기
5/11

JPA?

  • Java Persistence API
  • 자바 진영의 ORM 기술 표준

ORM?

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

1. JPA 사용이유

- (1)생산성 - JPA와 CRUD

저장 : jpa.persist(member)
조회 : Member member = jpa.find(memberid)
수정 : member.setName("변경할 이름")
삭제 : jpa.remove(member)


- (2)유지보수

  • JPA:필드만 추가하면 됨, SQL은 JPA가 처리

- (3) 성능 최적화 기능

1차 캐시와 동일성 보장

  • 같은 트랜잭션 안에서는 같은 엔티티를 반환 - 약간의 조회 성능 향상
----- SQL 1번만 실행 -----
String memberId = "100";
Member m1 = jpa.find(Member.class, memberId);	// SQL
Member m2 = jpa.find(Member.class, memberId); 	// 캐시

println(m1 == m2) // true
  • 위의 코드처럼 똑같은 값을 호출할때는 처음불러올때는 SQL을 통해 DB에서 찾아오고 2번째는 첫번째 불러온값의 캐시를 그대로 가져온다.
  • 따라서 첫번째 값과 두번째 값이 같을 수 있다.

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

  • 여러번의 INSERT문을 모아놨다가 마지막에 한번에 DB에 보내어 저장함
  • 트랜잭션을 커밋할 때까지 INSERT SQL을 모음
  • JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송
transaction.begin();	// [트랜잭션] 시작

em.persist(meberA);
em.persist(meberB);
em.persist(meberC);
// 여기까지 INSERT SQL을 데이터베이스에 보내지 않는다.

// 커밋하는 순간 데이터베이스에 INSERT SQL을 모아서 보낸다.
transaction.commit();	// [트랜잭션] 커밋
  • memberA,memberB,memberC를 모아놓았다가 commit하는 순간 한번에 DB에 보내 저장함

지연 로딩과 즉시 로딩

  • 지연 로딩 : 객체가 실제 사용될 때 로딩
  • 즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회

출처 : https://www.inflearn.com/course/ORM-JPA-Basic

profile
Web Developer

0개의 댓글