Spring/[인프런 김영한 자바 ORM 표준 JPA 프로그래밍 - 기본편]

[인프런 김영한 자바 ORM 표준 JPA 프로그래밍 - 기본편] JPA 시작하기

h2boom 2024. 8. 19. 16:01

JPA 설정

  • Maven : 자바 라이브러리 빌드 관리 툴이다.
    • 라이브러리 자동 다운로드 및 의존성 관리를 해준다.
    • 최근에는 Gradle을 더 많이 사용하는 추세이다.

 

  • Maven 빌드를 사용하는 경우
    • porm.xml에 필요한 라이브러리를 추가해준다.

 

  • JPA 설정하기 - persistence.xml
    • /resources/META-INF/persistence.xml 위치
    • persistence-unit name으로 이름 지정
    • javax.persistence로 시작: JPA 표준 속성
    • hibernate로 시작: 하이버네이트 전용 속성
    • Database 관련 속성과 옵션을 지정한다.

 

  • JPA는 특정 데이터베이스에 종속되지 않는다.
    • 방언 : SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능

 

  • 데이터베이스 방언
    • 특정 데이터베이스에 맞는 방언을 hibernate.dialect 속성에 지정해줘야 한다.

 

  • JPA 구동 방식
    • Persistence가 META-INF/persistence.xml의 이름을 조회해서 내용을 기반으로 EntityManageFactory를 생성한다.
    • EntityManagerFactory는 EntityManager 들을 생성한다.

 

  • Java 8 버전보다 높은 경우 javax 라이브러리를 내장하고 있지 않기 때문에 porm.xml에 의존성 추가가 필요하다.
<dependency>
	<groupId>javax.xml.bind</groupId>
	<artifactId>jaxb-api</artifactId>
	<version>2.3.0</version>
</dependency>

 

  • 주의 사항
    • EntityMangerFactory는 애플리케이션 로딩 시점에 딱 한 개만 만들어져 있어야 한다.
      • 웹 서버가 올라오는 시점에 한 개만 생성 = DB 당 한 개만 생성된다.
    • EntityManager는 클라이언트의 요청이 올 때마다 생성해서 사용하고 버려야한다(반납한다).
      • EntityManger는 스레드간 절대로 공유하면 안된다.
      • 항상 다 사용하고 나면 close 해야한다.
    • JPA에서 데이터를 변경하는 모든 작업은 트랜잭션 안에서 작업이 되야한다.
      • 단순 조회가 아닌 이상 트랜잭션을 EntityManagerFactory를 통해 트랜잭션을 받아와서 시작하고 내용을 commit 해줘야한다.

 

  • JPA 사용 - 객체, 테이블 매핑
    • 매핑할 클래스에 @Entity로 선언해줘야 JPA가 관리하는 객체 대상이 된다.
    • 매핑할 클래스에 별도로 지정해주지 않으면 클래스명 = 테이블명
      • @Table(name= "~")으로 별도의 테이블 명으로 매핑해줄 수도 있다.
    • 필드명도 마찬가지로 별도로 지정하지 않으면 필드명 = 컬럼명
      • @Column(name="~")으로 별도의 컬럼명으로 매핑할 수 있다.
    • @Id로 객체의 필드를 PK로 매핑할 수 있다.

 

  • JPA 에서 관리하는 객체를 가져와서 수정하면 따로 반영해주지 않아도 자동으로 변경된다.
    • 트랜잭션이 커밋하는 시점에 체크를 하기에 변경사항이 있으면 자동으로 UPDATE 쿼리를 날려서 반영시키고 커밋한다.

 

  • JPQL : JPA에서 자동으로 작성해주는 쿼리 외에 복잡한 검색 쿼리등을 직접 작성해서 사용할 수 있도록 지원하는 쿼리 작성 기능
    • JPA에서 SQL을 추상화해서 제공하는 객체 지향 쿼리 언어가 JPQL이다.
      • JPQL은 엔티티 객체를 대상으로 쿼리
      • SQL은 데이터베이스 테이블을 대상으로 쿼리
    • SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다.
    • JPQL = 객체 지향 SQL
    • ex) 나이가 몇 살 이상인 회원 모두 검색과 같은 조건 검색의 경우에 사용한다.

 


출처: [인프런 김영한 자바 ORM 표준 JPA 프로그래밍 - 기본편]

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

 

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

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

www.inflearn.com