순수 JPA IntellJ로 만들어보기
Maven으로 진행

pom.xml
<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>org.example</groupId>
<artifactId>pureJPA</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>pureJPA</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- JPA API -->
<dependency>
<groupId>jakarta.persistence</groupId>
<artifactId>jakarta.persistence-api</artifactId>
<version>3.1.0</version>
</dependency>
<!-- JPA 구현체 (Hibernate) -->
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.4.4.Final</version>
</dependency>
<!-- DB (예: H2) -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.2.224</version>
<scope>runtime</scope>
</dependency>
<!-- 로그 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>2.0.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="https://jakarta.ee/xml/ns/persistence"
version="3.0">
<persistence-unit name="pure-jpa">
<class>com.example.Member</class>
<properties>
<property name="jakarta.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="jakarta.persistence.jdbc.url" value="jdbc:h2:file:/Users/jeongjaeyoon/database/h2/h2"/>
<property name="jakarta.persistence.jdbc.user" value="sa"/>
<property name="jakarta.persistence.jdbc.password" value=""/>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
DataBase(H2) 설정
H2 데이터베이스 설정
https://www.h2database.com/html/main.html
H2 Database Engine
H2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2.5 MB jar file size Supp
www.h2database.com
- All Platforms 선택

h2폴더로 들어가서 파일 생성
touch h2.mv.db
(base) h2 % cd bin
(base) bin % chmod +x h2.sh
(base) bin % ls
h2-2.4.240.jar h2.bat h2.sh h2w.bat
(base) bin % ./h2.sh


JDBC URL은 다음과 같이 진행
jdbc:h2:file:/Users/{본인꺼}/database/h2/h2
- 위처럼 해야되는 게
- 이 URL은 H2가 이렇게 해석함
- DB 이름(파일 베이스): /Users/jeongjaeyoon/database/h2
- 찾는 파일: /Users/jeongjaeyoon/database/h2.mv.db
- 그래서 /database/h2/h2.mv.db 이렇게 해주어야함
SQL문
CREATE TABLE MEMBER(
ID VARCHAR(255) NOT NULL,
NAME VARCHAR(255),
AGE INTEGER NOT NULL,
PRIMARY KEY (ID)
)
값 넣기
INSERT INTO MEMBER (ID, NAME, AGE)
VALUES ('member1', '재윤', 25);
라이브러리 정리
- JPA 구현체로 우리는 하이버네이트를 사용 여기서 핵심 라이브러리는 다음과 같음
- hibernate-core : 하이버네이트 라이브러리
- hibernate-entitymanager: 하이버네이트가 JPA 구현체로 동작하도록 JPA 표준을 구현한 라이브러리
- pom.xml
- <dependencies>에 사용할 라이브러리 지정 → groupId + artifactId + version만 적어주면 라이브러리(jar 파일)를 메이븐 공식 저장소에서 내려 받아 라이브러리에 추가됨
- JPA, 하이버네이트(hibernate-entitymanager) : JPA 표준과 하이버네이트를 포함하는 라이브럴, hibernate-entitymanger를 라이브러로 지정하면 다음 중요 라이브러리도 함께 내려 받음
- hibernate-core.jar
- H2 DB : H2 DB에 접속해야 하므로 h2 라이브러리
- persistence.xml
- <persistence-unit name="pure-jpa"> → JPA 설정은 영속성 유닛이라는 것부터 시작하는데 일반적으로 연결할 DB당 하나의 영속성 유닛을 등록함 그리고 이 유닛에 고유한 이름을 부여해야하는데 pure-jpa로 함.
- <property name="jakarta.persistence.jdbc.driver" value="org.h2.Driver"/> → JDBC 드라이버 user, password는 DB 접속 아이디 비번, url은 DB 접속 url
- <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> → 이건 DB 방언 설정
- JPA는 특정 DB에 종속되지 않음
- SQL 표준을 지키지 않거나 특정 DB만의 고유한 기능을 JPA에서는 방언(Dialect)라고 함. 그래서 persistence.xml에서 하이버네이트한테 방언 알려준 거임.
import 문제
- 현재 이렇게 임포트를 함
import jakarta.persistence.*;
- 참고용은
import javax.persistence.*
차이부터 보자
- 옛날 JPA(JAVA EE 시절) 패키지
import javax.persistence.*
- 현재 JPA(jakarta EE 시절) 패키지
import jakarta.persistence.*;
개념/기능은 거의 동일함 하지만 패키지 이름이 바뀌었기 때문에 바이너리 호환이 깨진 대규모 네임 스페이스 변경임
왜 바뀌었나?
Java EE → Jakarta EE로 넘어가면서 발생한 변화
- 과거 Java EE는 javax.* 네임스페이스를 사용
- Java EE가 Eclipse Foundation으로 넘어가 “Jakarta EE”가 됨
- 상표/법적 이유로 javax.*를 계속 쓸 수 없어서
- *Jakarta EE 9부터 패키지명이 전부 jakarta.로 변경
가장 중요한 차이 → 호환성
소스 코드는 비슷해 보여도
import javax.persistence.Entity;
import jakarta.persistence.Entity;
→ 이 두개는 JVM 입장에서 완전히 다른 타입임
같은 프로젝트에서 절대 섞어 쓰면 안 된다…
Spring boot 기준으로 딱 갈림
- Spring boot 2.x
- JPA 패키지 → javax.persistence
- Hibernate → 5.x 계열
- Java 최소 버전 → 8 ~ 11
- 주요 변화 → 기존 EE
- Spring boot 3.x
- JPA 패키지 → jakarta.persistence
- Hibernate → 6.x 계열
- Java 최소 버전 → 17+
- 주요 변화 → Jakarta EE 전환 완료
내가 판 프로젝트를 보면
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.4.4.Final</version>
</dependency>
- 현재 자바 21을 사용중
→ 그래서 jakarta가 맞음
'개발 지식 > Spring boot' 카테고리의 다른 글
| [Spring boot] JPA - 영속성 컨텍스트(엔티티 매니저 팩토리와 엔티티 매니저, 커넥션풀, 영속성 컨텍스트, 준영속) (0) | 2026.01.30 |
|---|---|
| [Spring boot] JPA - 순수 JPA 애플리케이션 개발(JPQL) (0) | 2026.01.30 |
| [Spring boot] JPA - Spring data JPA가 아닌 순수 JPA (0) | 2026.01.30 |
| [Spring boot] Maven VS Gradle (0) | 2026.01.22 |
| [Spring boot] JPA - JPA가 왜 필요할까? (0) | 2026.01.22 |
