[JPA] Hello JPA 프로젝트 생성

Benjamin·2023년 3월 26일
0

JPA

목록 보기
1/4

이 게시글은 인프런 김영한님의'자바 ORM 표준 JPA 프로그래밍 - 기본편'을 보며 공부하고 작성한 게시글임을 밝힙니다.
강의 내용 외에도 공부한 내용과 본인생각이 함께 있습니다

JPA 프로젝트 설정

💻 하이버네이트 + Maven + H2 DB 사용 (IntelliJ 사용)

java 8이상을 권장한다.

아래 스펙으로 생성한다.

  • ArtifactId : build되면 나오는 파일

Maven을 사용하는 프로젝트를 잘 생성했다면 라이브러리를 넣는게 중요하다!
(초반에는 따로 넣은게 없기때문에 기본만 잡혀있을것이다)

pom.xml 파일의 dependencies에 어떤 라이브러리를 쓸거라고 넣으면 된다.
https://hibernate.org/orm/releases/
위 사이트에서 사용할 수 있는 버전을 볼 수 있다.

결국 나중에는 SpringBoot와 같이 쓸 것이다.
따라서 여기서 사용 가능한 버전을 고려해야한다.

프레임워크를 사용할 때 버전 선택시 팁이다.

나같은 경우에는 Spring Boot 2.7.9를 사용중이다.
아래 사이트를 보자
https://spring.io/projects/spring-boot#learn


2.7.x 에서 사용되고 있는 버전인 2.7.10에 관한 Reference Doc을 살펴보자.


org.hibernate와 일치하는 내용을 쭉쭉 찾다보면 지원버전을 볼 수 있다.
궁합을 맞춰서 Maven 프로젝트의 pom.xml 파일의 dependencies에 추가할 때에는 5.6.15로 사용하면 좋다.

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

그리고 데이터베이스를 접근해야하니까, 접근할 수 있는 데이터베이스 드라이버가 있어야한다.
우리는 H2데이터베이스를 쓰기로했으니 이를 dependencies에 추가하자.
❗️주의할 점! H2데이터베이스 다운받은거랑 같은 버전을 사용해야한다!

<pom.xml 전체코드>

<?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>jpa-basic</groupId>
    <artifactId>ex1-hello-jpa</artifactId>
    <version>1.0.0</version>
    <dependencies>
        <!-- JPA 하이버네이트 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.6.15.Final</version>
        </dependency>
        <!-- H2 데이터베이스 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>2.1.214</version>
        </dependency>
    </dependencies>
</project>

artifactId에는 hibernate-entitymanager을 써야한다.
그렇게하면, 필요한 의존성 연관된 라이브러리들을 쭉 당겨온다.
(하이버네티스 사용시 필요한것을 다 당겨쓸 수 있다)

위와 같이 JPA 하이버네이트를 추가해주고 다시 로드하면 ?!

다양한 라이브러리들이 자동으로 추가된 것을 볼 수 있다.

중간에 jvax.persistence-api:2.2 가 추가된것을 볼 수있다. 이것은 뭘까?

설명하자면 JPA는 인터페이스인데, 인터페이스의 구현체로 지금 하이버네이트를 선택한 것이다.
즉, 하이버네이트가 JPA인터페이스를 갖고있는것이다.
실제로 들어가보면 사용할 JPA 인터페이스들이 다 모아져있다.

H2 데이터베이스

  • 가볍다
  • 웹용 쿼리툴을 제공
  • MySQL, Oracle 데이터베이스 시뮬레이션 기능

JPA 설정하기

우리가 프로그래밍을 배울 때 처음에 'Hello World'를 띄우는것처럼 JPA로 바로 무엇인가 할 수 있는건 아니다.
JPA를 설정한다는 것은 JPA를 띄우기위한 몇가지 세팅 파일을 넣어주는것이다.

그 중 첫번째가 JPA 설정파일이다.

persistence.xml 파일

'persistence.xml' 파일을 만들어서 프로젝트에 넣어야한다.
위치 : /META-INF/persistence.xml
❗️표준 위치가 정해져있기때문에 위치가 매우 중요하다!

Maven 구조에서는 자바파일들은 'java'에 넣고, 나머지 파일들은 resources에 넣으면 된다.

따라서 resources 아래에 META-INF 디렉토리를 만들자.

<?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:~/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>
  • persistence version : JPA 버전

  • persistence-unit name : 이름을 뭘로 할건가? (보통 데이터베이스 이름 많이함)

  • <!-- 필수 속성 --> 이하 내용 : 어쨌든 JPA가 데이터베이스를 사용하기때문에 데이터베이스 접근 정보를 넣어줘야한다.
    -> javax.persistence.jdbc.driver : 사용하는 드라이버(여기서는 H2 DB 사용)
    -> javax.persistence.jdbc.url : 접근 url -> h2연결할때 쓰는 url과 똑같이 맞춰줘야한다. (user, password 속성도 동일)

-> hibernate.dialect : 아주 중요!! 데이터베이스 방언 표시 ex) H2Dialect : 나 H2 방언 써~ -> jpa는 '니가 이거쓰구나 그럼 내가 알아서 번역해서 사용할게'해서 인식함

  • 옵션
    -> hibernate.show_sql : 쿼리 나가는거 볼거야말거야?
    -> hibernate.format_sql : 보기 좋게 포맷팅해주는것
    -> hibernate.use_sql_comments : 이 쿼리가 왜 나온지 알려주는 것 (/* */ 사이에 출력되는 것)

필수속성에 보면, 어떤건 javax로 시작하고, 어떤건 hibernate로 시작한다.
어떤 차이가 있을까?

  • javax: 하이버네이트 라이브러리 말고, 다른 JPA 구현 라이브러리를 사용해도 가능(이게 그대로 적용됨)
    -> 표준을 지키는 것

  • hibernate : 하이버네이트에서만 가능! 다른 라이브러리도 바꾸면 이것도 다 바꿔야함
    -> 하이버네이트 전용 옵션

src-main-java 아래에 main()이 있는 파일을 만들어서 환경 테스트 겸 돌려봤는데, 에러가 났다.

java: error: release version 5 not supported

Module ex1-hello-jpa SDK 11 does not support source version 1.5. 

아래 이 코드에서 build ~ /build 사이의 코드를 추가해줬다.
참고 = https://www.inflearn.com/questions/19302/error-java-error-release-version-5-not-supported

<?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>jpa-basic</groupId>
    <artifactId>ex1-hello-jpa</artifactId>
    <version>1.0.0</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <!-- JPA 하이버네이트 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.6.15.Final</version>
        </dependency>
        <!-- H2 데이터베이스 -->
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>2.1.214</version>
        </dependency>
    </dependencies>
</project>

그리고 다시 실행해보니 'exit code 0'이 뜨며 실행은 잘 됐으나, 아래 처럼 빨간색 표시가뜬다..

0개의 댓글