[JPA] 자바 ORM 표준 JPA 프로그래밍 - 기본편 - JPA 소개

이민재·2024년 3월 5일
0

섹션 1. JPA 소개

JPA

  • Java Persistence API
  • 자바 진영의 ORM 기술 표준

ORM?

  • Object-relational mapping(객체 관계 매핑)
  • 객체는 객체 대로 db는 db 대로 설계
  • orm 프레임워크가 중간에서 매핑

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

  • JPA는 인터페이스의 모음

JPA를 사용해야 하는 이유

  • SQL 중심 개발에서 객체 중심 개발
  • 생산성
  • 유지 보수
  • 패러다임의 불일치 해결
  • 성능
  • 데이터 접근 추상화와 벤더 독립성
  • 표준

생산성 - CRUD

  • 저장 : jpa.persist(member)
  • 조회 : Member member = jpa.find(memberId);
  • 수정 : member.setName("변경할 이름")
  • 삭제 : jpa.remove(member)

유지보수

  • 기존 : 필드 변경 시 모든 sql 수정 -> JPA : 필드 변경 시 나머지 sql은 JPA가 처리해준다.

상속 가능 , 연관관계, 객체 그래프 탐색 -> 신뢰 할 수 있는 엔티티, 계층

성능 최적화 기능

  • 1차 캐시와 동일성(identity) 보장
    • JPA는 같은 트랜잭션 안에서는 같은 엔티티를 반환 - 약간의 조희 성능 향상
  • 트랜잭션을 지원하는 쓰기 지연
    • 트랜잭션을 커밋 할 때까지 INSERT SQL을 모음
      • JDBC BATCH SQL 기능을 사용해서 한번에 SQL 전송
    • UPDATE, DELETE로 인한 로우(ROW)락 시간 최소화
      • 트랜잭션 커밋 시 UPDATE, DELETE SQL 실행하고, 바로 커밋
  • 지연 로딩
    • 지연 로딩 : 객체가 실제 사용될 때 로딩
    • 즉시 로딩 : JOIN SQL로 한번에 연관된 객체까지 미리 조회

주의사항

  • JPA는 항상 트랜잭션 안에서 실행되어야 한다.

  • 엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유

  • 엔티티 매니저는 쓰레드 간 공유X(사용하고 버려야 한다.)

  • JPA의 모든 데이터 변경은 트랜잭션 안에서 실행

JPQL

  • JPA를 사용하면 엔티티 객체를 중심으로 개발

  • 문제는 검색 쿼리

  • 검색을 할 때도 테이블X 엔티티 객체를 대상으로 검색

  • 모든 db 데이터를 객체로 변환해서 검색은 불가능

  • 애플리케이션이 필요한 데이터만 db에서 불러오려면 결국 검색 조건이 포함된 sql이 필요

    JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공

    JPQL - 엔티티 객체를 대상으로 쿼리
    SQL - 데이터베이스 테이블을 대상으로 쿼리.

ORM은 객체RDB 두 기둥 위에 있는 기술


마치며

이미 전 부터 JPA를 사용해서 몇 번 프로젝트를 개발해 왔지만 항상 사용하면서 이렇게 사용하는게 맞을까?? 라는 고민을 많이 했었다. 새로 프로젝트를 시작하면서 모르는 부분을 채우고 알던 확실하게 다지는 기회가 되도록 유명한 김영한 선생님의 인강을 정리하면서 공부하기로 결정했고 배운 부분을 바로바로 프로젝트에 적용할 수 있도록 하겠다.

profile
초보 개발자

0개의 댓글