개인공부

[ JPA ] JPA 에 관하여

KEEMSY 2024. 2. 11. 16:58

개요

나는 Spring 프로젝트를 만들어보면서 JPA 를 사용해 보았다.(정확히는 Spring Data JPA) 프로젝트에서 JPA 를 사용하면서, JPA 에 대한 기초적인 지식의 부족함을 느껴 이번 JPA 공부와 정리를 통해 올바른 JPA 를 사용할 수 있도록 노력해보고자 한다.
 
JPA 에 관한 내용 정리는 공식 문서, 유튜브 영상, 인프런 강의, 책, 프로젝트를 진행하면서 알게된 내용을 참고하여 정리해볼 계획이다.

내용 구성
- JPA 란
- JPA 특징
- Hibernate 설정

 
 

JPA 란

  • JPA는 자바 개체와 관계형 DB 간의 맵핑 처리를 위한 API이며, ORM 스펙의 일부다.
  • JPA는 2.2 버전까지는 Java Persistence API로 불렸으나, 3.0 버전부터는 Jakarta Persistence API로 이름이 바뀌었다.
  • 주로 스프링과 연동하여 사용되며, 스프링 6 버전부터는 Jakarta 2.2 9 버전 이상을 지원한다.
  • JPA의 특징 중 하나는 annotation을 통해 맵핑 설정이 가능하다. 

 

JPA 특징

  • Hibernate는 String, Int, Local Data와 같은 기본 타입 맵핑과 커스텀 타입 변환기를 지원하며 밸류 맵핑 및 밸류 타입 맵핑도 지원한다.
  • 또한 Hibernate는 다양한 연관관계 맵핑을 지원하는데, 1:1, 1:N, N:1, N:M 맵핑과 같은 연관 관계 말고도 상속에 대한 매핑도 가능하다.
  • 다양한 데이터 베이스를 지원하고, 각 데이터 베이스에 맞는 설정을 작성해야 한다.
  • EntityManageFactory, EntityManager 를 사용하여, 데이터베이스에 데이터를 관리할 수 있다.
  • SQL과 데이터베이스에 대한 복잡한 지식 없이도 객체를 통해 간편하게 데이터를 조작할 수 있다. 이는 애플리케이션의 생산성을 크게 향상시킨다.(ORM의 특징)
  • EntityManager 를 통해 CRUD(Create, Read, Update, Delete) 연산을 수행하며, 이는 데이터베이스와의 상호작용을 추상화하여 제공한다.
  • 영속성 컨텍스트라는 개념을 통해 1차 캐시, 동일성 보장, 트랜잭션 지원의 쓰기 지연, 변경 감지, 지연 로딩 등의 기능을 제공하여 성능 최적화와 데이터 무결성을 유지하는 데에도 도움을 준다.

 
 

Hibernate 설정

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/testDB?useSSL=false&allowPublicKeyRetrieval=true&useUnicode=true&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
    username: jpauser
    password: jpapass
    driver-class-name: com.mysql.cj.jdbc.Driver

  jpa:
    database-platform: org.hibernate.dialect.MySQL8Dialect
    open-in-view: false
    #    show-sql: true # 로그성임으로 false 로 두고 logging 설정에서 따로 설정하는 것이 좋다.

    properties:
      hibernate:
        format_sql: true
        ddl-auto: create
  • application.yml(혹은 application.property)에서 해당 값을 설정한다.
  • Hibernate Dialect는 각각의 db에 맞는 Query 를 생성해준다.
  • 코드 예시에서는 MySQL을 사용하므로, Hibernate Dialect에 mysql Dialect 라는 클래스를 사용한다. (Deprecated 되었음)

 

정리

  • JPA는 ORM(Object Relational Mapping) 으로, Java 객체와 관계형 데이터베이스 간의 매핑 처리를 위한 API를 제공한다.
  • JPA를 이해하고 사용하면 객체 지향적인 코드로 쉽고 효율적으로 데이터를 관리할 수 있으며, 애플리케이션의 생산성유지 보수성, 확장성을 향상시킬 수 있다.
  • EntityManager 를 통해 CRUD(Create, Read, Update, Delete) 연산을 수행하며, 이는 데이터베이스와의 상호작용을 추상화하여 제공한다.
  • 영속성 컨텍스트라는 개념을 통해 1차 캐시, 동일성 보장,  변경 감지, 지연 로딩 등의 기능을 제공하여 성능 최적화데이터 무결성을 유지하는 데에도 도움을 준다.
728x90