Hello JPA - 프로젝트 생성

숭맹이·2025년 4월 21일

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리

개발 환경

  • Java 17 (최소 Java 8 이상)
  • Maven (빌드/라이브러리 관리)
  • IntelliJ IDEA (IDE)
  • H2 Database (가벼운 테스트용 데이터베이스)

프로젝트 생성

Maven 프로젝트 생성

  • groupId: jpa-basic
  • artifactId: ex1-hello-jpa
  • version: 1.0.0

의존성 추가 (pom.xml)

<dependencies>
  <!-- JPA 구현체: Hibernate -->
  <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.3.10.Final</version>
  </dependency>

  <!-- H2 Database -->
  <dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.199</version>
  </dependency>
</dependencies>

H2 데이터베이스 설치 및 실행

  • 다운로드: H2 Database 공식 사이트
  • 실행 방법:
    • Mac/Linux: ./h2.sh
    • Windows: h2.bat
  • JDBC URL 설정: jdbc:h2:tcp://localhost/~/test

주의: 최초 파일 생성 시 jdbc:h2:~/test로 접속 후, 파일 생성 이후부터는 tcp 모드(jdbc:h2:tcp://localhost/~/test)로 접속해야 한다.


JPA 설정

persistence.xml 작성

  • 위치: /src/main/resources/META-INF/persistence.xml
<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>
      <!-- DB 연결 설정 -->
      <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"/>

      <!-- Hibernate 설정 -->
      <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>

데이터베이스 방언(Dialect) 이해하기

JPA는 DB 독립성을 지향합니다. 그러나 실제로는 DBMS마다 SQL 문법, 함수, 페이징 처리 등에서 차이가 있습니다. 이 차이를 해결하기 위해 방언(Dialect) 개념을 도입했습니다.

DBMSDialect 설정
H2org.hibernate.dialect.H2Dialect
MySQLorg.hibernate.dialect.MySQL5InnoDBDialect
Oracle 10gorg.hibernate.dialect.Oracle10gDialect

예시

  • MySQL은 VARCHAR
  • Oracle은 VARCHAR2
  • MySQL은 페이징 시 LIMIT, Oracle은 ROWNUM

JPA는 방언 설정을 통해 이런 차이를 내부적으로 자동 변환해줍니다.


2024년 기준 주의사항

  • Hibernate 6.x 이상 사용 시,
    • Java 17 필수
    • javax → jakarta 네임스페이스 변경

변경 예시

기존(javax)변경(jakarta)
javax.persistence.Entityjakarta.persistence.Entity
javax.persistence.Tablejakarta.persistence.Table

따라서 최신 프로젝트를 할 때는 라이브러리 버전과 네임스페이스에 특히 주의해야 합니다.

profile
👨🏻‍💻 Backend Developer

0개의 댓글