JPA란,

길셔·2022년 7월 27일
0

JPA

목록 보기
1/7

1. 관계형 DB와 객체지향의 한계 ( SQL 중심적인 개발 문제점 )

  • 객체지향 프로그래밍에서 관계형DB를 사용함에 있어 아래와 같은 차이가 있다.
    • 상속 : 객체지향 (O), DB (X)
    • 연관관계 : 객체 (자유로움) , DB (복잡함)
    • 객체다운 모델링 : 객체 (O), DB (X)
    • 엔티티 신뢰 문제 : 객체(O), DB(X)
  • 또한 모든 객체를 미리 로딩할 수는 없다.
  • JPA를 사용하면, 객체와 관계형 DB의 패러다임 불일치를 해결할 수 있다.

2. ORM?

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

3. JPA란?

  • Java Persistence API로 자바 진영 ORM 표준 기술이다.
  • JPA는 인터페이스의 모음이며, 애플리케이션과 JDBC 사이에서 동작한다.
  • JPA 사용이유

    • SQL 중심적인 개발에서 객체 중심으로 개발
    • 성능
    • 데이터 접근 추상화와 벤더 독립성
    • 표준
    • 생산성
      1. 저장: jpa.persist(member)
      2. 조회: Member member = jpa.find(memberId)
      3. 수정: member.setName(“변경할 이름”)
      4. 삭제: jpa.remove(member)

    • 유지보수
      • 기존 필드 변경시 모든 SQL을 수정해야 했지만,
      • JPA는 SQL은 JPA가 처리하기 때문에, 필드만 추가하면 된다.



    • 패러다임의 불일치 해결 1)~4)

    1) JPA와 상속

    • 저장 시
      • 기존 SQL을 작성했을 때는 ITEM과 ALBUM에 INSERT문을 각각 작성해야 했다면, JPA에서는 알아서 INSERT문을 작성해서 처리한다.
    • 조회시

2) JPA와 연관관계

3) JPA와 객체 그래프 탐색

  • 연관된 객체를 저장하면, MEMBER에서 TEAM의 객체를 자유롭게 탐색 후 사용할 수 있다.
  • 또한 기존에는 DAO에서 SQL문을 연관된 데이터끼리 잘작성해야하고 확인하고 사용해야 했다면, JPA에서는 엔티티를 신뢰할 수 있게 되서 TEAM과 연관된 ORDER나 다른 객체를 자유롭게 사용할 수 있게 된다.

4) JPA와 비교하기

  • MYSQL과 같은 SQL문을 직접 작성할 때에는 데이터를 가져와서 인스턴스를 NEW하는 작업을 거치기 때문에 member1과 member2는 같지 않다.
  • JPA는 같은 파라미터로 넘어가서 조회한 데이터는 저장해두었다가 조회한 목록에서 가져와 사용하기 때문에 member1==member2는 true가 된다.

4. JPA 성능 최적화 기능

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

  • 앞서 말한 것처럼 조회한 데이터를 짧은 시간동안 캐싱을 하고 데이터를 다시 쿼리를 조회하지 않고 캐싱하고 있는 데이터를 그대로 반환한다.

ㄴ) 트랜잭션을 지원하는 쓰기 지연(transactional write-behind)


  • 트랜잭션을 사용하기 위해서 JDBC의 복잡한 배치 기능을 JPA에서는 옵션 하나만 사용하면 쿼리를 메모리에 모았다가 한번에 네트워크로 연결한다.

ㄷ) 지연 로딩(Lazy Loading)

  • 지연 로딩은 MEMBER 객체를 가져오는 쿼리가 먼저 진행되서 가져와 지고, TEAM객체를 사용하기 위해 먼저 Team에 담아 놓지만 실제로 쿼리를 가져오지는 않고, getName()과 같이 실제로 사용될 때 쿼리가 가져와진다.
  • 즉시 로딩은 어차피 MEMBER 객체를 사용할 때는 TEAM도 사용하기 때문에 옵션을 추가해주면 한번에 같이 가져올 수 있다.
profile
까먹지말자

0개의 댓글