JPA는 자바 애플리케이션과 JDBC 사이에서 객체를 관계형 데이터베이스에 매핑(ORM)을 시켜주는 기능을 수행합니다.
이를 위해서는 사전작업이 필요합니다.
persistence.xml
설정
다음은 설정 정보 입력입니다. JPA는 persistence.xml을 사용해서 필요한 설정 정보를 관리합니다.
이러한 설정정보를 영속성 유닛이라고 합니다.
이 파일이 'META-INF/persistence.xml' 클래스 패스 경로에 있으면 별도의 설정 없이 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="jpaSetup">
<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/~/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="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.xs
설정파일은 persistence로 시작하고 'XML 네임 스페이스'와 '버전'이 명시되어 있습니다.
그다음에는 ''를 통해 이 영속성 유닛의 이름을 설정합니다.
각 DB는 하나의 영속성 유닛을 등록해야 하며. 각 영속성 유닛에는 고유한 이름을 부여해야 합니다!
필수 속성
<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"/>
다음은 Jpa의 필수(표준) 속성을 입력할 차례입니다!.
속성 | 설명 |
javax.persistence.jdbc.driver | JDBC 드라이버 |
javax.persistence.jdbc.user | 접속 ID |
javax.persistence.jdbc.password | 접속 비밀번호 |
javax.persistence.jdbc.url | 접속 URL |
hibernate.dialect | 데이터 베이스 방언 설정 |
PLUS. 데이터베이스 방언
JPA는 특정 DB에 종속적이지 않은 기술이기 때문에 다양한 DB와 호환이 가능합니다. 하지만 의문점이 하나가 있는데 각 DB마다 SQL 문법과 함수가 다른 것은 어떻게 해결할까요? 이를 해결하는 핵심은 데이터베이스 방언입니다!
우리나라에도 표준어와 다양한 사투리(방언)가 있습니다. 뉴스와 같은 프로그램은 많은 사람들에게 정보를 알리는 목적이 있기 때문에 다양한 사투리(방언)들을 보편적인 표준어로 교정을 해 말합니다.
JPA도 마찬가지입니다! SQL 표준(표준어)이 아닌 특정 DBMS만의 고유한 기능이나 문법들을 JPA에서는 방언(사투리)이라고 합니다. 이 문제를 해결하기 위해서 '**Dialect' 속성을 통해 각 DBMS에 맞는 방언을 설정**할 수 있습니다!
이를 이용하면 뜻은 같지만 모양이 다른 다양한 DB들의 문법과 용어들을 통일시킬 수 있습니다
추가 옵션
<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" />
옵션 | 설명 |
'hibernate.show_sql' | Run 시 SQL문을 볼 것인가 설정. 보통 SQL의 흐름을 보기 위해서 많이 설정 |
'hibernate.format_sql' | SQL 포맷으로 깔끔하게 보여주는 옵션, 'show.sql'과 같은 목적으로 사용됨 |
'hibernate.hbm2ddl.auto' | 스키마 자동 생성. => 현재는 주석처리 |
PLUS. 데이터베이스 스키마 자동 생성(DDL)
개발단계에서는 계속해서 요구사항이 바뀝니다. 그렇기 때문에, 실행할 때마다 스키마를 자동으로 최신화하는 것이 덜 번거롭습니다. 스키마 자동 생성 기능은 매핑 정보와 데이터베이스 방언을 사용해 애플리케이션 실행 시점에 자동으로 DB 스키마를 최신화합니다.
생성 방법
추가 옵션에서<property name="hibernate.hbm2 ddl.auto" value="속성" /> 입력
속성 | 설명 |
create | 기존테이블 삭제 후 다시 생성 (DROP + CREATE) |
create-drop | create기능 + 애플리케이션 종료시점에서 생성 DDL 제거 (DROP + CREATE + DROP) |
update | 기존 테이블과 매핑정보를 비교해 변경분만 반영함. |
validate | 기존 테이블과 매핑정보를 비교해 차이가 있으면 에러를 반환하고 애플리케이션을 실행하지 않습니다. 엔티티와 테이블이 정상 매핑되어 있는지 확인하는 용도입니다. |
none | 비활성화 기능. |
주의점
실행할 때마다 스키마를 최신화하기 때문에 백업을 철저히 하지 않는 이상 절대 운영장비(서버)와 운영 단계에서 사용하면 안 됩니다!! 반드시 개발장비와 개발 단계에서만 사용하셔야 합니다.
'SPRING > JPA' 카테고리의 다른 글
06. 엔티티 매핑(2) - 기본 키 매핑 (0) | 2021.09.01 |
---|---|
05. 엔티티 매핑(1) (0) | 2021.09.01 |
04. 영속성 관리(2) - 영속성 컨텍스트의 이점 (0) | 2021.09.01 |
03. 영속성 관리(1) - 영속성 컨텍스트 (0) | 2021.08.30 |