[JPA-Basic] JPA 소개

나영·2023년 8월 17일
0

Spring-JPA

목록 보기
1/2
post-thumbnail

JPA란 ?

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

    💡 ORM 이란 ?

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

동작 과정

저장

조회

필요성

  • SQL 중심적 개발 -> 객체 중심 개발

  • 생산성

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

    • 기존 : 필드 변경 시 모든 SQL 수정
    • JPA : 필드만 추가하면, SQL 은 JPA 가 처리
  • 패러다임의 불일치 해결

    1. JPA 와 상속
    2. JPA 와 연관관계
    3. JPA 와 객체 그래프 탐색
    4. JPA 와 비교하기
  • 성능 최적화

    • 1차 캐시와 동일성 보장
    • 트랜잭션 지원하는 쓰기 지연 (transactional write-behind)
    • 지연 로딩 (Lazy Loading) : 객체가 실제 사용될 때 로딩
  • 데이터 접근 추상화와 벤더 독립성

  • 표준

JPA 실습 시작

persistence.xml

JPA는 persistence.xml 을 통해 필요한 설정 정보를 관리한다. 이 설정 파일이 META-INF/persistence.xml 경로에 있으면 추가 설정 없이 JPA 가 인식할 수 있다.

데이터베이스 방언

JPA 는 데이터베이스에 종속적이지 않다. 하지만, 각 데이터베이스마다 제공되는 SQL 문법이 다르다는 문제가 있으므로, 해당 데이터베이스 방언에 맞게 SQL 변환 작업을 해야한다.

이는 hibernate.dialect 속성에 지정해준다.

  • MySQL : org.hibernate.dialect.MySQL5InnoDBDialect
  • Oracle : org.hibernate.dialect.Oracle10gDialect
  • H2 : org.hibernate.dialect.H2Dialect

구동 방식

JPA를 시작하려면, 우선 EntityManagerFactory 를 생성해야 한다. 이 인스턴스를 통해 EntityManager 인스턴스를 생성한다.

EntityManagerFactory 는 하나만 생성해 애플리케이션 전체에서 공유한다. 또한 EntityManager 는 쓰레드 간에 공유하지 않는다.

그리고,
JPA 의 모든 데이터 변경은 트랜잭션 안에서 실행한다 !!

JPQL

  • 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하므로 ..
  • 애플리케이션이 필요한 데이터만 DB 에서 불러오려면 결국 검색 조건이 포함된 SQL 이 필요하다.
  • SQL데이터베이스 테이블을 대상으로 쿼리한다면, JPQL엔티티 객체를 대상으로 쿼리한다.

0개의 댓글

관련 채용 정보