Post

JPA에 대하여

JPA에 대하여

JPA는 Java Persistence API로 자바 플랫폼 SE와 자바 플랫폼 EE를 사용하는 응용프로그램에서 관계형 데이터베이스의 관리(ORM 기술 표준)를 표현하는 자바 API입니다. 여기서 ORM(Object Relational Mapping)이란 객체와 데이터베이스의 관계를 매핑해주는 도구로 자바 외 언어에서는 node.js에서의 Sequelize, python 기반 Django에서 지원하는 Django ORM 등이 있습니다.

jpa_operation.png

JPA는 애플리케이션과 JDBC 사이에서 동작하며 SQL 작성으로 인한 개발시간을 단축할 수 있다는 장점이 있습니다. JPA를 사용하면 Entity 분석하고 SQL 생성한 뒤, JDBC API 사용하고 패러다임의 불일치까지 해결해 줄 수 있습니다.

JPA는 패러다임의 불일치를 어떻게 해결할까?

패러다임의 불일치는 객체와 관계형 데이터베이스 사이의 불일치 의미합니다. 관계형 데이터베이스에는 테이블로 데이터를 관리하고 객체 지향 프로그래밍은 객체 단위로 상속, 다형성 개념을 가지고 관리합니다. 대표적인 불일치로 사례들은 상속, 연관관계, 객체 그래프 탐색, 식별자 등이 있습니다. JPA에서는 다양한 매핑 어노테이션과 매핑 설정, 그리고 지연로딩, 즉시로딩을 이용해 패러다임의 불일치를 최소화하고 있습니다.

JPA 성능 최적화 기능

1차 캐시와 동일성 보장합니다. 같은 트랜잭션 안에서 같은 엔티티를 반환하고 Read Commit 격리수준에서도 애플리케이션에서 Repeatable Read를 보장합니다.
트랜잭션을 지원하는 쓰기 지연을 제공합니다. 트랜잭션이 끝날 때까지 Insert SQL을 모아서 한 번에 Commit 처리합니다.
지연로딩과 즉시로딩을 지원합니다. 연관된 객체까지 미리 조회하는 것을 즉시로딩이라고 합니다. 반면, 지연로딩은 객체가 실제 사용될 때 로딩되는 방식입니다.

데이터 중심 설계와 엔티티 설계의 차이점

데이터 중심 설계는 테이블의 외래키를 객체에 그대로 가지고 오는 방식으로 만들어져 있습니다. 이렇게 하게 되면, 객체 그래프 탐색이 불가능해지고, 참조가 없어 UML도 잘못 작성됩니다.
따라서 먼저 자바 객체인 엔티티를 설계하고 테이블을 생성하는 방식을 사용해야 합니다. 외래키가 아닌 참조할 키의 값을 가지고 와서 하나의 컬럼

데이터베이스 스키마 자동생성

JPA는 데이터베이스를 자동으로 생성해주도록 ddl-auto 옵션을 설정할 수 있습니다. 옵션의 종류는 create, create-drop, update, none, validate 종류가 있습니다. 주로 개발환경이나 테스트 서버에서는 update를 사용해야 하고 실서버에서는 절대 사용하면 안됩니다. 주로 운영서버에서는 validatenone을 사용합니다. validate는 엔티티와 테이블이 정상 매핑되었는지만 확인합니다. none이라는 개념은 실제 없고, 주석처리하는 것과 동일한 효과를 갖습니다.

1
2
3
jpa:
  hibernate:
    ddl-auto: create

DDL 생성기능은 DDL을 자동 생성할 때만 사용되고 JPA의 실행로직에는 영향을 주지 않습니다.validation 용도로 사용하기에 좋습니다.


Spring Data JPA - Reference Documentation

This post is licensed under CC BY 4.0 by the author.