솔솔
[JPA] JPA란? 본문
🍀 JPA란
JPA(Java Persistence API)는 자바 애플리케이션에서 객체-관계 매핑(ORM, Object-Relational Mapping)을 위해 설계된 표준 인터페이스
- Object : ORM에서 Object는 자바에서의 객체(Object)로 클래스의 인스턴스(instance). 객체는 속성(데이터)과 동작(메서드)을 포함하며 현실 세계의 사물이나 개념을 프로그래밍 내에서 표현하는 데 사용됨
- Relational : ORM에서 Relational은 관계형 데이터베이스 (Relational Database)로 데이터를 표 형태의 테이블로 저장 한 것
- Mapping : 일반적 의미에서 매핑이란 어떤 값을 다른 값에 대응시키는 과정을 총칭

- 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 쿼리가 실행되고 실제 데이터베이스에서 데이터가 생성된 것을 확인할 수 있음.


💭 마이 띵킹 💭
마이바티스를 사용해본 경험이 있는데 JPA와 비교할 때 간단한 SELECT, INSERT, UPDATE, DELETE 작업을 수행할 때 자바 코드로 작성하고 객체를 사용하는 것만으로도 자동으로 쿼리가 생성되어 데이터를 조작할 수 있음에 정말 편리하게 느껴졌습니다. 지금까지는 간단한 동작을 수행했기 때문에 편하다고 느꼈지만 앞으로 쿼리문이 복잡하고 어려울수록 그리고 JPA를 공부하면 할 수록 어렵다고 하니 그 만큼 더 열심히 공부해야겠다 느꼈습니닷!
'나의보물들 > JPA' 카테고리의 다른 글
[JPA] JPA에서 @Transactional 없으면 UPDATE가 실행되지 않는 이유 (0) | 2025.03.20 |
---|---|
[JPA] @Modifying과 @Transactional의 연관성 (0) | 2024.08.12 |
[JPA] 트러블 슈팅 : build.gradle 설정 오류 (0) | 2024.08.10 |