JPA기본 - H2 데이터베이스와 JPA 프로젝트 생성(Maven)

박지현·2021년 9월 2일
0
post-thumbnail

실습용 DB - H2 Database

MySQL, MariaDB, Oracle 등 다양한 RDB가 존재한다. 이 많고 많은 RDB들 중에서 혼자 연습해보는 실습용 DB를 만든다고 하면 H2 데이터베이스를 사용하는 것이 좋다.
H2 설치 링크 : http://www.h2database.com/html/main.html

*맥은 all Platform을 누르면된다.

실습용으로 H2를 많이 쓰는 까닭은
가볍고, 웹용 쿼리툴을 제공하고, MySQL, Oracle DB 시뮬레이션을 할 수 있고, 시퀀스 및 auto increment도 지원하고, DB를 띄우지 않고 메모리에서 실행할 수 있기 때문이다.

H2 데이터베이스 설치

아까 .zip파일을 다운 받았다면 다운받은 경로로 이동해 압축을 푼다. 그리고는 터미널을 켜서 다음 [h2다운경로]/h2/bin으로 이동한다. bin폴더 안까지 왔다면

$ ./h2.sh

를 쳐서 h2를 실행시키면 다음과 같이 실행화면이 뜬다.

./h2.sh를 쳤는데
./h2.sh: command not found
의 에러 메시지를 받는다면 파일 권한을 확인해보자. 나의 경우 어떤 유저든지 간에 실행권한이 없었는데 모든 유저들에 대해서 실행권한을 줬다.

//바꾸기 전 - 실행 권한이 없다.
$ ll          
total 4504
-rw-rw-r--@ 1 jihyunhillpark staff   2.2M 10 14  2019 h2-1.4.200.jar
-rw-rw-r--@ 1 jihyunhillpark  staff    98B 10 14  2019 h2.bat
-rw-rw-r--@ 1 jihyunhillpark  staff   109B 10 14  2019 h2.sh
-rw-rw-r--@ 1 jihyunhillpark  staff   105B 10 14  2019 h2w.bat

//실행권한 주기
$ chmod 755 *
$ ll         
total 4504
-rwxr-xr-x@ 1 parkjihyun  staff   2.2M 10 14  2019 h2-1.4.200.jar
-rwxr-xr-x@ 1 parkjihyun  staff    98B 10 14  2019 h2.bat
-rwxr-xr-x@ 1 parkjihyun  staff   109B 10 14  2019 h2.sh
-rwxr-xr-x@ 1 parkjihyun  staff   105B 10 14  2019 h2w.bat

어찌 되었건 아래와 같은 화면에서 connect를 눌러 Db를 만들고 연결해보자

프로젝트 생성

Maven환경

Java 프로젝트 관리 도구로 Maven 혹은 Gradle을 사용할 수 있다. Maven은
1. 자바 라이브러리를 사용할 수 있게 하고 빌드를 관리해준다.
2. 프로젝트 의존성 관리
를 해준다.

Maven 프로젝트 생성

권장사항 : 자바8이상, 인텔리제이 IDE

  1. intellij를 켜서 새로운 Maven리파지토리를 만든다.
  1. 적당한 이름을 잘 넣어준다.

  2. 프로젝트 구조 확인

  3. pom.xml
    이곳에서 프로젝트에 사용할 라이브러리들을 추가해줘야 하므로 jpa hibernate에 대한 라이브러리를 추가한다.
    추가할때 의존성 라이브러리 버전은
    spring.io > project > learn에서 Referece Doc > Appendix F. Dependency Versions 에서 찾을 수 있다.

    최근 안정된 버전은 5.4.32버전이다.

<!-- pom.xml -->
...
<!-- JPA 하이버네이트 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.4.30.Final</version>
        </dependency>

        <!-- H2 db -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.200</version>
        </dependency>
...

디펜던시가 추가된 것을 보면 javax.persistence..2.2가 있는데 이는 hibernate가 JPA인터페이스 자체를 가지고 있어서 얘만 가지고 있으면 hibernate에 필요한거 다 쓸 수 있다는 것을 의미한다.

h2 db 의존성 추가할 때는 반드시 다운받은 드라이버 버전이랑 맞춰야한다.

JPA 설정 세팅파일 생성

기본적인 spring boot 프로젝트와 설정파일까지 만들어졌다면, jpa를 사용하기 위한 설정 파일을들 만들어야한다.

persistence.xml

  1. resources/META-INF/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>

javax로 시작하는 옵션
-> jpa자체가 표준이어서, 다른 jpa구현체로 바꿔도 고대로 적용
hibernate로 시작하는 옵션
-> hibernate 전용 옵션. 구현체 바꾸면 다 바꿔야 함

persistence.xml에서 필수 프로퍼티인 javax.persistence.jdbc.url
의 url값은 본인이 실제 사용하는 H2 데이터베이스의 주소를 넣어야한다.

hibernate.dialect는 무엇인가?

JPA는 특정 데이터베이스에 종속적이면 안 된다. 즉, Oracle, MySql 등 데이터베이스를 바꿔도 동작해야한다. dialect방언이란 SQL 표준을 지키지 않는 특정 데이터베이스의 특정한 기능 이라고 할 수 있다.
예를 들어 페이징에 대해 MySQL에서는 LIMIT키워드를 사용하고, Oracle은 ROWSUM 키워드를 사용한다.
위 코드에 적힌 property 문장 뒷부분에 H2Dialect라고 명시함은 H2의 방언을 사용하겠단 말이고, JPA는 이 방언을 상요하는 것을 인지하고 번역한다.

자, 이제 그러며 H2 데이터 베이스과 jpa를 사용하는 기본적은 프로젝트까지 생성했다. 이 환경위에서 개발을 시작하면 되겠다.

profile
여행과 tea를 좋아하는 젼

1개의 댓글

comment-user-thumbnail
2021년 9월 3일

오 JPA 잘 알 수 있었습니다 감사합니다.

답글 달기