SpringDataJPA - JPA(Java Persistence API) 소개 및 정리

박민수·2023년 11월 14일
0

JPA

목록 보기
2/24

JPA(Java Persistence API)

JPA란 Java Persistence API의 약자이며 자바의 ORM을 위한 표준 기술로, 실제적으로 구현된것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다.
JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다.

ORM 기술이란?
ORM 기술은 말 그대로 객체와 관계형 데이터 베이스를 매핑해 주는 기술이다. 객체는 객체대로, 관계형 데이터베이스는 관계형 데이터베이스대로 설계하고, ORM 프레임워크가 중간에서 매핑을 해준다.

스프링 부트와 JPA만 사용해도 개발 생산성이 정말 많이 증가하고, 개발해야 할 코드도 확연히 줄어든다. 따라서 개발자는 핵심 비즈니스 로직을 개발하는데, 더욱 집중할 수 있다.

설정법

라이브러리 추가 - [pom.xml]

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>jpa-basic</groupId>
    <artifactId>ex1-hello-jpa</artifactId>
    <version>1.0.0</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <!-- JPA 하이버네이트 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.4.22.Final</version>
        </dependency>
        <!-- H2 데이터베이스 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.200</version>
        </dependency>
    </dependencies>
</project>

라이브러리 추가 - [persistence.xml]

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">

    <persistence-unit name="hello">
        <properties>
            <!-- 필수 속성 -->
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="javax.persistence.jdbc.user" value="sa"/>
            <property name="javax.persistence.jdbc.password" value=""/>
            <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>

            <!-- 옵션 -->
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.use_sql_comments" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="create" />
        </properties>
    </persistence-unit>
</persistence>

특징

  • JPA는 특정 DB에 종속적이지 않고, 각각의 DB에 따라 제공하는 SQL 문법과 함수는 조금씩 다르다.
  • JPA 구동 방식
    • META-INF/persistence.xml 파일을 통해 설정 정보를 조회하여 EntityManagerFactory를 생성한다. (EntityManagerFactory는 하나만 생성해서 애플리케이션 전체에서 공유한다.)
    • 개별 EntityManager를 생성한다. (EntityManager는 쓰레드간에 공유하지 않고 사용 후에 버려야 한다.)

참고 : JPA의 모든 데이터 변경은 트랜잭션 안에서 실행된다.

실제 동작 확인

  • @Entity: JPA가 관리할 객체
  • @Id: DB의 기본 키와 매핑
package hellojpa;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Member {
    @Id
    private Long id;
    private String name;
    //Getter, Setter …
}

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

profile
안녕하세요 백엔드 개발자입니다.

0개의 댓글