솔솔

[JPA] JPA란? 본문

나의보물들/JPA

[JPA] JPA란?

솔솔하네 2024. 8. 1. 19:11

🍀 JPA란


JPA(Java Persistence API)는 자바 애플리케이션에서 객체-관계 매핑(ORM, Object-Relational Mapping)을 위해 설계된 표준 인터페이스

  • Object : ORM에서 Object는 자바에서의 객체(Object)로 클래스의 인스턴스(instance). 객체는 속성(데이터)과 동작(메서드)을 포함하며 현실 세계의 사물이나 개념을 프로그래밍 내에서 표현하는 데 사용됨
  • Relational : ORM에서 Relational은 관계형 데이터베이스 (Relational Database)로 데이터를 표 형태의 테이블로 저장 한 것
  • Mapping : 일반적 의미에서 매핑이란 어떤 값을 다른 값에 대응시키는 과정을 총칭

왼 : RDBMS에서 테이블 생성 DDL / 오 : JPA 엔티티 생성

 

  • RDBMS (DDL): 데이터베이스 테이블을 정의하는 SQL 구문을 사용. 
  • JPA 엔티티: 자바 클래스를 사용하여 데이터베이스 테이블과 매핑. 어노테이션을 사용하여 클래스와 필드를 테이블과 컬럼에 매핑함.

 

즉,  객체와 관계형 데이터베이스의 개념은 다르지만 JPA를 통해 이를 매핑함으로써 자바 애플리케이션에서 일관되고 효율적으로 데이터를 관리할 수 있다!!

 

🍀 JPA를 사용하여 데이터베이스에 연결


개발 환경
Spring Tool Suite 4(4.23.1.RELEASE)
jpa 2.2
hibernate 5.4
openjdk-17

 

1. pom.xml에서 라이브러리 추가 ( Maven )

<!-- JPA library 설정 -->
<dependency>
	<groupId>javax.persistence</groupId>
	<artifactId>javax.persistence-api</artifactId>
	<version>2.2</version>
</dependency>
<dependency>
	<groupId>org.hibernate</groupId>
	<artifactId>hibernate-entitymanager</artifactId>
	<version>5.4.2.Final</version>
</dependency>

 

2. 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="dbinfo">
		<!-- Dept 라는 테이블과 연관된 엔티티 클래스 등록 -->
		<class>model.domain.entity.Dept</class>
		
		 <properties>
            <!-- 데이터베이스 연결 설정 -->
			<property name="javax.persistence.jdbc.driver" value="oracle.jdbc.OracleDriver" />
			<property name="javax.persistence.jdbc.url" value="jdbc:oracle:thin:@{ip}:{port}:{sid}" />
			<property name="javax.persistence.jdbc.user" value="{your_id}" />
			<property name="javax.persistence.jdbc.password" value="{your_password}" />
				
			<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />
			<!--  Hibernate가 실행하는 SQL 쿼리를 콘솔에 출력할지 여부 -->
			<property name="hibernate.show_sql" value="true" /> 
            <!-- Hibernate가 데이터베이스 스키마를 어떻게 처리할지 결정 -->
            <!-- none : 데이터베이스 스키마를 자동으로 생성하거나 수정 X -->
            <!-- create : 애플리케이션 시작 시점에 기존 스키마를 삭제하고 새로 생성 -->
 			<property name="hibernate.hbm2ddl.auto" value="create" /> 
		</properties>  
		
	</persistence-unit>
	
</persistence>

 

3. JPA 엔티티 클래스 생성

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

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString

@Entity 
public class Dept {
	
	@Id
	private int deptno;
	
	private String dname;
	private String loc;

}

 

4. 엔티티 매니저 설정

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class Main {
    public static void main(String[] args) {
        // 엔티티 매니저 팩토리 생성
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("dbinfo");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();

        // 트랜잭션 시작
        tx.begin();

        // 엔티티 생성
        Dept dept = new Dept();
        dept.setDname("DevOps");
        dept.setLoc("Incheon");

        // 엔티티 저장
        em.persist(dept);

        // 트랜잭션 커밋
        tx.commit();

        // 엔티티 매니저 닫기
        em.close();
        emf.close();
    }
}

 

 - 메인 메서드를 실행하면 Hibernate를 통해 자동으로 SQL 쿼리가 실행되고 실제 데이터베이스에서 데이터가 생성된 것을 확인할 수 있음.

콘솔 로그를 통해 Hibernate를 통해 자동으로 SQL 쿼리가 실행 확인

 

 

💭 마이 띵킹 💭

마이바티스를 사용해본 경험이 있는데 JPA와 비교할 때 간단한 SELECT, INSERT, UPDATE, DELETE 작업을 수행할 때 자바 코드로 작성하고 객체를 사용하는 것만으로도 자동으로 쿼리가 생성되어 데이터를 조작할 수 있음에 정말 편리하게 느껴졌습니다. 지금까지는 간단한 동작을 수행했기 때문에 편하다고 느꼈지만 앞으로 쿼리문이 복잡하고 어려울수록 그리고 JPA를 공부하면 할 수록 어렵다고 하니 그 만큼 더 열심히 공부해야겠다 느꼈습니닷!