이 문서는 스프링부트 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 테이블 생성을 위해 각 클래스를 생성하고 필드와 어노테이션을 사용하여 테이블을 생성합니다

UserTable 생성을 위한 User Class 생성