MySQL, MariaDB, Oracle 등 다양한 RDB가 존재한다. 이 많고 많은 RDB들 중에서 혼자 연습해보는 실습용 DB를 만든다고 하면 H2 데이터베이스를 사용하는 것이 좋다.
H2 설치 링크 : http://www.h2database.com/html/main.html
*맥은 all Platform을 누르면된다.
실습용으로 H2를 많이 쓰는 까닭은
가볍고, 웹용 쿼리툴을 제공하고, MySQL, Oracle DB 시뮬레이션을 할 수 있고, 시퀀스 및 auto increment도 지원하고, DB를 띄우지 않고 메모리에서 실행할 수 있기 때문이다.
아까 .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를 만들고 연결해보자
Java 프로젝트 관리 도구로 Maven 혹은 Gradle을 사용할 수 있다. Maven은
1. 자바 라이브러리를 사용할 수 있게 하고 빌드를 관리해준다.
2. 프로젝트 의존성 관리
를 해준다.
권장사항 : 자바8이상, 인텔리제이 IDE
적당한 이름을 잘 넣어준다.
프로젝트 구조 확인
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 의존성 추가할 때는 반드시 다운받은 드라이버 버전이랑 맞춰야한다.
기본적인 spring boot 프로젝트와 설정파일까지 만들어졌다면, jpa를 사용하기 위한 설정 파일을들 만들어야한다.
<?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를 사용하는 기본적은 프로젝트까지 생성했다. 이 환경위에서 개발을 시작하면 되겠다.
오 JPA 잘 알 수 있었습니다 감사합니다.