[JPA] 프로젝트 생성
기본적인 환경은
- IntelliJ
- Maven
- H2
를 사용하여 진행하도록 하겠다.
보통 프로젝트를 진행하게 되면 Spring Framework와 같이 사용하기 때문에 대부분의 필요한 작업들은 Spring이 자동으로 해준다. 하지만 이 포스팅에서는 JPA에서 어떤 동작들이 이루어지는지 자세하게 알기 위해서 순수 JPA만 동작하는 프로젝트를 만들어서 진행해보도록 하겠다.
우선 Maven기반의 프로젝트를 새로 생성한다.
maven은 라이브러리를 관리해주는 도구이다. 이전에는 라이브러리를 직접 다운로드 받아서 사용했지만 maven을 사용한다면 라이브러리를 간단하게 가져올 수 있고 관련된 필요한것들을 자동으로 가져오고 관리해주기 때문에 편리하게 사용할 수 있다.
최근에는 gradle을 많이 사용하기도 해서 gradle로 해도 무방하다.
라이브러리를 가져오기 위해서 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.jpaTest</groupId>
<artifactId>jpaTest</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.7.Final</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.197</version>
</dependency>
</dependencies>
</project>
위와 같이 코드를 입력한 후 저장하면 hibernate와 h2의 라이브러리를 가져온다. hibernate는 구현체로서 jpa를 사용할 수 있도록 도와줄 것이다.
다음으로는 왼쪽 폴더에서 src/main/resource안에 persistence.xml파일을 만들어 줄 것이다. 경로가 바뀌면 안되므로 신경써서 만들어주자.
먼저 resource에 META-INF라는 폴더를 만든 후 안에 persistence.xml을 만든 후 아래코드를 입력하자.
<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" version="2.2">
<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/~/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>
jpa의 기본적인 설정들을 작성한 것이다. persistence-unit은 이 후 EntityManagerFactory에서 사용할 이름을 hello로 정해주는 것이고, 아래에는 h2데이터베이스와의 연결을 위한 코드이다. h2가아닌 다른 DB를 사용하고 싶다면 변경하면 된다.
자, 이제 H2 데이터베이스를 설치해보자.
https://www.h2database.com/html/main.html에 들어가서 본인의 OS에 맞게 설치하면된다.
설치가 끝났다면 cmd창에 들어가서 h2가 설치된 폴더의 bin에 들어간 후 h2.bat을 실행시켜준다.(필자는 window를 사용했다.)
그러고나면 h2로 연결할 수 있는 화면이 나타날 것이다. 혹시 나타나지 않는다면 http://localhost:8082로 직접 들어가면된다.
JDBC URL을 사진과 같이 설정한 후 연결버튼을 클릭하면 h2에 접속이 완료된다.
이것까지 작성하면 DB와의 연결이 끝난 것이다.
자, 그렇다면 DB의 테이블과 연동될 entity클래스를 만들어보도록 하자.
먼저 src/main/java/hellojpa/entity 의 경로에 맞게 패키지를 생성한 후 Member라는 클래스를 만들어보도록 하겠다.
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name="USERNAME")
private String name;
private int age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
잠시 코드 설명을 하자면
- @Entity : 데이터베이스와 연동될 클래스라는 의미이다. 클래스이름은 테이블이름과 동일하게 작성해주자.
- @Id : 테이블에서의 PK와 같은 역할이다.
- @GeneratedValue(strategy = GenerationType.AUTO) : 번호가 자동으로 생성되게 해준다.
- mysql의 auto_increment와 같은 기능이다.
- private Long id, private String name, private int age는 컬럼을 지정하는 것이다.
- String은 문자열, int와 Long은 숫자이다. Long이 int보다 더 많은 값을 받을 수 있다.
- @Column : 컬럼에 추가적인 필요한 것들을 넣어준다.
- name = "USERNAME"은 변수는 name으로 정했지만 컬럼명을 USERNAME으로 했을 때 이름을 변경해주는 것이다.
그리고 getter, setter을 이용해 값을 넣고 뺄 수 있도록 했다.
이제 마지막으로 JPA를 실행시킬 Main클래스를 만들어보자.
src/main/java/hellojpa 안에 Main클래스를 생성한다.
그리고 EntityManagerFacotry를 선언해 준다.
package hellojpa;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class Main {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
emf.close();
}
}
EntityManagerFacotry는 말그대로 EntityManager를 담는 공장이다. 이것은 서버가 실행될 때 단 한번만 실행되어야 한다.
EntityManagerFactory와 Persistence를 import할 때는 반드시 javax.persistence.으로 시작되는 것들을 받아야한다.
자 이제 Main함수를 실행시켜보자.
여러 로그들이 나오면서 중간에 member클래스가 생성되는 쿼리가 실행되고 있음을 알 수 있다.