H2 DataBase
JPA를 사용하기 위해서는 데이터베이스가 필요합니다. 실습에 활용하기 좋은 DB인 H2를 사용하도록 하겠습니다.
H2 DB의 장점은 굉장히 가볍습니다. 그리고 MySQL이나 Oracle DB 시뮬레이션도 가능합니다.
H2 DB를 설치하는 방법을 알아보도록 하겠습니다.
설치 방법
H2 DB를 설치하기 위해서는 해당 웹페이지를 들어가보도록 하겠습니다. H2 DB 웹페이지 바로가기
H2 DB 웹페이지를 접속하면 위와같은 홈페이지가 나오게 됩니다. Download에서 자신의 OS환경에 맞는 파일을 다운로드 받아주고 압축을 풀어주도록 합니다.
실행하기
Terminal을 활용하여 H2 DB를 실행하도록 하겠습니다.
Mac의 경우 설치한 h2 디렉토리의 /bin에 들어가서 h2.sh를 실행시켜주면 됩니다.
./h2.sh 명령어를 사용하여 DB를 실행시켜줄 수 있습니다. 이 때 위 화면이 나오지 않는 경우 localhost:8082로 접근해 주시기 바랍니다.
연결을 하면 DB로 연결이 됩니다. 이 후 프로젝트 셋팅을 할 때 H2 DB의 버전 정보를 알아야하므로
SELECT H2VERSION() FROM DUAL
를 입력하여 버전에 대한 정보를 사전에 확인해 두시는 것이 좋습니다.
프로젝트 세팅
이제 본격적으로 JPA를 설정하도록 하겠습니다.
이번 포스팅에서는 Java의 Maven 프로젝트를 사용하도록 하겠습니다.
라이브러리 추가
우선 Maven을 사용하기 때문에 pom.xml에서 DB와 JPA를 사용한다고 설정해 주어야 합니다. (Gradle은 build.gradle에서 설정)
JPA 설정
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.10.Final</version>
</dependency>
JPA hibernate 라이브러리를 설정해주기 위하여 위와같이 dependency를 추가하여 줍니다.
참고로 hibernate는 JPA의 구현체를 의미합니다. JPA가 인터페이스라고 하면, Hibernate는 그것을 사용할 수 있도록 구현한 구현체라고 생각해주면 됩니다.
DB 설정
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
H2 DB 라이브러리를 사용하기 위해서 위와 같이 dependency를 추가해 주면 됩니다. 이 때 버전은 위에서 H2 DB를 설치하고 확인한 값을 넣어주면 됩니다.
JAVA 11 오류
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
*참고로 JAVA 11을 사용할 때 javax.xml.bind.JAXBException 에러가 발생을 하면 아래 dependency를 추가시켜주면 됩니다.
JPA 설정하기
JPA가 구동되는 원리를 간단히 알아보겠습니다. META-INF 디렉토리에 있는 persistence.xml을 찾아가 설정 정보를 확인하여EntityManagerFactory를 생성되고 이것을 활용해 EntityManager를 만들어 JPA를 사용할 수 있게 됩니다.
따라서 persistence.xml을 세팅해 주어야합니다. persistence.xml에는 어떤 DB를 사용하는지에 대한 설정 정보가 들어가 있습니다.
Persistence 구현
/resources/META-INF/persistence.xml을 생성하고 xml파일에 정보를 입력해주면 됩니다.
<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.dialect" value="org.hibernate.dialect.H2Dialect"/>
dialect는 방언(사투리)라는 의미입니다. DB가 변경이 되어도 해당 DB로 쿼리를 해석해주기 위한 세팅값입니다. Oracle DB로 개발을 하다 MySQL DB로 변경을 해주게 되면 언어적으로 약간의 차이로 인하여 코드를 변경해야하는 소요가 발생하게 됩니다. 동일한 기능에 대한 요청이지만 DB가 제공하는 문법이 약간씩 다르기 때문에 이러한 것을 JPA가 대처할 수 있도록 설정해주는 값 입니다.
1. <property name="hibernate.show_sql" value="true"/>
2. <property name="hibernate.format_sql" value="true"/>
3. <property name="hibernate.use_sql_comments" value="true"/>
그 외 추가적으로 JPA를 사용하며 유용한 옵션입니다.(선택 사항)
1. sql을 보여주는 옵션
2.보여주는 sql을 이쁘게 포맷팅해 보여주는 옵션
3. 어느 명령어를 사용하였는지 알려주는 옵션
이 글은 김영한님의 강의 "자바 ORM 표준 JPA 프로그래밍"를 공부한 후 작성한 글 입니다.
'Back-end > JPA' 카테고리의 다른 글
JPA 기본 키 매핑하기 (0) | 2022.01.12 |
---|---|
JPA로 필드와 칼럼 매핑하는 annotation 알아보기 (0) | 2022.01.10 |
JPA로 객체와 테이블 매핑하기 (0) | 2022.01.07 |
JPA 영속성 컨텍스트란? (0) | 2022.01.03 |
JPA로 CRUD하기 (0) | 2021.12.30 |