[자바 JPA 표준] 영속성 컨텍스트 - JPA 소개

sonnng·2023년 9월 16일
0

Spring

목록 보기
7/41
  • ORM

    • Object-relational-mapping이다. 매핑이란 중간에서 무언가를 해준다는 의미
    • ORM 프레임워크가 중간에서 다른 부분을 매핑해준다는 것으로, 패러다임 일치를 도와준다.
  • JPA

    • 자바 애플리케이션과 JDBC API 사이에 위치, 동작한다.
    • 동작 종류
      • 저장
        • '회원 객체 저장해줘'라는 명령어를 던지면 쿼리문을 db에 던져준다.
        • 패러다임 불일치를 해결해준다.
      • 조회
        • '회원 객체를 조회해줘'라는 명령어 던지면 ResultSet 매핑 및 쿼리문을 db에 던져준다.
        • 해당하는 엔티티를 반환받게 된다.
  • JPA 소개

    • 하이버네이트(오픈소스)는 빠르게 만들어서 정제가 되지 않은 표준이다.
    • JPA는 자바 표준으로, 용어 등이 정제된 것이다.
    • JPA는 표준 명세(인터페이스 모음)이다. JPA에서는 90%이상 구현체로 하이버네이트를 사용하고 있다.
    • JPA 표준 인터페이스 즉, 하이버네이트를 구현한 것을 사용하게 된다.
  • JPA 사용하는 이유?

    • sql 중심 개발 -> 객체 중심 개발
    • 생산성 및 유지보수, 패러다임 불일치 해결이 가능하다.
      • 생산성 : 저장, 조회, 수정, 삭제 crud를 지원해주어 편리하게 사용가능하다.
      • sql은 jpa가 처리해준다.
      • JPA를 통해 같은 트랜잭션을 사용하는 곳에서 동일한 객체를 꺼냈을 때 동일함을 보장한다.
  • JPA 성능 최적화 기능

      1. 1차 캐시와 동일성 보장
      • 같은 트랜잭션 안에서 같은 엔티티를 반환(조회 성능 향상)

         String memberId = "100";
         Member m1 = jpa.find(Member.class, memberId); 
         // SQL 조회 쿼리문으로 DB 까지 다녀와서 반환
        
         Member m2 = jpa.find(Member.class, memberId);
         //JPA 내부 캐시에서 바로 해당하는 객체를 반환
         // 즉 SQL 1번만 실행하는 결과
        
         printf(m1 == m2) //true
- 2. 트랜잭션을 지원하는 쓰기 지연
    - INSERT의 경우
        - 1) 트랜잭션 커밋까지 INSERT SQL을 모아서
        - 2) JDBC BATCH SQL 기능을 사용해 한번에 SQL을 전송한다. 
        커밋하는 순간 데이터베이스에 INSERT SQL을 모아서 보내므로 성능이 향상된다.


- 3. 지연로딩(Lazy Loading)
    - 1) 지연로딩
        - 조회시, 멤버만 조회하는 것으로 이때 필요한 hasing 관계인 team을 조회하는 것이 필요하면, 그때 연관시키는 것이다.
        - JPA 개발할 때는 지연로딩으로 세팅해주는 것이 일반적이다.
    - 2) 즉시로딩
        - 조회시, Member에 연관관계로 있는 Team을 JOIN 쿼리문으로 연관된 객체까지 한번에 조회하는 것을 말한다.
        - 개발할 때 사용하지 않을 가능성이 있으므로 성능이 조금 떨어질 수 있다. 
  • ORM은 객체지향과 RDB(관계형 데이터베이스) 이 둘을 잘 알아야 쓸 수 있다.

0개의 댓글