이 문서는 스프링부트 Blog 프로젝트에서 User, Board, Reply 테이블을 생성하는 방법을 설명합니다. 각 클래스의 필드와 어노테이션을 사용하여 테이블을 생성하고, ERD를 통해 관계를 확인할 수 있습니다.
JPA (@Java Persistence API)는 자바 언어를 위한 ORM(Object Relational Mapping) 기술입니다. ORM은 관계형 데이터베이스와 객체지향 프로그래밍 언어 사이의 데이터를 변환해주는 기술입니다.
JPA에서 @Entity
어노테이션은 해당 클래스가 JPA에서 관리하는 엔티티임을 나타냅니다. 이 어노테이션이 적용된 클래스는 데이터베이스에서 테이블로 매핑됩니다.
예를 들어, User
클래스가 있다면, 다음과 같이 @Entity
어노테이션을 적용할 수 있습니다.
@Entity
public class User {
// ...
}
이제 JPA는 User
클래스가 데이터베이스 테이블과 매핑되어야 함을 알고, 해당 테이블의 이름과 컬럼 정보를 자동으로 생성합니다.
@Entity
어노테이션은 JPA에서 엔티티로 사용될 클래스임을 나타내는 것 외에도, 해당 클래스가 데이터베이스에서 매핑될 테이블 이름을 지정하는 등의 기능을 수행할 수 있습니다. 예를 들어, @Table(name = "users")
와 같이 @Entity
어노테이션과 함께 테이블 이름을 명시할 수 있습니다. 또한, @Id
어노테이션을 사용하여 해당 클래스의 주키(primary key)를 지정할 수도 있습니다.
@Id
어노테이션을 사용하여 클래스의 주키를 지정할 때, JPA는 해당 클래스의 필드 중 하나를 식별자(identifier)로 사용한다는 것을 나타냅니다. 이를테면, User
클래스에서 id
필드를 주키로 사용할 경우, 다음과 같이 작성할 수 있습니다.
@Entity
@Table(name = "users")
public class User {
@Id
private Long id;
// ...
}
JPA는 이제 id
필드를 데이터베이스 테이블의 주키로 매핑합니다. 특별한 경우가 아니라면, 주키로 사용되는 필드는 반드시 @Id
어노테이션을 명시해주어야 합니다.
JPA에서는 주키 필드 외에도, @Column
어노테이션을 사용하여 데이터베이스 테이블의 컬럼 정보를 지정할 수 있습니다. 이를테면, User
클래스에서 name
필드를 VARCHAR(255)
타입으로 매핑하고 싶은 경우, 다음과 같이 작성할 수 있습니다.
@Entity
@Table(name = "users")
public class User {
@Id
private Long id;
@Column(name = "name", nullable = false, length = 255)
private String name;
// ...
}
JPA는 이제 name
필드를 VARCHAR(255)
타입의 name
컬럼으로 매핑합니다. nullable
속성은 name
필드가 null
값을 가질 수 없음을 나타내며, length
속성은 name
컬럼의 최대 길이를 255로 지정합니다.
User, Board, Reply 테이블 생성을 위해 각 클래스를 생성하고 필드와 어노테이션을 사용하여 테이블을 생성합니다