본문 바로가기

JPA

1. JPA의 등장

SQL 중심 개발의 문제점

  1. 무수히 반복되는 쿼리문 ➡️ 쿼리문 작성하는데 소요하는 시간이 길다.
  2. 객체 ➡️ SQL 변환 ➡️ RDB
  3. 상속의 어려움
    • RDB에 상속관계의 데이터를 저장할 경우, 상위 객체와 하위 객체 데이터 모두 필요하기 때문에, join으로 각 객체들을 생성해야한다.
      ➡️상속 관계를 안쓰게 된다.
  4. 개발 언어와 SQL 간 차이
    • 객체 : 참조 (Member.getTeam())
    • SQL 테이블 : 외래 키(JOIN ON M.TEAM_ID = T.TEAM_ID)
    • 객체에서 getTeam()과 같은 자신과 연관된 객체를 테이블에 저장할 수 없고, 팀의 ID값을 저장 후 getTeamId와 같은 형식으로 개발하게 된다.(테이블에는 TEAM_ID 값으로 저장해야한다.)
  5. SQL의 탐색범위가 제한된다. (member.getTeam().getOrder() 같은 코드 작성 불가능)

➡️ 기존 SQL 중심적 개발에서는 자바를 자바답게 개발하기 어렵다.

JPA의 등장

위 SQL 중심 개발의 문제점을 해결하기 위해 JPA 등장

  • 자바 애플리케이션 ↔️ (JPA 동작) ↔️JDBC
    • 객체의 생성, 조회 코드에 대한 쿼리문을 JPA가 생성해준다.
  • JPA의 표준 구현체 = 하이버네이트

JPA 사용 이점

  1. SQL 중심 ➡️ 객체 중심 개발
  2. 생산성과 유지보수 편의성 증가
  3. 패러다임 불일치 해결
    1. 객체의 상속 ↔️ Table의 슈퍼타입, 서브타입 관계 고민하지 않아도 됨.
    2. 같은 아이디값으로 조회해 생성한 객체의 동일성을 보장해준다
  String memberid = '100'
  Member member1 = jpa.find(member.class, memberId)
  Member member2 = jpa.find(member.class, memberId)


  member1 == member2; ➡️ True  
  1. 성능 최적화 기능
    1. 지연 로딩
    2. 1차 캐시와 동일성 보장
      • 위 코드에서 member1 조회 후 캐시에 데이터 저장됨➡️member2는 캐시에서 바로 가져옴
  1. 트랜잭션을 지원하는 쓰기 지연
    • 트랜잭션을 커밋할 때까지 SQL을 모아서 한번에 처리
  2. 지연 로딩과 즉시 로딩
    • 지연 로딩 : 객체가 실제로 사용될 때 로딩
    • 즉시 로딩 : Join SQL로 한번에 연관된 객체까지 미리 조회

JPA의 CURD

  1. 저장 : JPA.persist(객체)
  2. 조회 : JPA.find(객체의 id)
  3. 수정 : 객체.setName("new Name")
  4. 삭제 : JPA.remove(객체)

위와 같이 객체를 활용해서 개발이 가능하다.

강의 출처

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

 

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

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

www.inflearn.com

'JPA' 카테고리의 다른 글

JPA - 연관관계 주인(feat. mappedBy)  (0) 2023.05.19
영속성 컨텍스트!  (2) 2023.05.11
자바의 트랜잭션  (0) 2023.05.09
엔티티 매니저와 영속성 컨텍스트 정리  (0) 2023.05.01
[JPA] N+1문제  (0) 2023.04.18