본문 바로가기

JPA

JPA로 CRUD해보기(0) 프로젝트 생성

툴은 Intellij를 사용하고, JAVA는 모두 깔아놨을 거라고 믿는다. (적당히 1.8 이상 아무거나면 괜찮다.)

의존성 관리 툴은 Maven을 사용할 것이다.

 

H2

데이터베이스는 H2를 사용한다.

www.h2database.com/으로 가서 적당히 설치해준다.

처음에 접속이 잘 안 되면 url에서 뒤에 key값은 유지시키고 ip를 localhost로 고쳐준다.

 

그리고 파일 최초 생성 시에만 파일생성모드로 접근해야 한다.

이를 위해 JDBC URL을 'jdbc:h2:DB파일생성경로'로 설정한다.

 

파일 생성이 확인된 후에는 tcp를 통해서 네트워크 모드로 접근한다

이를 위해 JDBC URL을 ' jdbc:h2:tcp://localhost/DB파일생성경로'로 설정한다.

 

DB 파일 생성경로로 가보면 db관련 파일이 생긴 것을 확인할 수 있다.

ex) /home/jpa로 설정 시 jpa.mv.db 파일이 /home 폴더에 생성된다.

 

프로젝트 생성하기

이렇게 New Project 해서 Maven Project를 선택해준다. 그리고 Next를 누른 다음에

경로를 적당히 지정해주고, GroupId, ArtifactId, Version을 적당히 지정해준다.
참고로 ArtifactId는 우리가 만든 프로그램의 최종 Output file의 이름이 된다. finish를 누르
면 프로젝트가 생성됐을 것이다.

Maven Project에서는 pom.xml을 통해 외부 라이브러리(의존성) 관리를 할 수 있다.

그러면 이제 외부 라이브러리를 땡겨보자!!!! 그냥 이 코드를 pom.xml 파일의 </project> 위에 적당히 복붙하면 된다.

<dependencies>
  <!-- JPA 하이버네이트 -->
  <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.3.10.Final</version>
  </dependency>
  <!-- H2 데이터베이스 -->
  <dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.200</version>
  </dependency>
  <!-- jaxb-api -->
    <dependency>
      <groupId>javax.xml.bind</groupId>
      <artifactId>jaxb-api</artifactId>
      <version>2.3.0</version>
    </dependency>
</dependencies>

그리고 Maven이 당겨온 hibernate 라이브러리를 확인해보면 jpa까지 알아서 끌고 와주는 걸 볼 수 있다.
이로써 우리는 jpa 프로젝트를 만들었다고 말할 수 있다.

이제 설정을 해보자!!! JPA 프로젝트는 persitence.xml이라는 파일을 통해 DB 설정을 해줘야 한다.

그리고 persistence.xml은 resources/META-INF/persistence.xml에 넣어야 한다. 레츠기릿!!

<!-- 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">  <!-- 보통 database당 하나씩 만듦 -->
        <properties>
            <!-- 필수 속성 -->
            <!-- javax는 다른 JPA 라이브러리를 사용해도 그대로 반영(JPA 표준속성)
                 hibernate는 hibernate 전용 속성
            -->
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <!-- 데이터베이스 드라이버 -->
            <property name="javax.persistence.jdbc.user" value="sa"/> <!-- 데이터베이스 username -->
            <property name="javax.persistence.jdbc.password" value=""/> <!-- 데이터베이스 password -->
            <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test"/> <!-- 데이터베이스 접근URL -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> <!-- dialect설정에 따라서 hibernate가 해당 SQL로 쿼리를 만들어준다 -->

            <!-- 옵션 -->
            <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로 시작하는 것과 hibernate로 시작하는 것이 있다.
앞에 javax가 붙은 속성들은 JPA 표준속성이지만, hibernate가 붙은 속성은 hibernate 전용속성이라는 사실!!!!
JPA 라이브러리는 hibernate만 있는 것이 아닌데(JPA 쓴다고 하면 90% = hibernate), 다른 라이브러리를 쓸 때는 그 라이브러리에 맞게 설정해줘야 한다.

 

위 속성 중 hibernate.dialect는 매우 중요한 속성이다. value로 H2Dialect 클래스를 넣고 있는데,

이 클래스에 따라서 JPA가 개발자대신 SQL을 만들어줄 때 적절하게  알아서 만들어서 DB에 쏴준다고 생각하면 된다.
현재는 JPA가 H2를 위한 SQL을 만들어줄 것이다.

즉, 내가 쓰는 DBMS에 따라서 설정만 조금 바꿔주면, 데이터베이스 계정, 드라이버, url 정보만 Oracle에 맞게 바꿔주면 코드는 거의 안 고쳐도 된다는 것이다.

 

참고강의: 배달의 민족 개발팀장 김영한 강사님의 JPA 강의