티스토리 뷰

SPRING

[SPRING] JPA란

혀내 2022. 7. 24. 14:11
반응형

JPA

  JPA(Java Persistence API)란 자바 진영의 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음을 의미한다. 

 

 

ORM

ORM은 Object-Relational Mapping의 줄임말로 객체는 객체대로, 관계형 DB는 관계형 DB대로 설계하되 ORM 프레임워크가 중간에서 둘을 매핑해준다. Java와 같이 대중적인 언어에는 대부분 ORM 기술이 존재한다.

 ORM을 사용하면 개발자는 데이터베이스의 데이터를 객체처럼 관리할 수 있기 때문에 객제 지향적인 코드를 작성할 수 있다. 비즈니스 로직에 더 집중할 수 있으며 SQL을 사용하는 것에 비해 직관적이고 유지보수가 쉬워진다.

 

 

JPA의 성능 최적화 기능

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

  • 같은 트랜잭션 안에서는 같은 엔티티를 반환한다.
String memberId = "100";
Member m1 = jpa.find(Member.class, memberId); // SQL로 조회된 Member
Member m2 = jpa.find(Member.class, memberId); // 캐시에서 조회된 Member

println(m1 == m2) // true

위의 코드에서는 결과적으로 SQL이 1번만 실행된다.

 

 

트랜잭션을 지원하는 쓰기 지연(Transactional Write-Behind) - INSERT

  • 트랜잭션을 커밋할 때까지 INSERT SQL을 모은다.
  • JDBC BATCH SQL 기능을 사용해 모아둔 SQL을 한번에 전송한다.
transaction.begin();

em.persist(memberA);
em.persist(memberB);
em.persist(memberC);
// INSERT SQL을 계속 모아둔 상태

// 커밋할 때 DB에 INSERT SQL을 모아서 보낸다.
transaction.commit();

 

 

지연 로딩(Lazy Loading) & 즉시로딩

  • 지연 로딩: 객체가 실제로 사용될 때 로딩된다.
    • 값이 실제로 필요한 시점에 JPA가 SELECT 쿼리를 날리기 때문에 성능을 향상 시킬 수 있다.
    • 대부분 지연 로딩으로 설정하고, 성능 최적화가 필요할 때 옵션을 변경한다.
  • 즉시 로딩: JOIN SQL로 한번에 연관된 객체까지 미리 조회한다.

 

 

참조:

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com

 

반응형