[자바 ORM 표준 JPA 프로그래밍] JPA에 대해

devguri·2022년 10월 5일
0
post-thumbnail
post-custom-banner

JPA 소개

SQL 중심적인 개발의 문제점

객체를 관계형 DB에 저장

객체를 관계형 데이터베이스 저장

객체와 객체형 데이터베이스의 차이

  1. 상속 (객체형 DB는 상속 x)
  2. 연관관계
  3. 데이터 타입
image

<Album 조회>

  1. 각각 테이블에 따른 조인 SQL 작성
  2. 각각 객체 생성해야함
  3. 그래서 DB에 저장할 객체에는 상속 관계 사용안함(복잡해서)

→ DB가 아닌 자바 컬렉션에 저장하는게 더 편해보임

계층형 아키텍처 진정한 의미의 계층 분할이 어렵다.

모델링 할수록 매핑 작업만 늘어난다.

➡️ 그래서 객체를 컬렉션에 저장하듯이, 관게형 데이터 베이스에 저장하고 불러오도록 하는 것이 JPA이다.

JPA 소개

jpa란 ?

자바 진영의 ORM 기술 표준

ORM

  • Object-relational-mapping (객체 관계 매핑)
  • 객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스대로 설계
  • ORM이 중간의 차이들을 해결해주는 것임

JPA는 애플리케이션과 JDBC 사이에서 동작

image
  • JPA에게 명령 보내면 JDBC 사용해서 SQL 호출하고 결과 반환

JPA 동작 - 저장

image
  • jpa가 멤버 객체 보고 select 쿼리 만들어줌

JPA 동작 - 조회

image
  • JPA는 인터페이스의 모음임
  • 기존 : 필드 변경시 모드 SQL 수정해야함 → JPA : 필드만 추가하고 SQL은 JPA가 처리함

<기존>

image image

jpa는 관계형 데이터 베이스와 객체의 패러다임의 불일치를 해결해줌

  1. JPA와 상속
  2. JPA와 연관관계
  3. JPA와 객체 그래프 탐색
  4. JPA와 비교하기

JPA와 상속

image
  • Alubum 객체를 디비에 저장하고 싶은 경우
    • 개발자는 jpa.persist(album) 만 입력
    • 나머지는 jpa가 처리해주다
      • INSERT INTO ITEM
      • INSERT INO ALBUM

→ 패러다임 안맞는게 JPA가 알아서 처리해줌

JPA의 성능 최적하 지원

  1. 1차 캐시와 동일성(identity) 보장
  2. 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)
  3. 지연 로딩, 즉시로딩
    옵션 변경하여 지연 → 즉시로딩으로 변경 가능함
    1. 지연 로딩 : 객체가 실제 사용될 때 데이터베이스에서 가져옴
    <img width="332" alt="image" src="https://user-images.githubusercontent.com/81394850/193565277-8f3cb42d-4a18-449a-bb28-59547f81f864.png">

    
2. 즉시 로딩 : 멤버 가져오면서 팀도 조인해서 가져옴
    
    <img width="333" alt="image" src="https://user-images.githubusercontent.com/81394850/193565295-24bfd0f3-0e6f-4e87-8d72-2ef83a5ed206.png">

    

ORM은 객체와 RDB 모두 잘알아야함

[인프런 강의 : 자바 ORM 표준 JPA 프로그래밍 참고]

profile
Always live diligently
post-custom-banner

0개의 댓글