JPA 프로젝트 생성

김득회·2022년 5월 29일
0

JPA

목록 보기
2/11

책에 나와있는 내용은 이클립스로 되어있어서 Intellij로 변환하면서 프로젝트를
만들어 보았다.

이클립스보다 Intellij가 훨씬 안정적이고 편리하게 사용할 수 있었다.

원래는 Gradle을 사용하여 실습을 하려 했지만 책이 Maven으로 되어있어서
차이는 없겠지만, Maven으로 프로젝트를 만들었다.

Maven 프로젝트를 새로 열어 주고 Next를 클릭한다.

프로젝트 이름과 설치 경로를 입력해주고 Artifact까지 설정을 해줬으면 Finish를 눌러 프로젝트를 생성한다.

JPA를 사용하기 위해서는 우선 Maven 레포지토리에서 하이버네이트와 DB 라이브러리를 추가해줘야한다. Gradle에서는 build.gradle이겠지만 Maven에서는 ㅐpom.xml을 수정해준다.

Dependency를 추가해서 라이브러리를 다운 받아준다.

	<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>jpa_basic_study1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!-- JPA 하이버네이트 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.6.9.Final</version>
        </dependency>
        <!-- H2 데이터베이스 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.200</version>
        </dependency>
    </dependencies>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

</project>

이번 학습을 위한 DB는 H2 데이터베이스로 학습용으로 탁월하다고 알려져 있다.

또한 JPA의 설정 정보 추가를 하기위해 프로젝트의 resource/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/~/Documents/Spring Project/SpringStudy/JPAStudy/testET"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
            <!--<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>-->

            <!-- 옵션 -->
            <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>

여기서 중요한 것은 JPA는 특정 DB에 종속적이지 않다는 특성으로 인해
hibernate.dialect 옵션으로 연결할 DB의 종류를 명시해준다.

Hibernate 속성

hibernate.show_sql : 하이버네이트가 실행한 SQL을 출력한다.
hibernate.form_sql : 하이버네이트가 실행한 SQL을 보기 쉽게 정렬한다.
hibernate.use_sql_comments: 쿼리를 출력할 때 주석도 함께 출력한다.
hibernate.id.new_generator_mappings : JPA 표준에 맞춘 새로운 키 생성 전략을 사용한다.

이것은 데이터베이스 방언을 설정하는 부분으로 우리가 지역마다 사투리를 쓰듯
데이터베이스도 각기 다른 명령어나, 문법이 있기 때문에 JPA가 자동적으로 처리하기 위해 명시를 해주는 것이다.

데이터베이스 방언

  1. 데이터 타입 : 가변 문자 타입으로 예를들면 MySQL은 VARCHAR, Oracle은 VARCHAR2를 사용한다.

  2. 다른 함수명 : 문자열을 자르는 함수의 SQL표준은 SUBSTRING()을 사용하지만 오라클에서는 SUBSTR()을 사용한다.

  3. 페이징 처리 : MySQL에서는 LIMIT를 사용하지만 오라클에서는 ROWNUM을 사용한다.

이처럼 SQL표준을 지키지 않거나, 특정 데이터베이스만의 고유한 기능을 JPA에서는 방언이라고 한다. 특정 데이터베이스에 종속 되는 기능을 많이 사용하면 나중에 데이터베이스를 교체하기 어렵다. 하이버네이트 같은 JPA구현체들은 이러한 문제를 해결하기위해 데이터베이스 방언 클래스를 제공한다.

여기까지 완료되었으면 프로젝트 생성은 끝이 난다.

profile
감성 프로그래머 HoduDeuk

0개의 댓글