본문 바로가기
Programming/Database & Query

[JPA] 자바 ORM 표준 JPA 프로그래밍 : JPA란, JPA 시작하기

by 읽고 쓰는 개발자 2022. 1. 16.

JPA 소개

ORM : Object-realational mapping ( 객체 관계 매핑)

  • 객체는 객체대로 설계, 관계형 데이터베이스는 관계형 데이터베이스대로 설계한 후 ORM 프레임워크가 중간에서 매핑
  • 대중적인 언어에는 대부분 ORM 기술이 존재 (JPA, TypeORM ....)
  • 객체와 RDB 두 기둥 위에 있는 기술

JPA : Java Persistence API, 자바 진영의 ORM 기술 표준

  • Application과 JDBC 사이에서 동작
  • 매핑 정보를 바탕으로 Query 생성 후 DB에 전송 및 결과 반환 받음
  • 패러다임의 불일치 해결 (Object - RDB)
  • Hibernate (오픈소스) 바탕으로 만들어짐
  • JPA는 표준 명세 (인터페이스의 모음)이며 , 구현체 3가지 존재
    • Hibernate
    • EclipssLink
    • DataNucleus
  • 장점
    • SQL 중심적인 개발에서 객체 중심으로 개발
    • 생산성
    • 유지보수 ( 낮은 에러 발생율, 시간 단축)
    • 패러다임의 불일치 해결 : 상속, 연관관계, 객체 그래프 탐색, 비교(동일한 트렌젝션에서 조회한 엔티티는 같음을 보장)
    • 성능 최적화 기능 : 1차 캐시와 동일성( identity) 보장, 쓰기 지연(transactional), 지연 로딩
    • 데이터 접근 추상화와 벤더 독립성
    • 표준

JPA 시작하기

docker로 h2 db 설치

docker run -d -p 1521:1521 -p 8081:81 -v/Users/cky21c/data/db/h2 --name=h2 oscarfonts/h2:1.4.197;

필수 라이브러리

  • hibernate-core
  • javax.persistence-api : JPA interface들의 모음

persistence.xml : JPA 설정 파일

  • 위치 : resource/META-INF/persistence.xml
  • DB name : persistence-unit으로 지정 (하나의 DB당 하나의 Unit)
  • property name이 javax.persistence~ : JPA 표준 속성
  • property name이 hibernate~ : 하이버네이트 전용 속성
  • dialect : 데이터베이스 방언
    • JPA는 특정 데이터베이스에 종속되지 않음
    • 각 데이터베이스의 SQL문법과 함수인 방언에 맞춰서 Query문 생성
    • hibernate는 40가지 이상의 방언 지원

Hello JPA - 애플리케이션 개발

  • JPA 구동방식
    • Persistence → EntityManagerFactory 만듦
    • 그 후 필요한 것들이 있을 때마다 EntityMangerFactory에서 EntityManager 생성
    • EntityManagerFactory는 하나의 객체만 생성하여 애플리케이션 전체에서 공유
    • EntityManager는 쓰레드간 공유 하지 않고, 사용한 후 바로 폐기 (close 필수) 동시성 이슈 발생 여지가 있기 때문!
    • JPA의 모든 데이터 변경은 트랜젝션 안에서 실행 (transaction commit해야만 반영)
  • 객체, 테이블 생성
    • @Entity : JPA가 관리해야 하는 객체임을 명시. 해당 어노테이션이 있으면 JPA에서 인식
    • @Id : 데이터베이스 PK와 매핑
    • @Table(name = “”) 으로 table명 지정가능. 없으면 관례에 따라서 매핑
  • JPQL
    • 객체 지향 SQL, SQL을 추상화한 객체 지향 쿼리 언어
    • “검색”시 테이블이 아닌 객체를 대상으로 검색하는 객체 지향 쿼리
    • SQL과 문법이 유사하지만 엔티티 객체를 대상으로 쿼리 (SQL은 DB table 대상으로 쿼리)

 

출처 : 자바 ORM 표준 JPA 프로그래밍-기본편 (김영한), 자바 ORM 표준 JPA 프로그래밍(김영한 저)