개요
나는 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
'개인공부' 카테고리의 다른 글
[ JPA ] 다양한 어노테이션을 사용한 효과적인 엔터티 매핑_1.객체와 테이블 매핑 (0) | 2024.02.12 |
---|---|
[ JPA ] JPA Entity, EntityManagerFactory, EntityManager, Persistence context (0) | 2024.02.11 |
일잘하는 사람들의 소통법 (0) | 2024.02.09 |
[ Study Log ] Design Thinking 에 관하여 (1) | 2023.12.03 |
[ 개인 공부 ] Optional 은 필요한 것일까? 필요하다면, Optional 의 올바른 사용방법은? (1) | 2023.11.09 |