JPA/JPA 기본

4. 프로젝트 생성

sdafdq 2023. 10. 19. 08:18

강의가 옛날거라 Maven 써서 좀 그렇다..

 

스프링 부트도 안쓴다..

근데..

저 groupId 할 때 - 썼더니 저게 패키지 src java 내부에 패키지로도 생성되고 거기에 메인 패키지가 생기는데

패키지이름으로 - 이거 쓰면 안되는 듯?

refactor -> rename 해주면 정상적으로 되긴 함.

아니면 아예 그 생성된 패키지 자체를 지워버리고,

새로 패키지 만들어서 거기 안에 main 클래스 만들고 main 메소드 넣어줘도 되긴 함.

 

보면 pom.xml이 생기는데

이게 build.gradle 역할

 

 

 

 

<?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>ex-hello-jpa</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

</project>

이렇게 되어 있음.

이제 종속성, 즉 라이브러리 추가해 줘야 함.

 

 

 

<?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>ex-hello-jpa</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.3.10.Final</version>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.199</version>
        </dependency>

    </dependencies>

</project>

이렇게 종속성 추가 됨.

근데, 강의가 옛날거기도 하고, hibernate나 h2database 랑 연결하는 라이브러리 다 버전이 안맞을 수 있음.

이럴 때는,

https://spring.io/projects/spring-boot#learn

spring -> projects -> spring boot -> learn

가보면,

스프링 버전에 따란 참조 문서를 볼 수 있는데,

거기서 내가 쓸 스프링 버전에 맞춰서 지정.

뭐 솔직히 지금은 JPA만 써서 해볼거라 상관은 없음. 

나중에 스프링 부트 써서 할 듯.

 

여튼 들어가서,

 

이렇게 분류를 잘 해놨음.

 

들어가서 org.hibernate 찾아보면 됨.

이 앞에 붙는 org

io도 있고 몇종류 있긴 함.

 

근데 지금은 hibernate 이름 바뀐 듯 살짝

현 스프링에 맞는 버전은 6.2.9.Final

그리고, 지금 보면 hibernate-entitymanager가 없다.

외부 찾아보니까.

https://central.sonatype.com/artifact/org.hibernate.orm/hibernate-core/6.1.4.Final

 

Maven Central: org.hibernate.orm:hibernate-core:6.1.4.Final

Discover hibernate-core in the org.hibernate.orm namespace. Explore metadata, contributors, the Maven POM file, and more.

central.sonatype.com

걍 core 넣으면 되는 듯?

6.2.9 maven hibernate 해서 쳐보면 나오긴 함.

거기도 core긴 함.

 

h2도 똑같이.

 

참고로 저 위 사진에서, 중간게 artifactId임.

그래서 

이것도 똑같이 넣음.

아 근데, 저거는 내가 설치한 h2 버전에 맞게 설치하는 게 좋음.

마침 그것도 2.1.214임.

h2에서 버전아는 방법은 일단 h2 들어가서

select h2version() from dual;

이거 쿼리로 날려보면 됨.

<dependencies>
    <dependency>
        <groupId>org.hibernate.orm</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>6.2.9.Final</version>
    </dependency>

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>2.1.214</version>
    </dependency>

</dependencies>

 

 

 

 

JPA 설정하기.

우리가 JPA를 사용하려면 설정을 해 줘야 한다.

이거 application.properties에 했던 내용들 인 듯.

먼저, 경로가 정해져 있음.

resources/META-INF/persistence.xml

여기다 해야 함.

persistence가 영구적으로 저장하다 그런 뜻이니 딱 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="jakarta.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="jakarta.persistence.jdbc.user" value="sa"/>
            <property name="jakarta.persistence.jdbc.password" value="1234"/>
            <property name="jakarta.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"/>
        </properties>
    </persistence-unit>
</persistence>

maven이니 xml 형식이고, xml버전은 1.0이고, 언어 형식은 utf-8

 

persistence 이 부분이 이제 중요한 데,

persistence 버전은 2.2, 즉 JPA 2.2버전이라는 거임.

뭐 링크에서 가져오고, xsi는 어떤 그러니까 문서의 형식? 그런 걸 말하는 듯?

그 xsi 더 자세한 건 저기 저 persistence 저기 링크에서 가져오는 듯.

 

그 다음 persistence-unit 이름은 hello

그러니까 이게 무슨 뜻이냐면,

우리가 나중에 createEntityManager("hello")해서 EntityManager를 만들 때,  저 hello를 저기서 식별해서 저 옵션으로 만든다는 뜻임.

그냥 일단은 다르긴 한데, DataSource랑 비슷함.

DataSource는 DB와 연결에 더 중점을 두고,

저거는 JPA와 엔티티관리에 더 중점을 두긴한건데,

둘다 DB 관련 작업을 구성하는데 쓰긴 함....

 

근데 다르다는 건 꼭 알고 있으셈.

 

여튼, 그 다음 이제 구성에 대한 정보들 프로퍼티로 넣어주는데,

driver : 어떤 드라이버, 어떤 db인지,

user : DB유저이름

password : 비밀번호

url : DB의 url

 

hibernate.dialect : dialect 이거는 방언 이라는 뜻인데, 그러니까 왜 DB마다 조금씩 다른 sql문이라던가 그런 특징? 그런 게 있기 때문에 이게 어떤DB의 방언인지 넣어 줘야 함. 

필요하면 커스텀도 가능함.

 

여기까지가 필수속성이고,

 

 

 

show_sql : 이거는 그냥 sql 로그로 찍어주는 뭐 그런 거 인듯.

format_sql : 이거는 위로인해 나오는 sql로그를 이쁘게 포맷팅 해서 보여줌

use_sql_comments : 이거는 저 sql로그가 어디서 실행되었는지 코멘트 달아주는 거임.

나머진 뒤에 가면서 설명 하실 듯.

 

참고로, hibernate 붙은 건 하이버네이트 전용옵션이고, 구현체를 하이버네이트 말고 다른 걸 쓰면 다른 걸로 바꿔야 하긴 하는데 지금은 뭐 거의 대부분 하이버네이트... 쓸 듯.

'JPA > JPA 기본' 카테고리의 다른 글

6. 영속성 컨텍스트  (0) 2023.10.20
5. 개발  (0) 2023.10.19
3. JPA  (0) 2023.10.19
2. 객체지향과 관계형DB  (0) 2023.10.18
1. JPA  (0) 2023.10.18