Entity 생성
이번에는 Entity를 생성해보겠습니다. Spring Boot에서 Spring JPA를 사용하게 된다면 프로젝트를 실행시킬 때 Entity 파일을 찾아 해당 파일의 정보에 맞춰 알아서 DB정보를 생성하게 됩니다.
=> 사실 이는 JPA 자체가 한다기 보다는 JPA를 통해서 hibernate라는 ORM을 이용하는 것 인데 이는 객체와 DB테이블을 매핑해주는 프레임 워크 입니다. javascript 진영에서도 typescript 를 이용한 typeORM이 있습니다.
이 때의 생성방식에 대하여 직접 설정해 줄 수 있는데 이는 resources/application.yml 이나 resources/application.properties 에서 설정을 할 수 있습니다.
spring:
profiles:
active: local
#DB정보
datasource:
url: jdbc:mysql://localhost:3306/fftl_03_RemakeBoard?serverTimezone=UTC&characterEncoding=UTF-8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
#JPA 정보
jpa:
show-sql: true
database-platform: org.hibernate.dialect.MySQL5Dialect
hibernate:
ddl-auto: create-drop
h2:
console:
enabled: true
저는 이같이 spring, jpa ... 부분인데
show-sql: true
를 통해서 spring boot가 실행되며 Entity를 읽으며 만들게 되는 SQL의 로그를 볼수 있게 됩니다.
database-platform: org.hibernate.dialect.MySQLDialect
를 통해서는 어떤 Database 문법을 사용할지에 대한 설정을 해줍니다.
hibernate의 ddl-auto: create-drop
는 꽤나 중요한데 언제 테이블을 생성할지, 삭제할지에 대한 설정입니다. create
를 이용하여 테이블이 없을 때 생성할지, update
추가되는 Entity가 있을 때에 추가하는 sql만 실행할지, create-drop
을 테이블을 생성한 뒤 통해서 서버가 종료될 때에 삭제하도록 할지 등등 다양한 설정이 사용됩니다.
이 외에도 다양한 기능의 설정들이 존재하는데 show-sql: true
를 통해서 출력되는 부분을 보기 쉽게 한다던가, 로그를 보일 수 있게 한다던가 하는 기능들이 있습니다.
일단은 저는 최소한의 기능만 사용하기 위해 조금만 설정을 해 두었습니다.
위처럼 application.yml 설정을 해두고 나면 이제 Entity를 생성해야 합니다.
package fftl.fftl03RemakeBoard.entity;
import lombok.Getter;
import javax.persistence.*;
@Entity
@Getter
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int userId;
@Column
private String username;
@Column
private String password;
@Column
private String nickname;
@Column
private String userRegdate;
}
Entity는 위와 같이 만들게 됩니다.
@Entity
어노테이션을 추가해 해당 클래스가 @Entity
임을 알려주어 프로젝트 실행 시 hibernate가 해당 클래스를 읽어들여 테이블로 생성하도록 만듭니다.
@Getter
어노테이션은 Lombok 이라는 라이브러리의 기능이며 Getter, Setter 등을 어노테이션만으로 만들 수 있도록 도와주는 기능을 합니다. 저는 @Getter
를 이용해 Getter만을 미리 만들어 주었습니다. Entity class는 함부로 변경되어서는 안되며 만약 Setter를 만들어 놓으면 무분별한 변경을 사용할 수도 있기 때문에 사용하지 않았습니다.
@Id
는 해당 테이블의 primary key값을 명시해 주며 @GeneratedValue(strategy = GenerationType.AUTO)
를 이용해 primary key값의 자동 생성에 대한 규칙을 지정해 주게 됩니다.
@Column
는 이용해 해당 속성이 일반 속성임을 명시해줍니다.
위와 같은 방법으로 세 개의 Entity를 생성하였고 프로젝트를 실행하니 아래처럼 Hibernate가 SQL문을 실행하는 것을 볼 수 있습니다.
서버가 실행된 이후 DB를 확인해보면 아래와 같이 테이블이 잘 생성된 것을 확인할 수 있습니다.
해당 내용의 프로젝트는 Github에서 확인할 수 있습니다.